物理法則を無視したビーダマンのワンシーンをHoudiniで作ってみた【メニーターゲット編】

これはHoudini Advent Calender 2024 23日目の記事です。

# はじめに
お目汚し失礼いたします。
昨年のアドベントカレンダーに参加した時の記事、
[物理法則を無視したビーダマンのワンシーンをHoudiniで作ってみた](https://qiita.com/kashibal/items/91c9abe31d55c9c6ae67)
の別シーンを作ってみたので記録してこうと思います。
Houdini初心者の域を全く脱しておれませんので、間違いや非効率な点等ありましたらご指摘頂けますと大変ありがたいです。


# 漫画紹介
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324499/ec5b7a79-463c-1ec1-cd77-14bf6f038d84.png)
[爆球連発!!スーパービーダマン5巻](https://www.amazon.co.jp/dp/B00SUMO1A0/)







今回も爆球連発スーパービーダマンのワンシーンを再現しようと思います。
この漫画（というかコロコロコミック全般？）は表現力がとても豊かで、物理法則を無視したような誇張表現に当時子供心を躍らせた記憶があるので、それをHoudiniで再現してみようという試みです。
この漫画のこの巻でやっていることはビーダマンというおもちゃでビー玉を撃ちだし、ターゲットを多く打ち抜いたチームが勝つというゲームです。
ターゲットというのはビーダマンシルエットの板のようなもので、ビー玉が当たれば得点となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324499/a7368f6c-205d-c12e-c352-167c863bd329.png)











タイトルにあるメニーターゲットというのは下記添付画像のようにたくさん並んでいるもので、1つを除いてダミー（ハリボテ）です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324499/2022e3b8-578e-b80e-c5b3-c46a4766b1ec.png)
今回はこのハリボテを、当てずっぽうや数撃ちゃ当たるの精神ではなく、パワーショット一発でハリボテを全て吹っ飛ばした主人公のパワフルショットを再現してみようと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324499/6d42f90e-0adc-2d22-6f84-d34fbb3eaaae.png)








# 結果
<iframe width="560" height="315" src="https://www.youtube.com/embed/4BZktmAsOe4" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" loading="lazy" allowfullscreen></iframe>






Houdini 20.5.278使用
Karmaにてレンダリング

# やったこと
## ハリボテのモデリング
まずはハリボテをモデリングします。
シルエットの押し出しと、フレームに太ささえあればいいかなと思います。
gridやcircleを並べていき、symmetrizeし、edgegroup_to_curveでアウトラインを抽出。
あとは普通にpolybevelとpolyfillです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324499/56cae9d4-519e-a006-da17-610cec705172.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324499/3001bd4b-a8ae-0970-a4b2-82bf3a1e873a.png)








## テクスチャの作成
ただの縞模様のテクスチャですが、せっかくなのでCopernicusを使ってみます。
SDFshapeとtransform,add,blend等を組み合わせて縞模様を作りました。
Borderとか、Substance Designerのstripesノードみたいなのがあるといいなと思ったのですが見つけられず。
tilepatternを上手く使えれば良かったんでしょうが、とりあえず使ってみたかっただけなのでヨシ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324499/540695d6-bb7e-32db-99c3-dc118808c5c2.png)








## ハリボテの配置
前のハリボテと被らないように、斜めに配置していきます。
色々なやり方があると思うのですが、簡単だったのでaddpointで2点用意して、それをcopyandtransformで複製しました。絶対もっと賢いやり方あるんですけど…
その後wrangleで1点だけランダムに削除し、copytopointで、ハリボテ配置しました。
そしてなんとなく原作に忠実な位置に本物のターゲットがくるようにseedをいじります。
書くまでもないのですが一応。
```
int randompt = int(rand(ch("seed")) * @numpt);
if (@ptnum == randompt) {
    removepoint(geoself(), @ptnum);
}
```
このwrangleノードを参照コピーし、VEXをユニークにし二行目の一部だけ書き換えます。
```(@ptnum == randompt)```
==が
```(@ptnum != randompt)```
!=になるだけ。
同じシード値で、一つだけVellumを設定してない本物のターゲットを配置しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324499/8dc7a3dd-73a9-7a33-8852-5cec1ca7e152.png)








## Vellumの設定
Vellumの設定が肝になりそうなシーンですが、実の事を言いますとあまり自分で設定していません。
SideFXの[粉砕と引裂](https://www.sidefx.com/ja/docs/houdini/vellum/breaking_tearing.html)と
CGWORLDに連載されていた秋元先生のサンプルシーン
[Houdini Cook Book
Vol. 100 Vellum Peeling](https://cgworld.jp/regular/201908-hcb-100.html)
を参照したくらいです。
そのため、こちらの剥がれの表現はGroupCreateノードの範囲に入ることでactiveアトリビュートに数値を格納して吹き飛ばしに利用しているような使い方で実現しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324499/d86f1ad3-7332-55da-7e2a-fba40e4d3b8f.png)


# 振り返り
以上、ビーダマンのワンシーンでした。
まだまだ改善の余地ありますし、ただの作業記録なので誰かのナレッジにはあまりならなそうな点が書いている時点で既に申し訳ないです…もっと放射状に飛ばすべき。
とはいえアドカレのようなイベントの参加を決めてしまうと、無理にでもネタを捻りださないといけないのが良い刺激になり、ありがたいです。
次もあればこのシリーズで、シーンファイルが配布できるくらいには工夫したものを整理して出していきたいと思います。
ご覧いただきありがとうございました。