もうアドベントカレンダーの季節とか嘘でしょう…?(N++回目)
気を取り直して皆さんいかがお過ごしでしょう。
今年もおかげさまでHoudini三昧の毎日を…(以下略)
Houdini Apprenticeアドベントカレンダーは下記8日目にすでに参加しているのですが、例年に比べ空きが目立ったため急遽もう一日参加することとしました。
本日も詰Houdiniについてお話をしたいと思います。
本記事はHoudini Apprentice アドベントカレンダー2022 14日目の記事です。
目次
詰Houdiniとは?
こういうやつです。
詰Houdini、ひとつの目標に対して各々が様々なアプローチでチャレンジし、より美しくより柔軟でより強固なネットワークを目指すっていう実にHoudinistらしいエクストリームスポーツで控えめに言って最高。
— めんたいこ (@kickbase) November 28, 2022
「最も小さいネットワークであること」にはそれほど重点をおいていないところがポイントで、クレバーな回答や高速なもの、柔軟であることを重視してみんなでチャレンジするところが非常に面白い試みです。
勝敗を競うのではなく、新しいアプローチを発見した際などは惜しみない賞賛を送り合う、そんな紳士淑女のスポーツです。
具体的にはこんな感じで日々ネットワークを組んでいます。
詰Houdiniのお題。どんなネットワークが出てくるか楽しみ! pic.twitter.com/gy4iFKs2BK
— めんたいこ (@kickbase) December 8, 2022
データ配布
記事で使用したシーンはこちらからダウンロードできます。
ファイル制作環境
- Windows10
- Houdini 19.5.403
今回のお題
「オブジェクトからの距離によって六角形グリッドのサイズが変形するシーンを作成する」となります。
動画にするとこんな感じ。
大きく分けてふたつの実装ポイントがあるでしょう。
- 六角形グリッドの生成方法
- 各六角形のスケールコントロール
それぞれの回答
ここでの登場人物は下記のとおりです。それぞれ素晴らしいアイデアを出してくれました。この場を借りて重ねてお礼を。
ちなみにネットワーク比較をしやすいよう共通部分の作成などで少々手を加えていますが、キーとなる構造はそのままでおおくりします。
ぼくの回答
六角形グリッドの生成方法は様々なアプローチがあります。*1今回僕はバウンディングボックスを用いる方法を用いました。
本手法は数学的な知識を必要とせず読みやすいという特徴がありますが、画像の通り全体のグリッドが平行四辺形になるのが玉にキズです。(本ケースでは問題ないのでそのまま使用していますが、実際に使う際は原点を中心に配置し直すなどしたほうが良いでしょう)
続けてスケールコントロールに関してはPacked Primitiveを直接pscaleで制御しています。
Packed Primitiveを直接トランスフォームするには下記ワンライナーが便利です。
setprimintrinsic(0,'pointinstancetransform', @ptnum, 1);
補足ですが、本シーンは詰Houdini用によりコンパクトにしていますが、本来であれば下図の用にWrangleの機能は分割すべきでしょう。
Time Dependencyの観点からも、結合の観点からも、1ノード1機能が疎なネットワークを作る基本の考え方と言えます。
おかださんの解法
Points from Volumeでヘックスグリッドの元となるポイントを生成しているところがクールですね。またDistance from Geometryでpscaleを直接生成しているところもクレバー。ビルトインノードで綺麗にまとめたお手本のようなネットワークと言えるでしょう。
アマテラスさんの解法
Points from Volumeの利用法がおかださんと同じでビックリ。(そんなメジャーな方法だったのか…知らんかった)
そしてスケールコントロールのVEXが実にDOPE。アマテラスさんは深いレベルでVEXをうまく使われる作例が多く、いつも勉強させていただいています。
vector pos = point(1, "P", 0); float dist = fit(distance(@P,pos*set(1,0,1)),0,chf("maxdist"),0,1); f@pscale = chf("separation")*tan($PI/6)*chramp("ramp", dist);
レーテーさんの解法
ビジュアル的にも一味ひねった美しいものを提出してくださっています。短さよりコントロールの多様性を押し出したネットワークで、また違った趣があります。
六角形グリッドの生成も真っ向勝負の数学的なアプローチで良い感じですね。
くろさわさんの解法
スケールコントロールは入っていませんが、六角形グリッドの生成方法がオリジナリティがあります。自己相似的・再帰的に六角形を作る手法で、出来上がった六角形グリッドもまた六角形になっているという面白い手法です。
ちなみに勉強会の板では「こうやると同じアプローチでももっとキレイになるよ」などのレビューが行われていたりして、学びの場としても大変良いですね。
まとめ
今回も様々な手法が出てきましたね。
Houdiniゆるゆる会*2はクローズドな勉強会ですので勉強会募集ページなどでは参加者を募集していないのですが、過去のイベント詳細をご覧の上興味がある方はぜひ主催のめんたいこまでDMをください。完全無料の互助会として運営しています。
明日はindyzoneさんの記事です。
ではでは!