Q100170:Katanaでのテクスチャの処理
概要
テクスチャは、シェーダーライブラリとスタジオパイプラインによってさまざまな方法で処理され、Katanaは、いくつかの一般的な規則に従って、テクスチャを割り当てるための柔軟なフレームワークを提供します。
以下は、ArnoldとRenderManの両方で動作するこれらのオプションの一部の概要です。ここで説明する両方のアプローチを示す添付のサンプルシーンも参照してください。
詳しくは
マテリアル属性を使用してテクスチャを宣言する
各オブジェクトに独自のテクスチャを与える最も簡単な方法は、オブジェクトごとにマテリアルを作成し、シェーダでテクスチャを文字列パラメータとして明示的に宣言することです。各オブジェクトには、関連する材料が割り当てられます。
このアプローチは、特に多数のオブジェクトを含むシーンで作業する場合に最も労働集約的であり、マテリアルを変更する必要がある場合に柔軟性に欠けます。
多くのオブジェクトは同じマテリアルを共有できますが、異なるテクスチャを割り当てる必要があります。この場合、各オブジェクトが独自のテクスチャを取得するようにシーンを設定することができます。
オブジェクト属性を使用してテクスチャを宣言する
マテリアルにテクスチャを設定するのではなく、レンダリングされるオブジェクトは、任意の属性を介して関連するテクスチャファイルを指すことができます。
RenderMan primvars
RenderManを使用する場合、テクスチャファイルをRenderMan primvarとしてレンダラーに渡すことができます。
Katanaでは、 textures.xxx という文字列属性 は、 xxx というprimvarとしてRenderManに自動的に書き込まれ ます。シェーダーに同じ名前の文字列パラメーターがある場合、RenderManは、ジオメトリから渡されたprimvarの値を使用して、レンダリング時にこのシェーダーパラメーターを設定します。
テクスチャの名前がジオメトリの任意の属性に含まれている場合、OpScriptを使用して、これらの texture.xxx 属性をRenderManによって認識される形式 に設定できます 。
RenderMan primvarsを使用してサンプルシーンを設定するには、次の手順を実行します。
- [ ヘルプ ] > [ ポニーが欲しい ]をクリックして、CameraCreateと2つのポニーノードを追加し ます。ポニーに名前を付けてください。
- AttributeSetノードを使用して、属性「geometry.arbitrary.texFile」を作成します。ポニーの一方を「flag_uk.tx」に設定し、もう一方を「flag_usa.tx」に設定します。
- マージノードを使用してすべてのノードをマージします。
- マテリアルを作成し、RMSGPSurfaceシェーダーを追加します。
- MaterialAssignノードを使用して、マテリアルをroot / world / geo // *に割り当てます。
- PxrStdAreaLightでGafferThreeノードを追加します。
- 次に、テクスチャを処理するOpScriptノードを作成します。
-カスタムCELの場所/ root / world / geo // *に適用します。これは、OpScriptがgeoの下のすべてのオブジェクトに再帰的に適用されることを意味します。
-texturePathという名前のユーザーパラメータを追加し、Katanaに含まれるデモのテクスチャが保存される場所に値を設定します。たとえば、
Linuxでは /opt/Foundry/Katana2.5v3/demos/tx_files/ または
C:/ Program Files / Katana2.5v3 / demos / tx_files / Windowsの場合
-次のluaコードを追加します。
ローカルtexPath = Interface.GetOpArg( 'user.texturePath')
ローカルfileName = Interface.GetAttr( 'geometry.arbitrary.texFile')
ローカルfilePath =(texPath:getValue().. fileName:getValue())
Interface.SetAttr( 'textures.SurfaceMap'、StringAttribute(filePath))
- これをレンダリングすると、各ポニーにgeometry.arbitrary.texFileで指定されたテクスチャが割り当てられていることがわかります。
この場合のSurfaceMapのように、Katanaでパラメーターの内部名を表示するには、中マウスボタンでスクリプトエディターのテキストフィールドにドラッグします。結果のコマンドは、属性に使用する名前を示します。
テクスチャの名前またはファイルパスを含むタグをgeometry.arbitraryに追加する方法の詳細については、 パイプラインデータを使用したテクスチャの設定 に関するKatanaオンラインヘルプを参照してください 。
シェーダーパラメーターの{attr:xxx}構文
ArnoldとRendermanの両方で機能する別のオプションは、シェーダーパラメーターに{attr:xxx}構文を使用することです。これは、マテリアルを作成するときに、マテリアルのパラメーターを{attr:tex.SurfaceMap}などに設定することで機能します。
レンダー時に、レンダラーはレンダリングされるジオメトリのtex.SurfaceMapという属性を探します。シェーダーパラメーターは、ジオメトリ属性から読み取られた値に設定されます。
このアプローチでは、上記の例で説明したようにシーンを設定しますが、Surface Mapパラメーターの値として{attr:tex.SurfaceMap}を追加します(テクスチャーではなく、primvarsを使用していないことを示すため)。 OpScriptコードの最後の行
Interface.SetAttr( 'tex.SurfaceMap'、StringAttribute(filePath))
詳細については、「テクスチャ処理-概要」サンプルプロジェクトおよび Katanaオンラインヘルプの 「 テクスチャ処理オプション」 セクション を参照してください 。
私たちはそれを聞いて申し訳ございません
理由をお聞かせください
コメント