各シェーダ定義には、1 つまたは複数のレンダラ定義を関連付けることができ、次のような重要な情報を格納します。
ShaderDef.AddRendererDef または ShaderDef::AddRendererDef メソッドを使用して、レンダラ定義をシェーダ定義に追加します。このメソッドにレンダラの名前を指定すると、新しい定義が MetaShaderRendererDef または MetaShaderRendererDef オブジェクトとして返されます。MetaShaderRendererDef オブジェクトでは、次の項目を指定できます。
MetaShaderRendererDef アクセス |
対応する SPDL 宣言(Renderer セクション) |
詳細 |
---|---|---|
MetaShaderRendererDef.SymbolName または MetaShaderRendererDef::PutSymbolName |
名前 |
使用するシェーダ コードのシンボル名を示します。 たとえば mental ray シェーダの場合、この名前はシェーダ用コードが格納されている DLL/DSO 内のシンボル(コールバック)名のプリフィックスを示します。 |
MetaShaderRendererDef.CodePath または MetaShaderRendererDef::PutCodePath |
FileName |
シェーダ コードを含む DLL/DSO の名前。 たとえば、{LIBS}/sibase.{EXT} のようになります。 |
MetaShaderRendererDef.CodeText または MetaShaderRendererDef::PutCodeText |
BeginText...EndText |
任意のテキストのためのプレースホルダを提供します。これは、レンダリング エンジンによって解釈されたり、シェーダ内部にコンパイルされます(シェーダの実装を含む)。 たとえば以下のようになります。 { float4 retcolor; retcolor.x = factor.x * (input.x + input.y + input.z) / 3.0; retcolor.y = retcolor.x; retcolor.z = retcolor.x; retcolor.w = retcolor.x; return retcolor; } |
MetaShaderRendererDef.RendererOptions または MetaShaderRendererDef::GetRendererOptions |
オプション |
「レンダラ オプションを設定する」を参照してください。 |
# You need to set up at least one renderer definition for each shader definition. # Renderer definitions are available via the ShaderDef.RendererDefs property and # allow you to tell Softimage which renderer to use, which procedure to call, how # to set any renderer options, etc. oRendererDef = oShaderDef.AddRendererDef("mental ray") oRendererDef.SymbolName = "XSIModelMap" oRendererDef.CodePath = "{LIBS}/xsibase.{EXT}" # Set the version option oRendererOpts = oRendererDef.RendererOptions oRendererOpts.Set("version", 1)
レンダラ オプションは、レンダラに渡される文字列/値の組み合わせのリストからなります。 オプション名には、任意の文字列を指定できます。 値は boolean、integer、float、または string です。 オプション リストの使い方は、次のようにレンダラに応じて異なります。
mental ray の場合、オプション リストには、この特定のシェーダ用レンダリングの制限(たとえば、シャドウのオン/オフ)が保存されます。 詳細については、「mental ray オプション」を参照してください。
Options セクションでは、その他のレンダラ用に、シェーダのソース コードの場所を示すパスを指定できる場合もあります。 これは、たとえば大規模なシェーダ ライブラリ用のすべてのコードを 1 つの巨大な SL ファイルとして提供できる、RenderMan シェーダ ライブラリに役立ちます。 mental ray 用に、後でレンダ時にコンパイルされるソース コードを指定することもできます。
Python の例: 2 種類のレンダラを設定する(1 つは実行に Cg コードを使用。どちらも Options を使用)
# Add a mental ray renderer definition with the location of the library where it is defined oRendererDef = oShaderDef.AddRendererDef("mental ray") oRendererDef.SymbolName = "material-phong" oRendererDef.CodePath = "{LIBS}/sibase.{EXT}" oRendOpts = oRendererDef.RendererOptions oRendOpts.Set("version", 1) oRendOpts.Set("pass channel", "Ambient,Diffuse,Specular,Irradiance,Reflection,Refraction") # Add a Cg version with the code embedded in the definition oRendererDef = oShaderDef.AddRendererDef("Cg") oRendererDef.SymbolName = "mib_color_average_cg" oRendererDef.CodeText = "\tBeginText\n\t{\n\t\t float4 retcolor;\n\n\t\t retcolor.x = factor.x * (input.x + input.y + input.z) / 3.0;\n\t\t retcolor.y = retcolor.x;\n\t\t retcolor.z = retcolor.x;\n\t\t retcolor.w = retcolor.x;\n\n\t\t return retcolor;\n\t}\n\tEndText" oRendOpts = oRendererDef.RendererOptions oRendOpts.Set("param0", "ambient") oRendOpts.Set("param1", "diffuse") oRendOpts.Set("param2", "specular") oRendOpts.Set("param3", "ambience") oRendOpts.Set("param4", "shiny") oRendOpts.Set("const0", "diffuse_inuse") oRendOpts.Set("const1", "specular_inuse") oRendOpts.Set("param7", "radiance")