キャラの歩行時にちゃちゃっと自動で煙などを出すときに使える技です
やることは
>各足のパーツを一個にしてAssembleやPackなどで1個の点にする
>キャラなどの足からIntersectして地面に近いときに点を作成してあげる
>CopyToPointsでEmitterの形状の作成
1.地面とキャラクターを適当に作成してください
今回は皆大好きCrag君とGridを適当に配置します
2.まずCrag君の足が複数パーツになってるので一個のパーツにしてしまいたいです
3.PointDeformとConvexHullで各足を1個にまとめてあげます。(手動で好きな点を一個選んでもOKです)
4.Assembleを使ってPackして、各足を1Pointにしておきます。
5.Intersectで当たったPとPrimNumberのAttributeを作成しておきます。
ヒットしない場合はPrimNumが -1 になります。当たれば当たったPrimNumが返ってきます。
>これがWrangleです。
//MakeID(To Kill in the End)
i@ID = 1;
vector origin = @P;
float max_dist = chf("foot_dist");
vector dir = max_dist * normalize(chv("dir"));
v@insect_pos;
float insect_u,insect_v;
i@insect_prim = intersect(1, origin,dir, v@insect_pos, insect_u, insect_v);
今この状態でヒット位置とヒットしたかどうかがわかる材料があります。
if(i@insect_prim<0){
removepoint(0,@ptnum);
}
7.下記のようにwrangleを書くことでヒットした位置にPointを addpoint で作成してあげます。
注意点として、作成したPointに値を引き継ぎたい場合はsetAttributeをしないとだめです。
vや他の物を引き継ぎたくなると思うので、その時は例に習ってsetです。
//Make Attribute to get again
int i = 0;
for( i; i<chi("iterations"); i++){
int newpos = addpoint(0, v@insect_pos);
setpointattrib(0, "v", newpos, v@v, "set");//保存したいAttributeがあればこれでセットしてあげないとゼロが入ります。
}
//Kill_Original
if(i@ID==1){
removepoint(0,@ptnum);
}
8.あとはCopyToPointやPOPなどでこの点を使ってEmitしていけます!!
キューピー3分クッキングに負けない勢いで簡単Intersectの話でした。
もしゃこ