本記事で解説するもの
コペルニクス、Vector Displacement Map のテスト続き。
— 岡田拓也 (@okada_takuya) November 8, 2024
Opacityで抜けば宙に浮く事も可能?おもろいな~#Houdini pic.twitter.com/SdkX3BOvyA
※Copernicus内でテクスチャのみで表現しています。(ジオメトリはグリッドです。)
hipファイルはこちらから
↓
VDM.hip
Vector Displacement Mapとは?
普通のDisplace は 白黒(1 float)の高さ情報だけの Height Map を用いて、面のNormal 方向に押し出します。
そのため、側面や側面の凹形状の表現がうまく行かないという弱点があります。
方向の情報も加えた、Vector (3 float)で押し出すのが Vector Displacement Map です。
Vulkan ビューポートでの Displace 解像度の変更
ちなみにですが、Displace の解像度の変更は Display Options から行えます。
Vector Displacement Map の作り方
差のVector情報を作ればいいだけなので、作るのはいたって簡単です。
立体の形状と、平らな状態の形状を2つ用意します。
(ここではUVPeltノードを使用して平面化しています。)
それらのP同士を引き算します。
ここでは変形前のPをrestとして保存しています。
v@vdm のアトリビュートの名前に決まりはありません。(予約語ではないです)
Copernicus に持っていき、Null をつけて「VDM」と名前を付けました。
これで Vector Displacement Map の完成です!
後はこのマップを読み込むシェーダー側の設定です。
MaterialX での実装
なにか特別なことをする必要はなく、実は、MaterialX の Displace ノードはデフォルトで Vector が差せるのです!(つまり既に実装されてる…!)
なので白黒の Height map の代わりに vector のカラーデータを差せばできてしまいます。
※MaterialXの仕様なのか、MtlX Standard Surface の方にも何かしらのマップを貼らないと動作しなかったため、空の Image ノードを base_color に差しています。
COP内の Preview Material で実装
ところが、 COP 内の Preview Material では Height Map に vector(RGB)を差すことができません。
Preview Material の実態は MaterialX なので動作しそうですが、
Vector Displacement Map を使用する想定で組まれていないようです。
中に入って少し改造したいと思います。
右クリック→Allow Editing of Contents して、中に入ります。
右上の SOP Import に入ります
COP Preview Material を Allow Editing of Contents して、中に入ります。
Displaceするマテリアルとしないマテリアルを切り替える Switch ノードがあるのでバイパスします。
これによって、強制的にDisplaceのあるマテリアルを選択させるようにします。
続いて Material Network に入ります
新たに MtlX Image を作成し、File Name に 「VDM」と名付けた Null を「op:」関数で指定します。
Copernicusに戻り、エラーの出てた Height Map のコネクトを切ります。
動作しました!!
宙に浮かせるようにOpacity を設定
アルファを Opacity に差せば、グリッドと接続しているジャギジャギが取れ、浮いたような表現になりました。
ジャギジャギをより奇麗に取るには Vector Displacement Map に Smooth Fill ノードを挟んで、境界にも色が来るよう広げます。
後ろ見ると、完璧には上手くいってませんが…。
また、バラバラにUV展開されたものでも Opacity を使えば浮かすことができます。
追記、Opacity 使用せずにジャギジャギを消す
記事投稿してから思いついたけど、opacity で抜かなくても、平面を余すことなく使用すれば接続部分のジャギジャギ出ないな…!#Houdini #Copernicus pic.twitter.com/Cadsc140FA
— 岡田拓也 (@okada_takuya) December 5, 2024
※詳しいやり方は更新した hip を見てね
ノイズを加えてみた
試しに出来た Vector Displacement Map にノイズを加えて遊んだりもしてみました。
Vector Displacement Map の形状変更は癖が強く、とても難しいのですが、とりあえずノイズは単純に加えることができました!
終わりに
Vector Displacement Map を知るきっかけとなったのはこちらのポスト
make Vector Displacement Map with SOP and COP
— tinybugbot (@tinybugbot) November 5, 2024
- render with Karma and MaterialX 🐷#houdini pic.twitter.com/0cYyR5azIV
tinybugbot氏に感謝申し上げます!
Copernicusで様々な面白いポストをしていらっしゃるので、フォロー必須です!
最後まで読んでいただきありがとうございました!