Для такой симуляции нужна жёсткая привязка к геометрии, поэтому задачу нельзя решить через коллизии.
В SOP я привязал группы точек к нулям объекта через матрицы, но так как FLIP-солвер не работает с @P, пришлось считать @v как разницу между текущей и предыдущей позицией прямо в солвере.
Вот код привязки точек к Obj трансформации:
string s1 = chs("link_1"); string s2 = chs("link_2");
matrix m1 = optransform(s1); matrix m2 = optransform(s2);
vector bb = relbbox(0,@P);//get bbox
float th01 = ch("th1"); float th02 = ch("th2"); //bbox threshold
if(bb.x<th01){
@P *=m1;
@group_pin=1;
@group_pinA=1;
}
if(bb.x>th02){
@P *=m2;
@group_pin=1;
@group_pinB=1;
}помимо привязки к геометрии я ещё создаю группы (pin, pinA, pinB) их я использую в симуляции.
Hip сцену я выложу на boosty