Object Hierarchy | 関連する C++クラス:ShaderArrayParameter
ShaderArrayParameter
v9.0 (2011)
Shaderの配列パラメータを表します。配列パラメータは特別な種類のShaderParameterであり、ShaderParameterオブジェクトのセットが含まれます。これらのタイプのパラメータは、パラメータのインスタンス数が動的に変わる場合に便利です。たとえば、Volume Effectsシェーダは「scatter_lights_input」というラベルのライトリファレンスの配列パラメータを含み、任意の数のライトを追加することができます。
このオブジェクトは、コレクション項目がシェーダ配列パラメータの場合に、ParameterCollectionプロパティを繰り返し処理して(Shader.Parameters を介して)取得します。
これらのタイプのパラメータは、ShaderArrayParamDefインターフェイスを使用して定義することができます。
#
# This example demonstrates how to work with a ShaderArrayParameter by instantiating
# a shader that implements a shader array parameter, adding 2 elements to that array,
# setting some values on the new elements, and then finding them again by iterating
# over the shader parameters.
#
from win32com.client import constants as si
app = Application
app.NewScene("", False)
# Set up a cylinder with a Volume Effects shader
app.GetPrimLight("Light_Box.Preset", "Light_Box")
app.GetPrimLight("LightFlat.Preset")
app.CreatePrim("Cylinder", "MeshSurface")
sh = app.CreateShaderFromProgID("Softimage.March_Fractal_vol.1.0", "Sources.Materials.DefaultLib.Scene_Material")
app.SIConnectShaderToCnxPoint("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.out",
"Sources.Materials.DefaultLib.Scene_Material.volume", False)
# Add 2 instances of the input array parameters and set some values on them
ap = sh.Parameters("scatter_lights_input");
app.SIAddArrayElement("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.scatter_lights_input")
app.SetReference2("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.scatter_lights_input.scatter_lights_input", "Light_Box")
app.SIAddArrayElement("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.scatter_lights_input")
app.SetReference2("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.scatter_lights_input.scatter_lights_input[1]", "light1")
# Now we can iterate over the list of items
for param in sh.Parameters :
if (param.IsClassOf(si.siShaderParameterID)) :
if (app.ClassName(param) == "ShaderArrayParameter") :
app.LogMessage("'" + param.ScriptName + "' is an array with " + str(param.Count) + " members")
# Expected output:
# INFO : 'scatter_lights_input' is an array with 2 members
# INFO : 'shadow_lights_input' is an array with 0 members
# INFO : 'trans_model' is an array with 0 members |
/*
This example demonstrates how to work with a ShaderArrayParameter by instantiating
a shader that implements a shader array parameter, and then manipulating the array
using the Add and Remove methods.
NB: This example manipulates the ParameterCollection directly instead of getting a
pointer to it (eg., var pArrayParam = sh.Parameters("inputs")) because the proxy
object (pointer) is not dynamic.
*/
app = Application;
NewScene(null, false);
// Set up a cylinder with a Volume Effects shader
CreatePrim("Cylinder", "MeshSurface");
var sh = CreateShaderFromProgID("Softimage.March_Fractal_vol.1.0", "Sources.Materials.DefaultLib.Scene_Material");
SIConnectShaderToCnxPoint("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.out",
"Sources.Materials.DefaultLib.Scene_Material.volume", false);
// Add 3 instances of the inputs array parameters
sh.Parameters("shadow_lights_input").Add();
sh.Parameters("shadow_lights_input").Add();
sh.Parameters("shadow_lights_input").Add();
app.LogMessage("Found " + sh.Parameters("shadow_lights_input").Parameters.Count
+ " element(s) on the inputs array parameter");
// Remove one of the elements
sh.Parameters("shadow_lights_input").Remove(1);
app.LogMessage("Now there are " + sh.Parameters("shadow_lights_input").Parameters.Count + " element(s)");
// Expected output:
// INFO : Found 3 element(s) on the inputs array parameter
// INFO : Now there are 2 element(s) |