hi,
so finally there are two setups for download. For 'One Point Simulation' that coming with kH, and factory Strand Dynamics Framework. Both have a two separate point clouds. 'Point cloud_simulated', prepared for caching, and 'point cloud_load_cache', prepared for cache load. In order to see something meaningful, you'll need to cache the simulated point cloud, and load cache to 'load_cache' one. Here, caching process takes about minute for SDF ( Strand Dynamics Framework), much less for OPS (one point simulation), for about 200 frames.
Generally, structure is:
Simulated point cloud:
1: ICE tree in modeling region: basic emitter node, node for basic shape creation (here, kH Follow NURBS), nodes for initializing the simulation
2: ICE tree in simulation region: simulation nodes
3: Optional ICE tree in post-simulation, only for preview. Disable this ICE tree before caching (RMB in explorer, 'disable from here')
'Load cache' point cloud: this is created from simulated one - simulation stack is deleted, I've used 'cache on file' node for loading. This allows to have everything in a single ICE tree. However, you'll need to replace the emitter mesh with static copy (no deformations). In this single ICE tree there is:
1: basic emitter node, kH Follow NURBS or another 'form' node. 'Form' node still needs to be present, because it creates static vectors for later deformations.
2: load cache node
3: node for applying the particle motion to strands, for OPS, or... node for calculating the 'dynamic' deformation vectors, for SDF.
4. modifiers (bend, curls, randomize)
5. hair filler
A few words of simulations:
'One Point Simulation' simulates only on particles, it doesn't simulate on strands. In post simulation, spring motion is applied to strands, motion on particles is disabled.
It just bends the strands. For example, you can't get 'S' like shape. However, it's 'by design' faster than 'real' strand simulation, I'd believe it's more predictable too.
There are only three simulation parameters, typical for simple spring simulations: weight of linear and angular motion, weight of drag force. Preventing collision to external objects is still possible, but only in post-simulation, more like some small correction.
Factory strand dynamics framework is a full simulation on strands. Collision is calculated together with simulation. There is no self-collision, anyway. In movie a few post above, I've mixed SDF sim with transformed original strand shape. In simulated ICE tree, there is a node called 'kH3 restore original shape'. It's pretty much the same as 'strand groom force' from Melena/MT strands, but this time it's a 'brute force'. With full weight, this node will just kill the simulation, still transforming the strands by emitter's motion. You can weight this one along strands, for example, setting a higher weight at roots, zero weight at tips. It seems it also helping in calming the SDF sim.
Tip: keep weight less than one, even something like 0.99. Don't kill simulation completely (otherwise, I'm afraid ICE will come with optimizations, and whole chain of side-effects begins - at least I think so).
In 'cache_load' ICE tree of SDF, you'll see 'kH3 Apply Strand Orientation Delta' node, which re-calculates up-vector and tangent. In kH, these vectors are called 'kH_strandUpVector' and 'kh_Strand Tangent'. They are custom attributes, to prevent ICE to kill them on it's own choice. These two vectors are very important for correct behavior of modifiers (curls, bend). Method of this node is really basic - if deformed and transformed strand shape differs too much (more than 180 degree, I think), curl ( or another modifier) will suddenly rotate for 180 degree.
For those users who want better, I think the golden mine is a Gillaume Laforge's
Deform Strand Extrusion. I think this is the only public available node with, let's call it a 'smooth flip' (similar to standard 'deform by curve' OP). Of course, some adaptation would be required. In movie, I've used something along line of mentioned node, but still I don't feel ready to share it.
About collision nodes:
I've used 'Test Collision with Surface" from SDF - the same as "push strands outside the geo", or else. Node is looking to closest location on surface. According to dot-product of point normal and direction to closest location, it decides where to
push the strands. So, with some exaggerated motion this could be unwanted, opposite side. So, 'safe' speed could be a less than half length of collider's volume, per one sampling interval (that is, one frame. maybe... sub-frame in newest SI). For
motion in samples, let's say the head or arm is enough 'fat', ears or fingers, definitively not.
download
happy holidays