7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Houdini ApprenticeAdvent Calendar 2024

Day 5

Vector Displacement Map を Copernicus 内で表現

Last updated at Posted at 2024-12-04

本記事で解説するもの

※Copernicus内でテクスチャのみで表現しています。(ジオメトリはグリッドです。)
hipファイルはこちらから

VDM.hip

Vector Displacement Mapとは?

普通のDisplace は 白黒(1 float)の高さ情報だけの Height Map を用いて、面のNormal 方向に押し出します。
そのため、側面や側面の凹形状の表現がうまく行かないという弱点があります。
01.png03.png

方向の情報も加えた、Vector (3 float)で押し出すのが Vector Displacement Map です。

01.png03.png

Vulkan ビューポートでの Displace 解像度の変更

ちなみにですが、Displace の解像度の変更は Display Options から行えます。
26.png
27.png

Vector Displacement Map の作り方

差のVector情報を作ればいいだけなので、作るのはいたって簡単です。
立体の形状と、平らな状態の形状を2つ用意します。
(ここではUVPeltノードを使用して平面化しています。)

01.png01.png

それらのP同士を引き算します。
ここでは変形前のPをrestとして保存しています。
v@vdm のアトリビュートの名前に決まりはありません。(予約語ではないです)

01.png

Copernicus に持っていき、Null をつけて「VDM」と名前を付けました。
これで Vector Displacement Map の完成です!

01.png

後はこのマップを読み込むシェーダー側の設定です。

MaterialX での実装

なにか特別なことをする必要はなく、実は、MaterialX の Displace ノードはデフォルトで Vector が差せるのです!(つまり既に実装されてる…!)
09.png

なので白黒の Height map の代わりに vector のカラーデータを差せばできてしまいます。

10.png

※MaterialXの仕様なのか、MtlX Standard Surface の方にも何かしらのマップを貼らないと動作しなかったため、空の Image ノードを base_color に差しています。

COP内の Preview Material で実装

ところが、 COP 内の Preview Material では Height Map に vector(RGB)を差すことができません。
Preview Material の実態は MaterialX なので動作しそうですが、
Vector Displacement Map を使用する想定で組まれていないようです。
11.png

中に入って少し改造したいと思います。
右クリック→Allow Editing of Contents して、中に入ります。
12.png

右上の SOP Import に入ります

13.png

COP Preview Material を Allow Editing of Contents して、中に入ります。

14.png

Displaceするマテリアルとしないマテリアルを切り替える Switch ノードがあるのでバイパスします。
これによって、強制的にDisplaceのあるマテリアルを選択させるようにします。
続いて Material Network に入ります

16.png

左の COP Preview mat に入ります。
17.png

下の方にDisplace の項目があるので、寄っていきます
18.png

新たに MtlX Image を作成し、File Name に 「VDM」と名付けた Null を「op:」関数で指定します。

19.png

MtlX Displacement に付けます
20.png

Copernicusに戻り、エラーの出てた Height Map のコネクトを切ります。

21.png

動作しました!!

宙に浮かせるようにOpacity を設定

アルファを Opacity に差せば、グリッドと接続しているジャギジャギが取れ、浮いたような表現になりました。
ジャギジャギをより奇麗に取るには Vector Displacement Map に Smooth Fill ノードを挟んで、境界にも色が来るよう広げます。

22.png

後ろ見ると、完璧には上手くいってませんが…。

23.png

また、バラバラにUV展開されたものでも Opacity を使えば浮かすことができます。

24.png

追記、Opacity 使用せずにジャギジャギを消す

※詳しいやり方は更新した hip を見てね

ノイズを加えてみた

試しに出来た Vector Displacement Map にノイズを加えて遊んだりもしてみました。

25.png

Vector Displacement Map の形状変更は癖が強く、とても難しいのですが、とりあえずノイズは単純に加えることができました!

終わりに

Vector Displacement Map を知るきっかけとなったのはこちらのポスト

tinybugbot氏に感謝申し上げます!
Copernicusで様々な面白いポストをしていらっしゃるので、フォロー必須です!

最後まで読んでいただきありがとうございました!

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?