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) |