v7.0
shader
Exports a shader compound. Shader compounds can only be used
outside the scene in which they are created if they are saved to
disk in the XML-based format that defines shader compounds:
.xsirtcompound (Softimage Render Tree Compound).
By default, shader compounds are saved in text format and do not
save any nested shaders embedded directly in the file, but rather
reference them. However, if the nested shaders have not yet been
exported themselves or their file cannot be found, they will be
embedded in the .xsirtcompound file.
Once you have exported a shader compound, you can import it and
reference it in any scene, or distribute it. If you would like to
protect your compound by saving it in an encoded format, you can
change the default behavior by passing True to the Private
argument.
oReturn = ExportShaderCompound( [Compound], FullPath, ForceEmbedded ); |
Nothing
Parameter | Type | Description |
---|---|---|
Compound | String | Compound to export.
Default Value: Current selection |
FullPath | String | Where to save the compound on disk. |
ForceEmbedded | Boolean | True to force any nested shader compounds to be embedded inside
the same exported .xsirtcompound file, instead of being referenced,
as is the usual case. Note: If any nested shaders have not been exported already (that is, if there is no .xsirtcompound file on disk), they will be embedded, regardless of this setting. Default Value: False |
/* This example demonstrates how to set up and export a shader compound containing another nested shader compound, where the nested shader compound can be either embedded or referenced. */ // For readability, we are always saving to the user's RTCompounds directory var path = XSIUtils.BuildPath( Application.InstallationPath(siUserPath), "Data", "RTCompounds" ); // Convenience function to create and export a shader compound (innerSC.xsirtcompound) // that we will reference/nest in the outerSC*.xsirtcompound shader compounds. function CreateInnerCompound() { NewScene( null, false ); CreatePrim( "Torus", "MeshSurface" ); CreateShaderFromPreset( "Shaders\\Texture\\Gradient.Preset", "Sources.Materials.DefaultLib.Scene_Material" ); CreateShaderFromPreset( "Shaders\\Texture\\Grid.Preset", "Sources.Materials.DefaultLib.Scene_Material" ); SIConnectShaderToCnxPoint( "Sources.Materials.DefaultLib.Scene_Material.Grid", "Sources.Materials.DefaultLib.Scene_Material.Phong.ambient", false ); SIConnectShaderToCnxPoint( "Sources.Materials.DefaultLib.Scene_Material.Gradient", "Sources.Materials.DefaultLib.Scene_Material.Grid.line_color", false ); CreateShaderCompound( "Sources.Materials.DefaultLib.Scene_Material.Gradient," + "Sources.Materials.DefaultLib.Scene_Material.Grid" ); ExportShaderCompound( "Sources.Materials.DefaultLib.Scene_Material.ShaderCompound", path+"\\innerSC.xsirtcompound" ); } // Convenience function to create and export two shader compounds (outerSCembedd*.xsirtcompound) // and outerSCreffed.xsirtcompound), both of which contain the nested shader compound created // with the CreateInnerCompound() function. This function can be called to export the shader // compound with either a referenced (default) nested shader, or an embedded nested shader. function CreateOuterCompound( in_embed ) { NewScene( null, false ); CreatePrim( "Torus", "MeshSurface" ); // This is where we reference and connect the exported shader compound already // created in the CreateInnerCompound() function ImportShaderCompound( "Sources.Materials.DefaultLib.Scene_Material", path+"\\innerSC.xsirtcompound" ); SIConnectShaderToCnxPoint( "Sources.Materials.DefaultLib.Scene_Material.ShaderCompound.ambient", "Sources.Materials.DefaultLib.Scene_Material.Phong.ambient", false ); CreateShaderFromPreset( "Shaders\\Texture\\Fractal.Preset", "Sources.Materials.DefaultLib.Scene_Material" ); SIConnectShaderToCnxPoint( "Sources.Materials.DefaultLib.Scene_Material.Fractal", "Sources.Materials.DefaultLib.Scene_Material.Phong.specular", false ); CreateShaderFromPreset( "Shaders\\Texture\\Ripple.Preset", "Sources.Materials.DefaultLib.Scene_Material" ); SIConnectShaderToCnxPoint( "Sources.Materials.DefaultLib.Scene_Material.Ripple", "Sources.Materials.DefaultLib.Scene_Material.Phong.diffuse", false ); CreateShaderCompound( "Sources.Materials.DefaultLib.Scene_Material.ShaderCompound," + "Sources.Materials.DefaultLib.Scene_Material.Fractal," + "Sources.Materials.DefaultLib.Scene_Material.Ripple" ); // Embedded or Referenced? This setting corresponds to the innerSC.xsirtcompound, which // was imported and connected earlier in this function if (in_embed) { ExportShaderCompound( "Sources.Materials.DefaultLib.Scene_Material.ShaderCompound1", path+"\\outerSCembedd.xsirtcompound", true ); } else { ExportShaderCompound( "Sources.Materials.DefaultLib.Scene_Material.ShaderCompound1", path+"\\outerSCreffed.xsirtcompound", false ); } } // Create a shader compound and save it disk CreateInnerCompound(); // Create a shader compound which references the first one (innerSC.xsirtcompound) // and then export two versions: one referenced (outerSCreffed.xsirtcompound) and // the other embedded (outerSCembedd.xsirtcompound) CreateOuterCompound(); CreateOuterCompound(true); |
CreateShaderFromPreset CreateShadersFromMaterialPreset CreateShaderFromCLSID CreateShaderFromProgID CreateShaderCompound NestShaders UnnestShaders AddShaderCompoundPort RemoveShaderCompoundPort MoveShaderCompoundPort RenameShaderCompoundPort ImportShaderCompound ExplodeShaderCompound SetShaderCompoundPropertiesEx GetShaderCompoundProperties EditShaderCompoundPPGLogic