山里ぽん太Interfere Shading06 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」で質問もしました。そのときに回答してくださった方の回答にヒントを得て、上記のようなことをやってみました。 |