Object Hierarchy | 関連する C++クラス:ShaderParamDef
ShaderParamDef
v9.0 (2011)
このオブジェクトはShaderParameterの定義を表します。シェーダパラメータ定義は特別なShaderParamDefContainerオブジェクトのShaderDefオブジェクトに保存されます。このオブジェクトを使用して、既存のパラメータ定義にアクセスしたり、新しいパラメータ定義を追加したりできます。ShaderParamDefContainer オブジェクトにアクセスするには、ShaderDef.InputParamDefs または ShaderDef.OutputParamDefs を呼び出します。ShaderParamDefContainer.AddParamDef または ShaderParamDefContainer.AddArrayParamDef を一連の ShaderParamDefOptions とともに呼び出して、ShaderParamDefContainer から新しいパラメータ定義を追加できます。
インスタンス化されたシェーダ定義から特定のシェーダ パラメータ定義にアクセスするには、ShaderParamDefContainer.GetParamDefByName メソッドを使用します。インスタンス化されたシェーダ定義に対して、入力または出力パラメター定義のリスト全体を繰り返し処理するには、ShaderParamDefContainer.Definitionsプロパティを使用します。
ShaderParameterインスタンスから既存のシェーダパラメータ定義にアクセスするには、ShaderParameter.Definitionプロパティを使用します。
配列パラメータ(ShaderArrayParamDef)を追加するには、ShaderParamDefContainer.AddArrayParamDefメソッドを使用します。それ以外のパラメータタイプの場合は、ShaderParamDefContainer.AddParamDefメソッドを使用します。
注:このオブジェクトは汎用インターフェイスです。このオブジェクトには配列および構造のパラメータタイプに専用のアクセス機能が用意されています。これらの専用機能の詳細については、ShaderArrayParamDefおよびShaderStructParamDefのリファレンスページを参照してください。
#
# This example demonstrates how to create a dynamic shader definition
# with 2 output and 1 input parameters. It also connects the new
# shader definition in to a cube and displays it in the render tree
#
from win32com.client import constants as cns
app = Application
app.NewScene("", False)
oShaderDef = XSIFactory.CreateShaderDef(None, "MySimpleParamDemo", 1, 3)
oShaderDef.AddShaderFamily("mrTexture")
oShaderDef.DisplayName = "Demo"
oShaderDef.Category = "Demo Items"
app.LogMessage("Shader definition name: " + oShaderDef.Name)
# OUT PARAMETER 1
# Set up shader parameter definition options to use with new parameters
oShaderParamDefOptions = XSIFactory.CreateShaderParamDefOptions()
oShaderParamDefOptions.SetAnimatable(True)
oShaderParamDefOptions.SetTexturable(True)
oShaderParamDefOptions.SetInspectable(True)
oShaderParamDefOptions.SetShortName("Output")
# Add output parameter to definition
oOutputParams = oShaderDef.OutputParamDefs
oOutputParams.AddParamDef("result", cns.siColorParameterType, oShaderParamDefOptions)
oOutputParams.GetParamDefByName("result").DisplayName = "Colour Output"
app.LogMessage(oOutputParams.GetParamDefByName("result").DisplayName)
# OUT PARAMETER 2
# Change existing shader parameter definition options to use with new output parameter
oShaderParamDefOptions.SetShortName("Valid?")
# Add 2nd output parameter to definition
oOutputParams.AddParamDef("valid", cns.siBooleanParameterType, oShaderParamDefOptions)
# IN PARAMETER
# More changes to param def options
oShaderParamDefOptions.SetSoftLimit(-50, 50)
oShaderParamDefOptions.SetHardLimit(-10, 10)
oShaderParamDefOptions.SetDefaultValue(5)
oShaderParamDefOptions.SetShortName("Vexatious")
# Add input parameter (direct access)
oShaderDef.InputParamDefs.AddParamDef("vex", cns.siScalarParameterType, oShaderParamDefOptions)
# RESULTS
# Now print info to see what we have
for oShaderOutParamDef in oShaderDef.OutputParamDefs.Definitions :
app.LogMessage("Input parameter name: " + oShaderOutParamDef.DisplayName)
app.LogMessage("\tClassName: " + app.ClassName(oShaderOutParamDef))
app.LogMessage("\tType: " + str(oShaderOutParamDef.DataType))
# Connect this shader in the RenderTree and pop up the RenderTree view to see it
cube = app.ActiveSceneRoot.AddGeometry("Cube", "MeshSurface")
app.CreateShaderFromProgID("None.MySimpleParamDemo.1.3", "Sources.Materials.DefaultLib.Scene_Material", "")
app.SIConnectShaderToCnxPoint( "Sources.Materials.DefaultLib.Scene_Material.Demo.result",
"Sources.Materials.DefaultLib.Scene_Material.Photon", False)
app.SelectObj(cube)
app.OpenView("Render Tree", False)
# INFO : Shader definition name: None.MySimpleParamDemo.1.3
# INFO : Input parameter name: Output
# INFO : ClassName: ShaderParamDef
# INFO : Type: 4
# INFO : Input parameter name: Valid?
# INFO : ClassName: ShaderParamDef
# INFO : Type: 1 |