機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

【Blending Maps:第1回】1つの関節で法線を混ぜ合わせる

はじめに

3DCGにおいて細かい傷や皺って normal map や diffuse map で表しますよね。
本記事では normal map のみで表現されているとし、動かすボーンは1つとします。
あなたの人差し指の第二関節を曲げ伸ばししてみてください。
人差し指の第二関節が曲がっていないときは皺が出現し、曲げると皺が消えます。
これを normal map の混ぜ合わせで表現しようというのが本記事の趣旨です。
Blender のバージョンは 4.4.3 です。


円柱とアーマチュアを紐づける

こちらの記事を参考にして円柱と2つのボーンからなるアーマチュアを紐づけてください。
ローカルのX軸を0度から-90度まで回転させてみて以下のようになればOKです。


normal map を2つ用意する

normal map を2つ用意してください。
1つは、ボーンを回転させる前の法線を表現するものです。こちらの記事を参考に作成してみてください。

もう1つは、ボーンを回転させた後の法線を表現するもので対応した色 (128, 128, 255) で塗られた normal map です。


Material で法線を混ぜ合わせる

さてここからが本番です。

最初に、image texture node で2つの法線を読み込みます。

次に、 value node を作成し、driver を追加してボーンのX軸の角度を受け取ります。
driver を編集して 0°の時に 0 、-90°の時に1になるように -var / pi * 2 とします。
これが混ぜ合わせる係数になります。
この係数を [0,1] に clamp しておきます。

最後に2つの法線を係数で線形補間し、正規化します。
※本来ベクトルの球面線形補間をすべきですが、計算量が多いため線形補間としました。


実際に動かしてみる

良い感じになりましたね。


diffuse map を混ぜ合わせるには?

細かい傷や皺は diffuse map を使っている場合もあります。
その場合は法線同様、線形補間すればよいです。
diffuse map は単に色なので正規化はする必要はありません。

最後に

関節を複数動かす場合の記事も書く予定です。基本的には変わりません。

目次へ戻る