MODO 機能紹介・チップスサイト このサイトでは、MODOの基本機能やチップスをご紹介していきます。

ノーダルシェーディング(レイキャスト編):他マテリアルのシェーディングの色を反映するには

https://www.youtube.com/watch?v=2JhwXXzs37Y&hd=1

レイキャストノードではデフォルトでシェーディングする箇所(サンプル)と法線を元にレイを放射しますが、レイを放射する起点方向というのは、自由に定義することも可能です。今回は、レイの放射元となる位置や方向を定義することで、他のマテリアルのシェーディング情報を反映させる方法をご紹介します。

サンプルとなるシーンには、シーンの中心に球体が配置されており、それを取り囲むように内側を向いた円柱が配置されています。この円柱には、グラデーション上の画像が貼り付けられています。ただし、円柱はあらかじめアイテムシェーダが設定されており、表示属性としてカメラから映ることなく、また影や落としたり、影を移すことがないよう設定されていますので、この時点では球体には全く影響を及ぼしていません。

これから、この円柱に貼り付けられている色を拾って、球体の色を変化させていきましょう。色を拾うため、シーンの中にロケータを一つ配置してみます。モデルパレットを開いて、ロケータを追加します。このロケータから放射したレイと、円柱とがヒットした箇所の色を、球体の色へと移してみます。

まずは球体のマテリアルをスケマティックビューへとドラッグアンドドロップし、追加シェーダ入力レイキャストを追加します。レイキャストを追加すると、デフォルトでシェーダ入力のノードからシェーディングする箇所(サンプル)と法線の情報がレイキャストノードの起点方向に接続されていますので、レイの放射元となるこの情報を、ロケータの位置情報と回転情報へと置き換えましょう。ロケータをスケマティックビューへとドラッグアンドドロップし、右クリックでコンテキストメニューからチャンネルの追加を選択し、ワールド位置ワールド回転を追加します。

このワールド位置ワールド回転をそれぞれレイキャストノードの起点方向に接続したいのですが、ワールド位置ワールド回転のデータは行列で表されており、かたやレイキャストノードの起点方向のデータはベクトルで表されています。データの型が違うので、まずは行列をベクトルへと変換する必要があります。

追加ポップアップ > チャンネルモディファイヤ行列マトリックス:ベクトル化のノードを追加します。このノードに行列を入力すると、ベクトルの形式で出力するようになりますので、まずはワールド位置をベクトルへと変換し、レイキャストノードの起点へと接続します。これで必ずロケータの位置からレイが放射されるようになりました。

次に、もう一度マトリックス:ベクトル化のノードを追加し、今度はワールド回転をベクトルに直して、レイキャストノードの方向へと接続します。このとき、回転情報をベクトル化すると、デフォルトの状態でベクトルがどこを向いているのかを指定する必要がありますので、プロパティのからZを指定しておきます。

ではレイキャストノードのヒットした色を、マテリアルのディフューズの色へと接続しましょう。すると色が変わったのがわかります。

ここからはわかりやすいように、スケマティックビューを3Dビューへと切り替えて確認しましょう。わかりやすいようにショートカットキーのOのキーで非アクティブメッシュのタブから、非アクティブはアクティブと同じオプションをオンにしておきます。これで円柱の色の状態も確認できるようになります。

ではロケータを選択し、回転ツールを起動し、Y軸に対して回転させてみましょう。ちょうど紫色のハンドルで表示されるように、このロケータから放射されたレイが円柱とぶつかった箇所の、円柱にマッピングされている色を拾って、球体の色が変化しているのが確認できます。ロケータ自体にアニメーションを付けることで、自動的に球体の色もアニメーションさせることができます。

このようにレイキャストノードでは、レイの起点方向もカスタマイズすることが可能になっています。

2014年4月25日