Lattice modifier+Dupligroup+Texture solid=weird result #24774
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
7 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#24774
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
%%%Start blender -> del all, create Monkey and Lattice -> Ctrl+P: Set Parent To Lattice Deform -> deform Lattice to deform monkey -> select Monkey and Ctrl+G -> Move all to layer 2 -> create Empty in layer 1 and set Duplication - Group - Group -> select Empty and Sift+D move away -> turn on Texture solid -> TADA!
Same result if I use Texture draw mode or press render.
But it's ok if Lattice will be same group as the monkey has.
In upload file turn on Texture solid to see issue.
Platform:
Windows 7 Home Premium x32
OpenGL:
Blender:
Version: 2.55.0
Revision: 33078
DEBUG:
ordered
OBLattice
OBMonkey
swin 13 added
bpy.ops.object.move_to_layer(layers=(True, False, False, False, False, False, Fa
lse, False, False, False, False, False, False, False, False, False, False, False
, False, False))
pass on evt 272 val 0
handle evt 272 win 12 op INFO_OT_reports_display_update
pass on evt 109 val 2
pass on evt 1 val 1
read file C:\Users\mirahal\Documents\untitled.blend
ordered
OBLattice
OBMonkey
ordered
OBLattice
OBMonkey
recalcob Monkey
recalcdata Monkey
pass on evt 272 val 0
handle evt 272 win 12 op INFO_OT_reports_display_update
pass on evt 1 val 2
pass on evt 217 val 1
pass on evt 97 val 1
handle evt 97 win 12 op WM_OT_call_menu
swin 13 added
pass on evt 217 val 2
pass on evt 97 val 2
pass on evt 272 val 0
swin 14 added
handle evt 272 win 12 op INFO_OT_reports_display_update
pass on evt 1 val 1
pass on evt 1 val 2
handle evt 0 win 12 op OBJECT_OT_add
ordered
OBEmpty
OBLattice
OBMonkey
bpy.ops.object.add(type='EMPTY', view_align=False, enter_editmode=False, locatio
n=(0, 0, 0), rotation=(0, 0, 0), layers=(True, False, False, False, False, False
, False, False, False, False, False, False, False, False, False, False, False, F
alse, False, False))
recalcob Empty
recalcdata Empty
pass on evt 272 val 0
handle evt 272 win 12 op INFO_OT_reports_display_update
pass on evt 1 val 1
pass on evt 1 val 2
pass on evt 11 val 1
handle evt 11 win 4 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 4 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 4 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 4 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 4 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 4 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 4 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 1 val 1
ordered
OBEmpty
OBLattice
OBMonkey
recalcob Empty
pass on evt 272 val 0
handle evt 272 win 4 op INFO_OT_reports_display_update
pass on evt 272 val 0
handle evt 272 win 4 op INFO_OT_reports_display_update
pass on evt 272 val 0
handle evt 272 win 4 op INFO_OT_reports_display_update
pass on evt 272 val 0
handle evt 272 win 4 op INFO_OT_reports_display_update
pass on evt 1 val 2
pass on evt 272 val 0
handle evt 272 win 4 op INFO_OT_reports_display_update
pass on evt 272 val 0
handle evt 272 win 4 op INFO_OT_reports_display_update
pass on evt 272 val 0
handle evt 272 win 4 op INFO_OT_reports_display_update
pass on evt 1 val 1
swin 13 added
pass on evt 1 val 2
ordered
OBEmpty
OBLattice
OBMonkey
recalcob Empty
pass on evt 1 val 1
swin 13 added
pass on evt 1 val 2
pass on evt 1 val 1
pass on evt 1 val 2
ordered
OBLattice
OBMonkey
OBEmpty
recalcob Empty
pass on evt 217 val 1
pass on evt 100 val 1
handle evt 100 win 12 op OBJECT_OT_duplicate_move
ordered
OBLattice
OBMonkey
OBEmpty.001
OBEmpty
recalcob Empty.001
recalcdata Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
pass on evt 217 val 2
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
pass on evt 100 val 2
recalcob Empty.001
pass on evt 2 val 1
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
pass on evt 2 val 2
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
recalcob Empty.001
pass on evt 1 val 1
bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":1}, TR
ANSFORM_OT_translate={"value":(0, 0, 0), "constraint_axis":(False, False, False)
, "constraint_orientation":'', "mirror":False, "proportional":'DIS
ABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":Fals
e, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_no
rmal":(0, 0, 0), "release_confirm":False})
recalcob Empty.001
pass on evt 272 val 0
handle evt 272 win 12 op INFO_OT_reports_display_update
pass on evt 1 val 2
pass on evt 110 val 1
handle evt 110 win 12 op VIEW3D_OT_properties
swin 13 added
bpy.ops.view3d.properties()
pass on evt 110 val 2
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 10 val 1
handle evt 10 win 13 op VIEW2D_OT_scroll_up
bpy.ops.view2d.scroll_up(deltax=0, deltay=40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 1 val 1
handle evt 1 win 13 op VIEW2D_OT_scroller_activate
pass on evt 272 val 0
handle evt 272 win 13 op INFO_OT_reports_display_update
pass on evt 1 val 2
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 11 val 1
handle evt 11 win 13 op VIEW2D_OT_scroll_down
bpy.ops.view2d.scroll_down(deltax=0, deltay=-40)
pass on evt 272 val 0
swin 14 added
handle evt 272 win 13 op INFO_OT_reports_display_update
pass on evt 1 val 1
pass on evt 1 val 2
pass on evt 260 val 0
*************************************************************************%%%
Changed status to: 'Open'
%%%This is indeed very strange, assigning to myself.%%%
%%%Turn on layer 2 to have the lattice shown.
On grabbing lattice, the deform has error, on ESC it returns to normal then (in texture solid).
Seems there's different derivedmesh code involved here.%%%
%%%This happens because the modifier is being re-calculated while the dupli-object is drawing.
Drawing a dupli-object overrides the objects matrix, so when draw_mesh_fancy() calls mesh_get_derived_final(), the modifier stack is re-evaluated with an incorrect matrix.
The mesh_get_derived_final() is recalculating the stack because the view drawing datamask changes.
Possible fixes:
%%%The customdata mask should be computed from the open 3d views, doing derivedmesh recalculations means derivedmesh will always be computed twice, and it's not reliable because it's not done in the right dependency graph order. In 2.4x there was code to compute this customdata mask in object_handle_update, I think something similar should be added back in 2.5.%%%
%%%Fix has been submitted in svn by campbell 5 days ago. Tested error file, and it goes fine now :)%%%
%%%5 days ago? I get 33931 revision, and the same bug. (test file -> turn on Texture solid)
Maybe Campbell fix is not what he should? :)%%%
%%%Hallooo? Any body? This bug is not fixed. Report must be reopen.%%%
%%%ubuntu 10.10 64bits r34251
I don't know if it can help. Campbell seems to have identify problem.
But I am not sure if what I noticed is a well-known consequence or if it can help to precise problem.
So, I comment.
Displayed Mesh Data for every group instance correspond to what would be normal Mesh Data if Monkey was at the location of the last created instance.%%%
%%%fixed r34284.
there were 2 problems.
fixed by making group_handle_recalc_and_update() work like how it did in 2.4x. applying the recalc flag to objects in the group.%%%
%%%fix was incorrect, reverted this commit, re-opening.%%%
%%%Note, I tested in 2.4x again and found it is actually broken there as well, (before I tested in 2.4x and it seemed to work ok).%%%
%%%Note, quite sure we relied on this bug for durian so sintels hair would be evaluated in dupli-space.%%%
%%%I'm now confused... what's the status?%%%
%%%Ill try explain the problem as I understand it
I think the best way to deal with this is to add in logic which calculates the modifier stack for objects which are in the scene in worldspace even if they are first drawn as a dupli and are on a hidden layer, otherwise we get this problem where changing layers changes the modifier transform.
This could be done in 2 obvious ways
When drawing objects, even if the object is on hidden layer add ability to know if the object is drawn later as a dupli and calculate its modifier stack anyway (though its hard to know what will be drawn later)
When drawing duplis tag objects which are directly in the scene and use this tag to known when to use the original worldspace matrix for calculating the modifier (This is more realistic however the objects currently don't store their original worldspace matrix, the duplis do but this can be changed and its simpler then option 1 still).%%%
%%%Are we just trying to patch design troubles now?
One way to look at this: it seems the way ob-dupli is overwriting matrices is the bad thing; we might better have a real depsgraph (scene graph) holding such local storage by default.
The other way is that apperently textured draw is going via a different route, and could be fixed up?%%%
%%%>>> ob-dupli is overwriting matrices is the bad thing
Agree, though we did make use of it for sintel when the sim could run on the dupli transformaion, but we should really have some better method to get the same results.
its not, the change of draw mode just triggers a modifier recalc because the existing derived mesh has no UV coordinates since they were not required on solid mode.%%%
%%%Might i ask about status of this issue?%%%
%%%Any updates here? %%%
%%%I suggest we give up on this to work well. It's a design issue that shows the weakness of blender handles display data for duplicated objects.
Best I can do is to add this report as a reference to the list of issues that have to be solved by the "Depsgraph" recode project.
http://wiki.blender.org/index.php/Dev:2.5/Source/Development/Todo/Animation#Dependency_Graph%%%
Changed status from 'Open' to: 'Archived'