Object Hierarchy | Related C++ Class: ShaderArrayParameter
ShaderArrayParameter
v9.0 (2011)
Represents an array parameter for a Shader. An array parameter is a special kind of
ShaderParameter which contains a
set of ShaderParameter objects.
These types of parameters are useful for supporting a dynamic
number of instances of parameters. For example, the
Volume Effects shader includes an array parameter of light
references labeled 'scatter_lights_input' that allows you to add
any number of lights.
You get this object when you iterate over the ParameterCollection property (via
Shader.Parameters) when the collection item is a shader array
parameter.
These type of parameters can be defined using the ShaderArrayParamDef interface.
# # 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) |