ハリウッド映画をはじめとするVFX制作業務で培ったノウハウを基に、プライベートではHoudiniワークショップを精力的に開催する杉村昌哉氏。有機系背景モデリングを題材に、自動生成のしくみをプロシージャルに構築する手法を、全2回に分けて披露してもらう。モニュメント・バレーを制作した前回に続き、今回は岩石の多様化を題材に解説する。

※本記事は月刊「CGWORLD + digital video」vol. 240(2018年8月号)からの一部転載となります

TEXT_杉村昌哉 / Masaya Sugimura
EDIT_沼倉有人 / Arihito Numakura(CGWORLD)、山田桃子 / Momoko Yamada

  • 杉村昌哉
    2014年にカナダ モントリオールのFramestoreへ。現在はCinesiteでSenior FX TDとして活躍中。
    @sugiggy
    sugi-iggy.blogspot.jp

TIPS 岩石の多様化

デフォーマでは実現するのが困難な角ばった岩石オブジェクトを、プロシージャルにモデリングすることで形状を表現しつつ、効率良く量産する方法を紹介します。

STEP1 ピースのバリエーション

バリエーションを自動で生成するためにノイズデフォーマなどの値を変える方法は一般的ですが、角ばった石の形状はデフォーマでは表現が難しく、ヌルっとしてしまいがちです。割れてできた全体形状と、角に多くのディテールがある特性を上手く表現できるかがキーになります。

【1】ノードツリー全体です。大きくは、以下の2つのしくみから構成されています。
1.ボロノイの中のピースのみを抽出
2.浸食されたようなディテールの追加

【2-1】まずはシンプルにボックスをVoronoi Fractureでバラバラにします。

【2-2】Voronoi Fractureで作られたoutsideというプリミティブグループを利用し、中のピースを抽出します。outsideグループはもともとBoxの面だった部分なので、この面を1枚でも含むピースを削除するしくみをつくります。その下準備として、outsideプリミティブグループのみにoutsideというprimitiveアトリビュートを作り、値に1をもたせます。

【3-1】次にFor-Each Loopでピースごとにループをさせます。Attribute Promoteでoutsideアトリビュートの値の合計値(Sum)をDetailアトリビュートに格納し、Switchノードに下記のエクスプレッションを入れます。

detail('0','outside',0) >0

【3-2】これにより、outsideの合計値が0以上、つまりoutsideという面を1枚でも含む場合はblastノードで全て削除、そうでなければ残すという切り替えが行えます。このFor-Each Loopを抜けると【左画像】のような状態になります。

【4】全てのピースがくっついた状態では見づらいため、整列させます。ピースをコントロールするには、Assembleノードでpackedオブジェクトにしておくと、WrangleやPoint VOPでの操作を楽に行えます。point number(@ptnum)を利用し、10個ごとに列が切り替わるようにWrangleノードでmod関数とfloor関数を使います。VEXの各関数の意味は下記の通りです。

@P.x = @ptnum %10 ;

X座標はMod関数でピースごとに0~9の値をくり返して代入します

@P.y = 0;

Y座標は全てのピースの値は0です

@P.z = floor (@ptnum * 0.1) ;

Z座標はpoint numberを0.1倍し小数点以下切り捨てることで10個ごとに列が切り替わります以上でピースのバリエーション化は終了です。

次ページ:
STEP2 ピースのディテーリング

[[SplitPage]]

STEP2 ピースのディテーリング

浸食されたようなディテールを追加します。元のピースにノイズをかけた別ネットワークを作成し、ブリーリアンするという手法です。単にノイズフォームさせただけでなく、事前のスムージング具合によって角の落ち方をコントロールすることが可能です。

【1】1つのピースにフォーカスして解説します。

【1-2】まずはVDBfromPolygonでVolumeデータに変換し、スムージングや境界をコントロールしやすいデータにします。

【2】次に、Convert VDBでポリゴンに戻します。このIsovalueの値と次のスムースの値で角の落ち具合をコントロールできます。HoudiniではVolumeをレンダリングやシミュレーションだけでなく、Volumeのもつデータにアクセスできるので、様々なシチュエーションで利用可能です。IsovalueでVolumeが保持する境界を0基準とし、内側にいくほどマイナスの値、外側にいくほどプラスの値が大きくなるといった具合に、データのどの値部分でポリゴンを作成するのか調整することができます。

【3-1】Attribute Blurでスムージングを行います。

【3-2】その上で浸食のキーとなるノイズデフォメーション行います。Mountain SOPを2回使用し、大きいノイズと小さなノイズをミックスします。

【4】このデータの元のジオメトリをBooleanのIntersectで削ることによって、角にディテールの追加ができました。最後に、Normal SOPで元の面の部分と削られた面の部分の法線を調整し完成です。以上のように境界の位置、スムース具合、Mountain SOPにより様々なディテールの表現がコントロール可能です。このような手法が可能になったのは、Houdini 16におけるブーリアン機能の大幅アップデートによるところが大きいです。他の3DCGツールの追随を許さないほど、ブーリアン機能が安定性を得ることができました。他のデフォーマを組み合わせることで様々な表現が実現できるので、ぜひ試してみてください。



  • 月刊CGWORLD + digital video vol.240(2018年8月号)
    第1特集:プロシージャルの活かし方
    第2特集:オトナのCG♡

    定価:1,512円(税込)
    判型:A4ワイド
    総ページ数:128
    発売日:2018年7月10日