ExportShaderCompound

導入

v7.0

詳細

シェーダ コンパウンドを書き出します。 シェーダ コンパウンドは、これを定義する XML ベースの形式(.xsirtcompound:Softimage Render Tree Compound)でディスクに保存された場合、作成元のシーン外でしか使用できません。

デフォルトでは、シェーダ コンパウンドはテキスト形式で保存され、ネストされたシェーダをファイルに直接埋め込んで保存することはなく、これらのシェーダを参照します。 ただし、ネストされたシェーダ自体が書き出されていない場合や、そのファイルが見つからない場合は、.xsirtcompound ファイルに埋め込まれます。

シェーダ コンパウンドを一度書き出すと、任意のシーンで読み込んで参照したり、配布したりできます。 コンパウンドをエンコードされた形式に保存して保護する場合は、Private 引数に True を渡してデフォルトの動作を変更できます。

スクリプト構文

oReturn = ExportShaderCompound( [Compound], FullPath, ForceEmbedded );

戻り値

なし

パラメータ

パラメータ タイプ 説明
Compound 文字列 書き出すコンパウンド。

デフォルト値: 現在選択されている値

FullPath 文字列 コンパウンドを保存するディスク上の場所。
ForceEmbedded Boolean True の場合、ネストされたシェーダ コンパウンドが書き出された同じ.xsirtcompound ファイルに強制的に埋め込まれます。通常の場合と異なり、参照されることはありません。

注: ネストされたシェーダがまだ書き出されていない場合(つまり、ディスク上に.xsirtcompound ファイルがない場合)は、この設定に関わらず埋め込まれます。

デフォルト値: False

JScript の例

/*

	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