3D等で 特定の方向からテクスチャや映像を投影することをプロジェクションマッピングまたは カメラマップ等と言ったりします。
Blenderでも UV展開のProject_from_viewやモデファイアのUV_project等の方法で
UVを制御して投影状態のマッピングを作成する方法がありますが、手順が多かったり痒いところに手が届かない部分があったりするので
補完する形で シェーダーを使って同様機能を作成してみました
因みに以前に別方式のカメラマップの活用法を解説した記事はこちら
http://yukimi-blend.blogspot.com/2018/10/blender1.html
投影のノードへ入出力する情報について
まずは基本的なノードの構成の話し
シェーダーの入力にある「テクスチャ座標」のノード(赤色のタイトルバー)では、
「オブジェクト:」の入力ボックスで指定した物への相対座標を「オブジェクト」出力に出します。
また、オレンジのタイトルバーの「画像テクスチャ」ノードでは画像を指定していて
入力の「ベクトル」となっている部分にUV座標を指定することで画像をマッピングできます
カメラから見て左下が0,0 右上が1,1になる座標に変換して画像テクスチャノードへと入力すれば、
カメラからの見た目にぴったりはまった画像のマッピングがされることになるわけです
投影ノードの使い方
投影のノードを設定した.blendファイルをこちらにアップロードしました
https://www.dropbox.com/s/v03sea7yaieaukv/ProjectionNode.blend?dl=0
自分のファイルで使用する場合は
ファイル>アペンドで ProjectionNode.blend の中のデータを読み込みます
アペンドでは.blendファイルの中のデータをフォルダのように見ることができます
ファイル内の NodeTree の下にあるProjectionObjectを選択してアペンドを押します
ファイルに読み込んだノードグループはシェーダーエディッタ内の
追加>グループ内の項目として登録されています
プロジェクションマッピングをするためには
入力>テクスチャ座標のノードを追加して座標の投影元のオブジェクトを指定して
画像テクスチャのベクトル入力にUVの値を接続します
ProjectionObjectの設定項目は
- 水平画角:横方向の視野の角度です。度で入力します
- 画像の横 画像の縦:投影する画像の縦横の大きさを入力してください
- 塗り足し範囲:投影する画像に画面からはみ出した範囲も作成している場合に使えます
- シフト:画像の微調整に縦横移動ができます
ノードの計算は横方向の角度がフィットするように計算をしています
画面からはみ出した縦長の画像も使用できて 塗り足しの設定もできるため
投影用のカメラと撮影用のカメラを別に用意することでカメラワークをつけることがやりやすくなっています。
(なお、投影用のオブジェクトはカメラオブジェクトである必要はありません)
なお、画像の縦、横の数値にレンダリングする範囲の数値を入れて
塗り足し範囲の数値にマイナスの数値を入れると
画面の範囲+塗り足しのピクセル数が画像の全体なように計算するようになっています
参考までにProjectionObjectのノードグループ全体を画像として置いておきます
アニメ等の映像の現場で 使いやすいようカスタマイズしてもらえればと思います
別のUVを用意した状態で投影画像を展開図にベイクするというのも面白いかもしれません。