夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Blenderのマテリアルでライトが当たっている部分を検出する

本日はBlender枠です。

Blenderのマテリアルでライトが当たっている部分を検出していきます。

〇ライトが当たっている部分を検出する実装

 現在のBlender(4.x)ではライトが当たっている部分を検出するノードは存在しません。

 しかしいくつかのテクニックを使用することで疑似的に光が当たっている場所を検出することができます。

 いかがその実装になります。  

ライトの実装は一般的にLdotNという処理が使用されます。

これはライト(L)の情報(向き)とメッシュの法線(N)の内積をとることでライティングの計算ができます。

redhologerbera.hatenablog.com

しかし前述のとおりライトの情報を取得するノードは存在しません。

そのためテクスチャ座標ノードで他のオブジェクトの位置情報を参照することでライトの位置情報を取得します。

今回は空のオブジェクトを配置し、オブジェクトコンストレイントから位置コピーを追加しました。

ターゲットとしてLightを指定することで、オブジェクトがライトに追従するようになります。

このオブジェクトをテクスチャ座標のオブジェクトに指定します。

ジオメトリノードのノーマルと内積をとることでNdotLが実現できます。

この値をシェーダーミックスの係数などで使用することで影部分と光が当たっている部分で別々のシェーダーを使用することができます。

〇応用

応用することでひかりがあたっている部分のみリムライトをつけることができます。

本日は以上です。