コンテンツにスキップ

UsdPreviewSurfaceでマテリアルを設定する

HoudiniでのUsdPreviewSurfaceを使用したマテリアルの指定方法について
まとめてみます。

まずは、MaterialNetを作成。

そして、UsdPreviewSurfaceを作ります。

まずはわかりやすい色をつけておきます。

Stageに戻って、MaterialLibraryを作り、

Material VOP で

先ほど作成したPreviewSurfaceを選び、MaterialPathを適当な名前にします。

あとはMaterialPathPrefixを Looks としておきます。

結果。
Looks下にMaterialが作られました。
ここのScopeは何でも良いですが、今回はMayaのExportツール準拠でLooksにしました。

あとはアサインするには、 Assign to Geomteryにチェックを入れて
アサインしたいノードを選択すればOKです。

基本構造

USDの場合のマテリアル関係の基本構造は、ざっくりこうなっています。
ジオメトリに対してアサインするのはMaterialPrim。
これはMayaでいうところのShadingEngineに近い感じです。
シェーダー本体は、 ShaderPrimでこれがMaterialPrimと接続されています。

USDのシェーダー関連の特徴として、シェーダー関連のPrimはShaderでひとくくりに
されていて、その区別はIDによって行われます。
どういうことかというと、

ShaderPrimのアトリビュートを見ると、 id という項目があって
そこに「UsdPreviewSurface」が指定されています。
なので、同じShaderPrimであっても役割が異なることがあります。

デフォルトで用意されているのが

  • Preview Surface
  • Texture Reader
  • Primvar Reader
  • Transform2d

の4つです。
(PrimvarReaderはこれ1つでも複数の役割を持つ)

それを踏まえて、テクスチャのアサイン方法で
UsdPreviewSurface以外をみてみます。

テクスチャを使用する

さきほどのPreviewSurfaceにUVTextureと PrimVarReaderを作成します。

PrimVarReaderは、SignatureをFloat2、VarName を st にします。

こんなかんじです。

シーングラフはこちら。

テクスチャは こちらを使用しました。

ここで使用するのが Texture Readerと Primvar Readerです。
シーングラフを見て分かる通り、すべてShaderですが、それぞれが id によって役割が
指定されています。

例えばテクスチャは、idは「UsdUVTexture」になっています。

Primvar Readerとは

UVTextureに関しては、TextureColorをShaderに対して接続しているのでなんとなく
わかりますが、もう1つのPrimVarReaderとはなんでしょうか。

まずPrimVarがなにかというと

Rendermanに由来するもので、「Primitive Variable(プリミティブ変数)」の略
レンダラーとプリミティブを関連付ける特別なアトリビュートで
プリミティブの表面/体積に渡ってアトリビュートの値を補間することができるもの
(公式Glossaryより引用)

です。
つまり、テクスチャのマッピングに使用するUVであったり頂点カラーであったり
ジオメトリ上で定義された各種値を供給する機能を持つのがPrimvar Readerです。

UVの座標を取得するためのPrimvarReaderをみてみると
「varname」を「st」としています。
USDの記述側で、MeshPrimではどういうアトリビュートになっているかというと

Meshには「 primvars:st というアトリビュートがあり、そこにはMeshのUV座標が
記述されています。

Primvar Readerとは、このジオメトリ側のPrimversの値を
Shader側で使えるようにしているというのがわかりました。

作成したテクスチャつきのUSDは当然のようにusdviewなどでも確認ができます。

まとめ

primvarReaderとUSD側に定義されたprimvars:st~といった記述が
どういう関係性になっているのかが理解できていませんでしたが
一通り組み立てたおかげでようやく理解できたきがします。

USDPreviewSurfaceまわりの詳細の仕様は
https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html
こちらを参考にしました。


最終更新日: 2021-08-13 18:09:04

Tag