What is an “object xyz texture”? I don’t have one of those.
Genome uses the intersection of all the validity intervals of objects used in the flow to determine the validity. Any caching beyond the InputGeometry node is left to the 3ds Max geometry pipeline. If your texmap you are evaluating reports a instant validity interval, Genome cannot do any better. One caveat is the InputScript node which will immediately force Genome to use a instant validity since we cannot determine the validity interval of an evaluated MXS expression.
That being said, each channel is assigned the same validity. No attempt is currently made to determine different intervals for geometry vs. selection vs. texture channel etc.
I can’t reproduce this. I created a teapot with a Genome modifier on top. The genome flow was this:
[code](–MAGMAFLOW2–
global MagmaFlowEditor_EditBLOPHistory = #()
global MagmaFlowEditor_Genome_Properties = #(#(#removeDegenerateFaces, false), #(#clampVertexSelection, true))
global MagmaFlowEditor_Genome_MeshIterationMode = #facevertex
node0 = magmaNode.createNode “Output”
magmaNode.setNumNodeInputs node0 1
magmaNode.setNumNodeOutputs node0 0
magmaNode.setNodeProperty node0 “channelName” “Color”
magmaNode.setNodeProperty node0 “channelType” “float32[3]”
magmaNode.DeclareExtensionProperty node0 “Position”
magmaNode.SetNodeProperty node0 “Position” [670,180]
magmaNode.DeclareExtensionProperty node0 “Selected”
magmaNode.SetNodeProperty node0 “Selected” true
node1 = magmaNode.createNode “TexmapEval”
magmaNode.setNumNodeInputs node1 6
magmaNode.setNumNodeOutputs node1 1
magmaNode.setNodeInputDefaultValue node1 1 [0,0,0]
magmaNode.setNodeInputDefaultValue node1 2 [0,0,0]
magmaNode.setNodeInputDefaultValue node1 3 [0,0,0]
magmaNode.setNodeInputDefaultValue node1 4 [0,0,0]
magmaNode.setNodeInputDefaultValue node1 5 0
magmaNode.setNodeInputDefaultValue node1 6 1.0
try(theMaps = getClassInstances Cellular
for m in theMaps where m.name == “Map #1” do magmaNode.setNodeProperty node1 “texmap” m)catch()
magmaNode.setNodeProperty node1 “mapChannels” #()
magmaNode.setNodeProperty node1 “resultType” “Color”
magmaNode.DeclareExtensionProperty node1 “Position”
magmaNode.SetNodeProperty node1 “Position” [330,140]
magmaNode.DeclareExtensionProperty node1 “Selected”
magmaNode.SetNodeProperty node1 “Selected” true
node2 = magmaNode.createNode “InputChannel”
magmaNode.setNumNodeInputs node2 0
magmaNode.setNumNodeOutputs node2 1
magmaNode.setNodeProperty node2 “channelName” “Position”
magmaNode.setNodeProperty node2 “channelType” “”
magmaNode.DeclareExtensionProperty node2 “Position”
magmaNode.SetNodeProperty node2 “Position” [10,190]
magmaNode.DeclareExtensionProperty node2 “Selected”
magmaNode.SetNodeProperty node2 “Selected” true
node3 = magmaNode.createNode “InputChannel”
magmaNode.setNumNodeInputs node3 0
magmaNode.setNumNodeOutputs node3 1
magmaNode.setNodeProperty node3 “channelName” “TextureCoord”
magmaNode.setNodeProperty node3 “channelType” “”
magmaNode.DeclareExtensionProperty node3 “Position”
magmaNode.SetNodeProperty node3 “Position” [0,310]
magmaNode.DeclareExtensionProperty node3 “Selected”
magmaNode.SetNodeProperty node3 “Selected” true
try(magmaNode.setNodeInput node0 1 node1 1)catch()
try(magmaNode.setNodeInput node1 1 node2 1)catch()
magmaNode.setNodeInput node1 2 -1 1
try(magmaNode.setNodeInput node1 3 node3 1)catch()
magmaNode.setNodeInput node1 4 -1 1
magmaNode.setNodeInput node1 5 -1 1
magmaNode.setNodeInput node1 6 -1 1
)[/code]
Here’s a screenshot:
[attachment=0]vertex_color_work_fine_silly.png[/attachment]
I used a cellular map with a checker map in the Cell Color slot so that it would be obvious when it was updating. The Bend on there is to add a keyframe that does nothing so it updates every frame like you claimed. Otherwise I was only having Genome evaluate once and the result was cached. During playback( ie. hitting the play button) nothing flickered or acted funny at all. I have 2 physical cores and hyperthreading enabled. This was Genome 0.9.2.47031 & 1.0.1 both on Max 2012 64-bit.
Do you get any messages in the listener? There were previously race conditions when it came to assigning selection due to the use of a BitArray which obviously can’t have multiple threads writing to it at the same time. When operating on vertex colors there is never any overlap on the same faces assigned to the same thread so I don’t think its a threading problem. I have seen similar results when an exception prevents the completion of the loops. Usually its just garbage data all around though, and not partial data.
Thanks Ben! That scene reproduces the problem on my machine too.
Hopefully in an upcoming build that is ~2 weeks out.