ExportShaderCompo und

Introduced

7.0

Description

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.

Scripting Syntax

    ExportShaderCompound( [Compound], FullPath, ForceEmbedded )

Parameters

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

Return Value

Nothing

Examples

JScript Example

    /*
       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);

See Also

CreateShaderFromPreset | CreateShaderFromCLSID | CreateShaderFromProgID | CreateShaderCompound
NestShaders | UnnestShaders | AddShaderCompoundPort | RemoveShaderCompoundPort
MoveShaderCompoundPort | RenameShaderCompoundPort | ImportShaderCompound | ExplodeShaderCompound
SetShaderCompoundProperties | GetShaderCompoundProperties |  |

Autodesk Softimage v7.5