スタイルシートでCVEXを使ってパラメーターをランダマイズ


こんにちは、篠島です。今回はHoudini Advent Calendar 2017の一つの記事として書いています。11月にIFDのセミナーに参加された皆様、本当に有難うございます。今回は前回のIFDセミナーで説明できなかったスタイルシートの部分でCVEXを使ってランダマイズする事について書こうと思います。

 

今回のサンプルファイルです。
Random_CVEX2.zip

下準備

まずは適当にオブジェクトを作りコピーします。そしてスタイルシートで適当なシェーダーを割当てます。マテリアルスタイルシートへはData Treeペインを開き、左上のプルダウンメニューから Material Style Sheets を選んでアクセスできます。

 

 

ランダマイズ用のCVEXシェーダーを作る

/mat もしくは /shop ネットワークでCVEXシェーダーを作ります。今回自分は /mat 内部に作りました。

 

 

そして CVEX 内部で下のような簡単なノードを組みます。Parameterで指定した hoge の値によってランダムな色が作られて myColor として出力しています。

 

スタイルシート側の設定

そしてスタイルシートで下のように設定します。Override Script のところで 上書きしたいパラメーターとして basecolor を指定し、Override Type を Script From Node にして、 Override Value の所で先程作ったCVEXシェーダーを指定します。
次に、Override Scriptの下にData Bindingを追加します。ここで、どのパラメーター同士をバインドするかを設定できます。デフォルトだと Override Value が id となっていますが、自分の例では hoge と変えています。Override Type はAutomatic で、Override Valueは intrinsic:indexorder にします。

個人的な好みなのですが、未知の機能を試す場合に id など予約語っぽいキーワードが出てきた場合、適当な言葉に変更しても動くかどうかを検証します。これによりどんなパラメーターを自分で好きに設定できるのか確認しています。この例の場合、id は自分で適当に付けられる名前ですが、intrinsic:indexorder は変更できません。intrinsic系のアトリビュートはジオメトリにある元々存在する物でデフォルトでは非表示になっていて見えません。詳しくはQiitaで@AokTky_dori さんが 12月16日に primitive intrinsic について説明されるそうなので期待しています。

 

CVEX シェーダーを選ぶ時に参照ボタンを押してノード選べるのですが, /mat 内でCVEXシェーダーを作った場合にノードが選べず、chop 内部で作った CVEX シェーダーしか選択できません。なので /mat 内部でCVEXシェーダーを作った場合は、手動でノードのパスを入力します。

 

CVEXシェーダーとスタイルシートでのデータの流れを見てみると下の様になります。intrinsic:indexorder アトリビュートをジオメトリから持ってきて、それを hoge という名前に変更し、それを元にCVEX内でランダムな色を生成して、myColor という名前で出力しています。そして最終的にmyColorがbasecolorとして使われるわけです。
ここで気づいた人もいるかもしれませんが、スタイルシート内で myColor という名前を指定することなくCVEXからの出力がスタイルシートに渡されているのは、CVEXの最初のアウトプットを自動的に読み込む設定になっているためです。

 

きちんと色がランダムでレンダリングされました。

 

CVEXの出力を2つ作ってみる

CVEX シェーダーを下のように変更してみました。もう一つ別のランダムの値(float)を作り、それを SQ という名前で出力しています。

 

Render Property もランダムに変更してみる

そしてスタイルシートは下のように変更します。今回はCVEXの出力が2つあるので、スタイルシート側でOutputの設定をしています。CVEXで新たに作ったノイズのSQで Render Propety の Shading Quality を変更しています。Shading Quality はマイクロポリゴンをどれくらい分割するか、レイトレースエンジンだとディスプレイスメントの解像度に影響がでるので、シェーダー側でディスプレイスメントを追加します。

 

Shading Quality の変化を表したのが下のレンダリングです。Shading Quality をランダム化したことにより、ディスプレイスメントの解像度が変わっているのが分かるかと思います。ちなみにずっと見ていると金平糖のように見えますね・・・・。

 

スタイルシートとCVEXのデータの流れを表したのが下の図です。

 

まとめ

あまり実用的でなくてすいません。スタイルシート普段使う機会はほとんど無いと思うので、使い方を覚えるという点では役に立つかなと・・・。