各シェーダ定義には、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")