HOME

Sparx* Virtuousセッション目コピ①

SiggraphAsiaでのセッションが素晴らしかったので目コピしていく。

2025/1/09に公開されたSiggraphAsia2024でのSparx* Virtuousのセッションで非常に素晴らしいプロシージャル岩を作成しているセッションが公開された。
非常に出来が良かったので工程を理解するために文章に落としていく。

https://youtu.be/7TkOkEIwqYM?si=uCYWeeI-Kx6__3dW

本記事では 動画28:10~の「PROCEDUAL ROCK MODULES」以降の内容を扱っている。
記事内の画像は目コピしている最中の自分の作業シーンのもの。
※詳細な作成方法やhipが公開されているわけではなく、
 公開されている範囲を目コピで作成しているので本記事の内容で動画と全く同じものを作成できる保証はできません。

(28:10~ ) PROCEDUAL ROCK MODULES

https://youtu.be/7TkOkEIwqYM?si=RnJr6t04-OnWZL4U&t=1691

OVERALL SHAPE PREPARATIOAN

メッシュの集合体であるベース形状の作成
わずかに下方向に円錐形となるように配置されたベースとなるモデルを作成する
(ここのフローも結構こだわってコードを書いていそうだったがベース形状なのと公開されている内容が少ないため今回は目コピしていない)
このできたベースとなるモデルにboxにmatchsizeし、「PROXY_LAYOUTと名付けている」
(このboxは立方体ではなく直方体だったのでおそらく目標にしたいサイズ用のバウンディングボックスなのだと思う)

詳細が公開されていないのとベースの形状は要件次第なので今回は暫定で似たような形状を用意

CUT THS CORNERS OF EACH STONES

パーツごとのランダムなscatter pointを決定
OVERALL SHAPE PREPARATIOANで作成したベースモデルをconnectivity/foreachで個別に処理していっていた
detail wrangleを作成し、ループごとのランダムなscatter point数を作成していた

vector cen = getbbox_center(1);
i@sct_pt = rint(fit01(rand(@iteration+cen.x), 30, 50));

構成しているポリゴンを作業用の単位サイズに直す
もう一方の接続にmatch sizeが二つ並んでいる。 両者とも第2接続を未入力。

一つ目は中央に移動。
二つ目のmatchsizeはscale to fitにチェックし、uniform scaleからチェックを外していたので処理ごとに誤差を減らすためにいったん単位サイズまで合わせる処理をしている模様。
この後アトリビュート名として「xform_scl」という名称でstashしているようなので多分移動値の方も「xfrom_pos」とかでtrashしていると思う。

voronoi用の参照点を作成
表面に作成したscatter ポイントとextractcentroidで取得した岩の中央点をマージする。 参照線が出ているのでポイントの数が先述のsct_ptアトリビュートが参照されているのだと思う。
また、pointをマージした後にtransfomrが作成されている(後述しているが多分このtransformが大事)

参照点を調整し、voronoi分割
ここで作成したポイントでmatchsizeで単位サイズにスケールしたメッシュをvoronoiし、delete small partsのextract largest piecesを使ってもっとも大きい破片のみを残す。
これで動画29:43頃のきれいなカットされた岩形状になる・・・らしいのだが動画程はきれいにvoronoi分割できなかった。

動画ほどきれいには岩っぽいカットができていないような・・・

後述しているがこのvoronoi用のポイントは岩表面から離れているのがわかる瞬間があった。
以下のgifのようにtransformのサイズを変更すればカットの大きさを制御できるので、transformの大きさでディテールを調整するような仕組みだと思う。
動画と同じくらいにきれいな形状にしたければこの数値の調整が必要そうに思える。
scatter後のrelax、scatter後のjitterスケールあたりも試行錯誤してよさそうだった。

voronoiのpointをtransformで表面から話すことでエッジ部分の平面を増やす

サイズを元の部品一つに戻す
transform by attribで元のサイズに戻している(と思われる) xfrom_sclというアトリビュートでスケールしている。
match_sizeでstashするとxfromというアトリビュートで保存されるので多分リスケール。

stashしたxfromでスケールを戻す

2度目のvoronoi分割
サイズを戻した後に同様の工程で2度目のvoronoi。動画の30:00くらいでtransformがプレビューされるが岩からすこし離れた場所にpointが存在するのでやはりtransformですこし岩からpointを話すことで表面へのvoronoiとして利用している模様。離れ方からして2~3くらいの間のスケールだと思う。
最後に位置を戻してfor eachブロックを抜けていた。

同じプロセスでもう一度ボロノイ分割するとのこと

Rock Cutの工程が終了
loopから出た後normal、cleanに接続してOUT_PRXYとなづけてロックカットが終了。
ここまでで動画の30:40くらい。とてもいい形状になってくれている。

fish_ball

プロシージャル魚類