Dan's compound dump.
Hi guys, I have a bunch of compounds that I've been meaning to share for ages now. I meant to tidy them up and improve on a few before sharing, but I can just never find the time so I'm just going to dump them all here for people to use and abuse in their current states.
I've attached a workgroup that contains all the compounds and a plugin that is used in conjunction with a couple of the more useful ones...
'Pick Random Value from Array Per Point' - Self explanatory!
'Pick Random Value from Array' - Same as above, but exposes the ID (can be per poly or whatever you like)
'Build Weighted Value Array' & 'Pull Value from Weighted Value Array' - Please see Julian Johnson's excellent post here
for a full explanation (he created it, I just made some compounds based on his idea).
* Conversion Nodes
'Boolean to String'
'Integer to String'
'Scalar to String'
Kinda redundant. These were just an exercise to see if I could do this with the native nodes (I also use them in my Debug Pointcloud compound iirc). emTools already has these...
'Bind Matrix from Object' & 'Bind Matrix to Object'
Use these to bind geometry or pointclouds from a static source to a deforming target.
The 'Bind Strands' option will bind each strandposition (very slow if you have lots of strands, obviously, but not terrifyingly so). When off, the whole strand is transformed by it's point.
'Blend to Line' - Self explanatory!
'Debug Pointcloud' - just displays data about a pointcloud
'Debug Strand Orientation' - displays StrandOrientation axes *in place* on strands
'Debug Vector on Strand' - displays a vector array *in place* on strands
'Derive Primitive Type' - Self explanatory!
'Force Per Element Value' - Set a value and choose the output you require.
'Force Single Attribute Evaluation' - Force attributes to be cached. Redundant in 2015 (you can use the attribute editor instead)
* Session Control Plugin and Compounds
The Session Control plugin adds a menu entry 'Create Session Ctrl' to the Get -> Property menu. This creates a Custom Property on the scene root which exposes various useful parameters that can then be accessed from an ICE Tree. The key one is the 'Session is Interactive' parameter. You can then use these compounds:
'Set Value by Session Type'
'Set Value Percentage by Session Type'
'Execute by Session Type'
to set different values to use when in an interactive session or in batch. Good if you want test some values but not screw up if you forget to turn them up again before you render for example.
'Generate Cars Along Curve' - A little thing I made years ago to fill distant roads with moving cars. Bit crap really. The 'Speed Lane Factor' does nothing as far as I can tell. What can I say, I was young, I was naive...
'Calculate Distance to Line' - Self explanatory!
'Calculate Distance to Plane' - Self explanatory!
These are very useful...
'Build Evenly Spaced Strand Positions' - Took Julian Johnson's compound for curves and adapted it for strands.
'Deform Strands by Strands' - WIP, too long to explain... Have a play!
'Emit Pulse Particles Along Strands' - WIP, non-simulated, quite fun. A few bugs.
'Fill Strand Profile with Points' - Will create points that fill the shape of the strand.
'Fix Strand Orientations' - Create a nice non-flipping strand orientation. Waaaay back, there was an issue we encountered with Redshift where if the shape was set to any kind of tessellated primitive (cylinder, capsule etc.) and there was a lot of flips or twists in the strand orientations Redshift would chew for ages on the tessellation where it tried to resolve these surface inconsistencies. My compound may fix this.
'Generate Strands from Curves' - Can use a group of curves as an input. Rray has a more evolved version that supports the Strand Dynamics Framework attributes (although I think I may have changed a couple of things since the version his is based on, not sure what though...)
'Move Strands Outside Geometry' - Just the factory 'Move Points Outside Geometry' node adapted for strands...
'Resample Strands' - Self explanatory!
'Split Strand By Condition' - Will split strands based on a change of condition from the previous point. e.g. If you plug in a Point in Volume node using StrandPosition for Position, your strands will be split at the boundaries. You can have multiple splits.
'Split Strands at Closest Point' - Will split strands based on distance to a position. Options to reverse the away facing strands and filtering out split candidates based on some conditions.
'Generate Simple Name Hash' - Will create a simple unique hash integer per object. These can be used to drive seeds so when you duplicate something that uses it to drive the seed in its ICE tree it'll always get a unique seed.
'Per Object Random Weight' - Uses the 'Generate Simple Name Hash' node to generate a random 'weight' attribute per object (well, per point, but uniform)