Thank You guys,
Of course I planning to share this, I just need to find some way to make it really useful. Even it really isn't a rocket science, far away of that... it can be very hard to figure out what the hell I did with all these compounds. On the other side, open structure allows flexibility for me. I would say, just an usual contradiction with ICE
I thinking about some kind of tutorial for specific task, together with support files, compounds.. For now, the first candidate is a 'stadium people' setup, where all actors are animated procedurally, but still can perform separate actions, directed by you.
Basic structure is a simplified version of crowd setups that Helge Mathe already did in his mt-ice_tutorials. IK chains are from these files too. I think these tuts are still downloadable from this place.
Nothing is simulated here, everything is (almost) procedural animation.
There are two point clouds. First point cloud is a 'driver' of action. This one is animated, in the same way as birds in 'animated flock of birds' tutorial - actors are following virtual paths, created as curves in between NURBS surfaces. This point cloud performs a few tasks more, such as creating positions for foots and upper body, raycasting the ground, saving a 'path percent' value, creating basic walk cycle. Walk cycle is created with simple 'walk generator'. Equivalent of 'path percent' is modulated by function curves - with all drawbacks of this approach. It's very, very hard to get believable human walking with this - but all of us know that aliens are walking just in this way
Second point cloud is for creating clones. Firstly it's just a copy of driver point cloud, then points are cloned in order to match skeleton's hierarchy - number of envelope group members is number to clone. Original points are deleted, to get uniform pattern. For example, if you have 25 deformers in envelope, with this pattern the same body part will take ID 26, 51, 76, 101... Formula for matching is something like ((Point ID - number of point in driver point cloud) / number of members in skeleton group)> select in array of global transform in group. BTW, basic math operations, like divide by scalar and modulo, also ID to location geometry query - seems to be soooo often with these setups...
Global transforms from skeleton group are saved as custom attribute, as per point array. They are also saved as a matrix per point - this is an equivalent of Static Kine State property. Some other custom attributes are created as well: 'PartID', 'ActorID'....
This time, rig is a common IK/FK mix, legs are IK, all the rest is FK. So the next step is to transfer positions for upper body and foots. For the rest of rig, only rotations were used. Some of rotations are again 'path percent' modulated by function curves or trig functions (Sinus rulez

). Rotations of antennas and rods are angles multiplied by turbulence, turbulence is driven by point positions. For now, 'Select Case' node is used - 'Part ID' as input, then 'something' in appropriate port.
Next step is a bunch of small compounds for creating parent/child relationship, executed one after another, following 'PartID' attribute. After that, two IK solvers. I've created a much better version of these solvers during this weekend, now they have a stretchy soft IK as an option.
At the end, there is a compound that convert all transforms into the new custom matrix attribute - this is equivalent of skeleton's global transform.
Each alien has an ICE envelope, slightly modified DQ skin compound (here I've used only linear blending, I just forgot to activate DQ). Instead of envelope group as input, point cloud is used, with ICE tree like
this one. By modifying 'ID on driver point cloud' value (the one commented with orange bar), aliens will 'jump' through points of driver point cloud. Pattern for matching these ID's strictly rely on pattern used for creating clones.
By the way, the same method can be used for placing the point cloud as an intermediate deformer, in between skeleton and final envelope output - you'll need just one point cloud for that, created from members of envelope group.
I've tried other way for enveloping, such as separating actors inside only one mesh, by using indices on mesh, something along line line of MT_static_Instancer - even I got it to work, it tends to be exponentially slower on large meshes, I guess because of multiplying all these huge arrays. By separating the job in a smaller pieces/actors, performance seems to fall pretty linearly. For about 40 actors, in total of 70K triangles and 1K envelope deformers, the best playback is about 9 FPS on QuadCore machine.
Also, promising alternative for enveloping seems to be a simple, automatic interpolation of saved attributes from closest points on point cloud (Get Closest Points node), especially after freezing ICE tree that creates attributes. But it isn't very accurate.
Of course, if instances are used instead of enveloping - one instance for each body part - playback is much better.
Cheers