Marvin confirmed this issue in the x64 version
of DP Kit MDD Cache node and detected how to fix it,
then he found and fixed a few other issues,
concerning loading a preset or a scene or
even playing an MDD file,
I'm also sure that these modifications fix older random
issues, reported before in the x32 version.
...Also a "Start" Input per point evaluation caused a slowdown
in the MDD Cache done without a "Speed" input,
this is caused by the specific evaluation per point
in MDD Cache node (MDD Pointer evaluation is done per frame)
I add a modification, yet in the x32 version,
no more need to add a constant input nodal Speed of x1
for just adding an frame offset (Start) to the
selected MDD animation.
I updated the x32 version of DP Kit with a few modifications and additions,
they concern the MDD Cache node and the Motion Info node,
the goal is mainly to help for animating crowd.
In almost all DP Kit Displacement nodes, evaluation is now stricly
locked, if the Displacement node editor is disabled or if the
"Node Displacement" Command (for all objects) is toggled to "off",
mainly usefull with MDD nodes applied to many objects in the scene.
-Added a few new outputs in Motion Info node,
X Velocity, Y Velocity, Z Velocity, Speed, (normalized) Direction,
Major and Minor Axis (0 means no Maj/Min axis, 1:X, 2:Y, 3:Z),
They are all calculated on a portion of time, based on actual time
or modified time (Mapped-Time or various inputs in the node) and the
previous sampled sub-frame (-1 frame / number of samples).
Added a "Use Parent" option in Motion Info node, to use automatically
the parent as Reference (it is used internally but not selected in
the Reference list).
...Was the idea, to avoid tedious manual work
for crowd animation based on the motion path of the parent,
but I didn't experiment it myself a lot,
mixing or control the speed of an animation playback
(kind of nodal motion-mixer...) is not simple.
At least, MDD Cache and Motion Info nodes
are two bricks in the wall.
One thing which might also aid that quest is a way to blend between stored MDD's perhaps with a weight map? So you could have a slow walk, to a faster walk to a run and have something drive the blending.
EDIT: Doh! I see thats what you were getting at - keep up the effort, is very worthwile
This node is a fricking powerhouse! Great job Denis.
I just finished a shot where I drove over 500 people in a crowd simulation using twenty something different MDD files between 10MB and 20MB each all driven by the MDD Cache Node. And it works awesome!
I had about nine different people models and two to three different MDD motions for each model. I setup the twenty-something different configurations and just CLONED and CLONED! No need to buy HD Instance, although it would have saved some time later.
The whole thing uses the MDD Cache Node that all the clones reference. I think it only crashed once or twice in the whole time of working on the shot. It always loaded though and always worked on all machines. :thumbsup:
The few gotchas I had were when I needed to edit the playback on the CLONES! The clients requested more motion offset and playback speed variation between clones than what I had setup in the original twenty. I couldn't edit each clone, so I had to actually use Notepad++ to query the LWO file and change the nodes parameters in the file! The good news is it worked. My CS degree came in handy as I had to write a few regular expressions to do a few "find and replaces" in the LWO and then write a script to do it procedurally with random variation. NOTE: Notepad++ is great for hunting through text files.
I would say that if there was some kind of interface or plugin to edit the motion offset, playback, etc of the MDD Cache Node of all the clones, that would be really handy. Also, I don't know if this is a LW limitation but the parameters for the node did not have any labels in the LWO file when they're saved out, so this made hunting them down procedurally really difficult because I couldn't just search for "offset" or "playback". Is there a way to add labels for your nodes in the LWO file?
I should have probably used HD Instance but the company wouldn't buy it since I mentioned that it could be done with the MDD Cache Node. :bangwall: But it ended up not being too bad. Proof that Lightwave with a few handy plugins can still do a little heavy lifting. Lightwave did seem to peak out around 500 clones, so above that I probably would of HAD to of went with HD Instance.
Anyway, great job Denis. I'll post back here when the feature hits the theaters that this shot is in! (Sometime around Christmas )
Oh wow, so I could drive the offset and speed with an Object ID/Gradient combination, so that way each and every clone is slightly different? Very cool. I didn't even think of that.
I just manually made enough different hard-coded variations, about twenty, and then cloned. But that wasn't enough variation. So I had to go into the LWO file to make changes.
I suppose though, even if I used the above method with the Object ID/Gradient, if there was some kind of client change, I'd still have to have a way to go in and edit every clone, which there's currently no way to quickly/easily do. Right? For example, if the client said, "Make them all walk faster."
We should spoke about pseudo-random,
meaning random but always same random
in other terms we just need to break
the linearization of the objectID indexes,
always incremented by 1, so a objecID
input in a chaotic gradient will do that,
or try to use the Random node (DPKit)
in "Object mode" (no need extra ObjectID
node), may be Mike has also some
solutions and advices in his DB&W tools.
Here's another question... I'm working on something now where I have about 100 clones of an object. I want each clone to be slightly different in its Diffuse texture value. Basically I want the lightness/darkness to vary per clone, but I don't want to make several "versions" of the object or use a giant Turbulence texture set to "World Coordinates", because I'm going to animate them. The Object ID trick seems like it would work perfectly... if I could figure it out.
What would the node setup look like to use the Object ID and "massage" that number into a value that would be between 70% and 100% that I could then plug into the diffuse channel? I'm at a loss for how to do this...