広告
広告

Blender で反射ベクトル・法線を UV 座標に変換する

カテゴリ:blender

反射ベクトルを変換した UV 座標はワールドとは別の IBL を表示したい時に使える。

ibl to uv
反射ベクトルを IBL の UV 座標に変換するノード

外部リンク

Diffuse irradiance

リンク先の記事は OpenGL なので Y 軸と Z 軸とを入れ替える必要がある。U の方向も反転しているのでマッピングの X スケールがマイナスになっている。

Matcap の UV を計算する

シェーダーノード

法線ベクトルをカメラ座標に変換したあと、移動・拡縮すると Matcap の UV 座標になる。Matcap 画像は、Blenderのインストールディレクトリ/バージョン/datafiles/studiolights/matcap にある。法線は check_normal+y.exr。法線を表示する場合は、テクスチャの色空間を非カラーデータ(Non-Color)にする。

normal to uv
法線を Matcap の UV に変換するノード

計算した UV 座標にガンマ(パワー)をかけるとそれらしい法線になる。

power
UV 座標にパワーをかける

コンポジット

コンポジットにはベクトル演算ノードがないので法線(Normal)ノードにカメラのワールド行列をコピーして、法線をカメラ座標へ変換する。手動入力する方法とドライバーを使う方法がある。ドライバーを使う方法はノードを再利用できる。

手動コピー

カメラのワールド行列は matrix_world で取得できる。Python Console で bpy.data.objects[カメラ名].matrix_world と入力する。

camera world
カメラのワールド行列

カメラのワールド行列の列2つを法線(Normal)ノードにコピーする。適当なオブジェクトの位置やスケールに行列のデータを手入力して Ctrl + Alt + C でコピー、Ctrl + Alt + V でペーストする。

to normal node
法線ノードへデータをコピー
node
ノード
power
パワーを使ってそれらしい法線にする

ドライバーを使う

法線ノードにドライバーを設定するとノードを再利用できる。式はそれぞれ

  • bpy.context.scene.camera.matrix_world[0][0]
  • bpy.context.scene.camera.matrix_world[1][0]
  • bpy.context.scene.camera.matrix_world[2][0]
  • bpy.context.scene.camera.matrix_world[0][1]
  • bpy.context.scene.camera.matrix_world[1][1]
  • bpy.context.scene.camera.matrix_world[2][1]

外部リンク

Basic Matcap

関連記事

Blender 記事の目次


広告
広告