山里ぽん太

Interfere Shading

06 January 2019

山里ぽん太はシェーダーにちょっかいを出しました。


Chapter 1 @Cd
Geometry ノードを作って、中に入って、Box ノードを作って、Attribute Wrangle ノードをつないで、VEX で「@Cd = { 1 , 0 , 0 };」と書くと、赤い箱ができます。

このことは、リファレンスの「ジオメトリのアトリビュート」のページの「シェーダの上書き」のところに書いてあります。
ここには、いろんなアトリビュートが書かれていますが、いろいろ試したところ、動作するのは、「@Cd」と「@Alpha」のようです。

Chapter 2 Bind
どうやら、「シェーダの上書き」のところに書かれているのは、あまりアテにならないようです。
というわけで、ジオメトリのアトリビュートをシェーダに渡す方法を試してみましょう。
へっぽこユーザの僕は、「ジオメトリのアトリビュートをシェーダに渡す方法」には、「Global Variables」ノードと、「Bind」ノードの2通りがあることしか知りません。
「Global Variables」ノードは、へっぽこユーザの僕が設定する任意のアトリビュートは眼中にないので、「Bind」ノードを使います。
というわけで、ここで、北川茂臣先生の、「Houdini Visual Effects」の本を開く僕でありました。
というわけで、Attribute Wrangleノードで、「InterfereColor」という、vector型のアトリビュートを作って、これをマテリアルネットワークの Bind ノードで拾って、PrincipledShader の入力につないでみましょう。
はい、黄色い色がつきました。
ジオメトリネットワークはこんな感じです。

マテリアルネットワークはこんな感じです。

こんなエラーが出ていますが、へっぽこユーザの僕には意味がわかりません(笑)。

というわけで、Emission Color につなぐとこんなことになります。

Chapter 3 Petit Application
というわけで、Grid でやってみます。
縦1横1の Grid を作って、「v@InterfereColor = @P + { 0.5 , 0.5 , 0.0 };」という VEX コードを書きましょう。
こんな感じになりました。
カラーピッカーみたいです。

Box でやるとこうなります。

Chapter 4 Clear Box
Box を透明にして、Bind の出力を、PrincipledShader の Emission Color につないでみます。
こんなんなります。

Chapter 5 Point to Line
Point だけだとできるでしょうか。
できません。

Line はどうでしょう。
できました。

Line を PolyWire にしてみます。
こんな感じです。

Chapter 6 Special Box
これは、Box の頂点に Point Light を配置してみたものです。
Box や Line の Point にシェーダーの Emission を割り当てる方法と、Light との違いは明らかです。
Point に Emission を割り当てる場合は、隣の Point の Emission 値との間で、グラデーションするように Emission のカラーがつきますが、Light の場合は、Light の位置からの光の輻射によって光学の計算で色がつく、ということでよいのだろうと思います。

Chapter 7 メモ
リファレンスの「ジオメトリのアトリビュート」のページの「シェーダの上書き」に書かれている「@Ce」が動作しない原因がわからなくて、ずっと、もやもやしていました。
「Houdini Japan Community」で質問もしました。そのときに回答してくださった方の回答にヒントを得て、上記のようなことをやってみました。