3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Houdini ApprenticeAdvent Calendar 2022

Day 12

キャラクターの足が地面に接したときに自動でPointを作成してEmitterを作る

Posted at

キャラの歩行時にちゃちゃっと自動で煙などを出すときに使える技です
やることは

>各足のパーツを一個にしてAssembleやPackなどで1個の点にする
>キャラなどの足からIntersectして地面に近いときに点を作成してあげる
>CopyToPointsでEmitterの形状の作成

1.地面とキャラクターを適当に作成してください
 今回は皆大好きCrag君とGridを適当に配置します

2.まずCrag君の足が複数パーツになってるので一個のパーツにしてしまいたいです
image.png

3.PointDeformとConvexHullで各足を1個にまとめてあげます。(手動で好きな点を一個選んでもOKです)
image.png

4.Assembleを使ってPackして、各足を1Pointにしておきます。
2022-12-10_13h45_32.png

image.png

5.Intersectで当たったPとPrimNumberのAttributeを作成しておきます。
  ヒットしない場合はPrimNumが -1 になります。当たれば当たったPrimNumが返ってきます。
image.png

>これが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);

今この状態でヒット位置とヒットしたかどうかがわかる材料があります。

6.ヒットしてないPointをKillしておきます
2022-12-10_13h52_10.png

if(i@insect_prim<0){

    removepoint(0,@ptnum);

}

7.下記のようにwrangleを書くことでヒットした位置にPointを addpoint で作成してあげます。
  注意点として、作成したPointに値を引き継ぎたい場合はsetAttributeをしないとだめです。
vや他の物を引き継ぎたくなると思うので、その時は例に習ってsetです。

image.png

//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していけます!!:slight_smile:

キューピー3分クッキングに負けない勢いで簡単Intersectの話でした。

もしゃこ

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?