HOME

(前回の補足)カメラから見た法線とテクスチャ法線をブレンドする

前回までの内容だとテクスチャを表示していただけなのでメッシュの法線情報とブレンドする

環境

Houdini Indie 20.5.487

追記について

2/20 にノーマルマップの変換について間違っていた部分を修正しました。

カメラから見た法線とテクスチャ法線をブレンドする
NormalMapをtangent空間ワールド空間に変換する

すみません、前回の補足です。
(前回:AOVを使ってKarmaでBaseColor、Normalなどのチャンネルを表示してレンダリングする

前回までだとオブジェクト表面にノーマルテクスチャが表示されているだけの状態なので(自分の目標だった図録作成のためならこれでよかった)よくみる法線表示にしたい場合以下のような手順でできました。

カメラから見た法線の作成
※専門外のため間違っていたらすみません

  1. MtlxNormalノードを作成し、SpaceにWorldを設定
  2. MtlxTransformNormalを作成し、FromSpaceにworld、Tospaceにcameraと設定

法線の合成
ネットで調べたら出てきたWhiteOutNormalという計算式を参考にテクスチャとカメラ方向からの法線を合成

ノーマルマップをワールド空間に変換する
tangent法線(ノーマルマップ)をワールド空間のノーマルに変換するには以下の手順で変換できるようでした。
変換した状態のノーマルはmtlxstandrid_surfaceのnormalにも正しい接続のようです。
(参考:MtlX Image VOP node(When reading normal maps, set the type to vector3, to ensure colorspace is not applied to the incoming data.)
    MtlX Standard Surface VOP node(input:Normal:Input geometric normal. A worldspace vector in -1->1 range (defaults to current world-space normal).)
    MtlX Normalmap VOP node(Tips:Shaders importing normal map images must be vector3, and not color3.))

  1. mtlx Imageノードでノーマルマップを読み込み
    この時データ形式はcolorではなく「vector3」で読み込む
  2. 「mtlxNormalMap」ノードに接続する
ワールド法線描画結果
ワールド法線入力時のBeuty描画結果

シェーダー周りは知識があまり無く、ピンとくる答えになかなかたどり着けず苦戦しました…
UnrealEngineの法線表示だとまた色少し違うんですよね。そっちで表示したいと言われたらまた苦戦しそう。
実際のワークフローに組み込むなら詳しい人のアドバイスをもらいたいところです。

fish_ball

プロシージャル魚類