So make one copy per particle in the instancer. In actuallity you never need them all in same fidelty you juat think you need it.
Say you have 3000 humans all doing several things, well yes, but wouldnt 3000 humans doing 100 induvidual things fool the user equally well. Well it does. This is why the instancer exists, outside thsi scope its of no use. However once you reach the point whereeach particle instancer is 1 object you gain nothing form using particles. You just loose something. Speed performance and gain.
Now why do people THINK they need particle isntancing. Well for starters beccause they are not programmers and they think you can not have loops in expressions. It turns out they are wrong. Thing is tough the expression node is a extremely limitted compiler. But if you realize that it is actually justr a preprocessor for expression specific syntax it start suddenly making sense.
Thinking something si what you need is different form what you really need.
So you can have loops in expressions. You just nee to tell the preprocessor what the hell it is you mean. In actuallity you could omit this if you would write your own preprocessor. But thats just semantics. the fact is wether or not you type it its how it works. So what does the preprocessor look for, it looks for connection definitions. So let us provide it to the system, lets make a cool thing that has allmost no practical use whatsoever. I call it string of beads:
create 10 (nurbs) r=1 spheres on the -z line with a separation of 2.4 units form each one before make a expression (set evaluation to on demand this speeds up things a bit):
//pre processing statement 1
vector $position[];
$position[0]=<>;
$position[1]=<>;
$position[2]=<>;
$position[3]=<>;
$position[4]=<>;
$position[5]=<>;
$position[6]=<>;
$position[7]=<>;
$position[8]=<>;
$position[9]=<>;
//eof prprocessing 1
$numberOfItems=size($position);
//iterate each solution x times this make sfor a better solution
for ($oversample=0;$oversample<10;$oversample++){
for ($item=0;$item<$numberOfItems;$item+=1){
//drag the next sphere to 2.4 units off its predecessor
if ($item>0){
$dif=$position[$item-1]-$position[$item];
$position[$item]=$position[$item-1]-unit($dif)*2.4;
}
//push aside any collisions
for ($a=0;$a<$numberOfItems;$a+=1){
if ($a!=$item){
$dif=$position[$item]-$position[$a];
if (mag($dif)<2)
$position[$a]=$position[$item]-2*unit($dif);
}
}
}
}
//pre processing statement 2
$temp=$position[1];
nurbsSphere2.translateX=$temp.x;
nurbsSphere2.translateY=$temp.y;
nurbsSphere2.translateZ=$temp.z;
$temp=$position[2];
nurbsSphere3.translateX=$temp.x;
nurbsSphere3.translateY=$temp.y;
nurbsSphere3.translateZ=$temp.z;
$temp=$position[3];
nurbsSphere4.translateX=$temp.x;
nurbsSphere4.translateY=$temp.y;
nurbsSphere4.translateZ=$temp.z;
$temp=$position[4];
nurbsSphere5.translateX=$temp.x;
nurbsSphere5.translateY=$temp.y;
nurbsSphere5.translateZ=$temp.z;
$temp=$position[5];
nurbsSphere6.translateX=$temp.x;
nurbsSphere6.translateY=$temp.y;
nurbsSphere6.translateZ=$temp.z;
$temp=$position[6];
nurbsSphere7.translateX=$temp.x;
nurbsSphere7.translateY=$temp.y;
nurbsSphere7.translateZ=$temp.z;
$temp=$position[7];
nurbsSphere8.translateX=$temp.x;
nurbsSphere8.translateY=$temp.y;
nurbsSphere8.translateZ=$temp.z;
$temp=$position[8];
nurbsSphere9.translateX=$temp.x;
nurbsSphere9.translateY=$temp.y;
nurbsSphere9.translateZ=$temp.z;
$temp=$position[9];
nurbsSphere10.translateX=$temp.x;
nurbsSphere10.translateY=$temp.y;
nurbsSphere10.translateZ=$temp.z;
//eof prprocessing 2
Ok so the processor statemenst make the code look messy but you the user can ignore them all you need is to inject them after your edit so theres no reason you need to worry about them. in fact saying ist bad coding practice is a bit stretching it, a lot of this kind of autimatic injection does happen even in better systems, just as long as its hidden its not hindrance.
Drag the first sphere see the others follow it but avoid collision
Ok so this has a problem it does not remeber the starting state so inject:
if (frame==1)
for ($item=0;$item<$numberOfItems;$item+=1)
$position[$item]=<>;
before the last preprocessor. Note im not moving the number 1 sphere because im reserving you keying its position so you should key also the initial state. If you want better it easy to extend the service of initial state to the objects themselves.
This is for how to do massive expressions easily with very little effort WITHOUT particles. Now in next post i can expand this a bit. You can get much better.
PS: sorry about the new board mucking the layout of the scripts so they are a bit hard to read when you paste them just indent them again.