ShaderDef

ShaderDef

Object Hierarchy | 関連する C++クラス:ShaderDef

継承

SIObject

ShaderDef

導入

v9.0 (2011)

詳細

シェーダ定義は、シェーダのスナップショットを通常、ディスク上のファイルに保存するという点でプリセットに似ています。ただし、従来の Softimage の.preset ファイルは SPDL からビルドされたバイナリファイルであるのに対して、シェーダ定義には作成および変更する方法がいくつかあります。これらは、自己インストールプラグインを介して、ディスク上に保存された特別なXML ファイル(.xsishaderdef)を介して、または処理中にコードによって操作する方法です。

自己インストールのプラグインベースのシェーダ定義を作成するには、DefineコールバックとDefineInfoコールバックを実装する必要があります。詳細については、Custom Shaders を参照してください。

処理中にシェーダ定義を作成するには、XSIFactory.CreateShaderDefを使用した後、戻された ShaderDef オブジェクトを使用して定義を設定します。

シェーダ定義の .xsishaderdef ファイルへの保存は、シェーダ バージョンを管理する上で最も信頼できる方法です。シェーダの特定のリストを新しいシェーダ定義にアップグレードするために、ReplaceShadersDefinition コマンドを使用できます。

Softimage の現在のセッションにあるすべてのシェーダ定義のリストを取得するには、XSIApplication.ShaderDefinitionsプロパティを使用します。また、XSIApplication.GetShaderDefメソッドでProgID を指定して、特定のシェーダ定義にアクセスすることもできます。

メソッド

AddRendererDefオペレータ AddShaderFamilyオペレータ GetRendererDefByNameオペレータ IsClassOfオペレータ
IsEqualToオペレータ IsShaderFamilyオペレータ RemoveRendererDefオペレータ  
       

プロパティ

Application Attributesオペレータ Categories Categoryオペレータ
DefinitionPathオペレータ DisplayNameオペレータ FullNameオペレータ Help
InputParamDefsオペレータ Nameオペレータ NestedObjects Origin
OriginPath OutputParamDefsオペレータ PPGLayoutオペレータ Parent
Parsedオペレータ Parserオペレータ ParserBasedオペレータ Pluginオペレータ
PluginBasedオペレータ PluginFilenameオペレータ PrimaryShaderFamilyオペレータ ProgIDオペレータ
RenderTreeLayoutオペレータ RendererDefsオペレータ ShaderFamiliesオペレータ ShaderInstanceCountオペレータ
ShaderInstancesオペレータ ShaderballOptsオペレータ Typeオペレータ  
       

1. Python の例

from win32com.client import constants as si

app = Application

app.NewScene("", 0)

#

#	SETUP

#

# Create a ShaderDef from the factory

oShaderDef = XSIFactory.CreateShaderDef("NoParser", "Nunce", 1, 0)

# On-the-fly shader definitions won't show up in the preset manager 

# but just in case this definition eventually gets saved to file

oShaderDef.Category = "Test Shaders"

# Add the basic Texture family

oShaderDef.AddShaderFamily(si.siShaderFamilyTexture)

#

#	PARAMETERS

#

# Create one set of parameter definition options for all 

oPDefOptions = XSIFactory.CreateShaderParamDefOptions()

oPDefOptions.SetTexturable(True) # make it a port on the shader node

# Get the ShaderParamDefContainers for both inputs and outputs. The

# new parameter definitions will be added to these objects

oInputPDefs = oShaderDef.InputParamDefs

oOutputPDefs = oShaderDef.OutputParamDefs

# Add color, scalar, and boolean ShaderParamDefs as inputs

oInputPDefs.AddParamDef("in_color", si.siShaderDataTypeColor4 , oPDefOptions)

oInputPDefs.AddParamDef("in_scalar", si.siShaderDataTypeScalar , oPDefOptions)

oInputPDefs.AddParamDef("in_boolean", si.siShaderDataTypeBoolean , oPDefOptions)

# Output a color

oOutputPDefs.AddParamDef("out", si.siShaderDataTypeColor4, oPDefOptions)

# Set up a Renderer

oRendererDef = oShaderDef.AddRendererDef("mental ray")

oRendererDef.SymbolName = "sib_attribute_boolean"

oRendererDef.CodePath = "{LIBS}/sibase.{EXT}"

oRendererOpts = oRendererDef.RendererOptions

oRendererOpts.Set("version", 1)

#

#	INSTANTIATION

#

# Generate a preset and connect it to a cone

app.CreatePrim("Cone", "MeshSurface")

app.CreateShaderFromProgID("NoParser.Nunce.1.0", 

	"Sources.Materials.DefaultLib.Scene_Material")

app.SIConnectShaderToCnxPoint("Sources.Materials.DefaultLib.Scene_Material.Nunce.out", 

	"Sources.Materials.DefaultLib.Scene_Material.volume", False)

# Open the Render Tree with the cone selected to see it

# Open the Synoptic viewer

app.OpenView("Render Tree")

2. JScript の例

//

//	This example demonstrates how to instantiate and connect a shader

//	definition, then how to get the shader definition from the system

//	and use it to find its instance (shader)

//

app = Application;

app.NewScene("", false);

var sProgID = "Softimage.material-moviescreen.1.0";

LogInstances(sProgID);

CreateShaderFromProgID(sProgID, "Sources.Materials.DefaultLib.Scene_Material");

LogInstances(sProgID);

// INFO : # of instances on Flat Light: 1

// INFO : Found shader instance: Shader

// INFO : Shader container: null

// Set up a torus and a disc and connect the shader to both

var obj1 = CreatePrim("Torus", "MeshSurface");

SIConnectShaderToCnxPoint("Sources.Materials.DefaultLib.Scene_Material.Flat_Light.out", 

	"Sources.Materials.DefaultLib.Scene_Material.Phong.reflectivity", false);

SIConnectShaderToCnxPoint("Sources.Materials.DefaultLib.Scene_Material.Flat_Light.out", 

	"Sources.Materials.DefaultLib.Scene_Material.Phong.radiance", false);

var obj2 = CreatePrim("Disc", "MeshSurface");

RemoveShaderFromCnxPoint("Sources.Materials.DefaultLib.Scene_Material.Flat_Light.out", 

	"Sources.Materials.DefaultLib.Scene_Material.Phong.reflectivity", false);

SIConnectShaderToCnxPoint("Sources.Materials.DefaultLib.Scene_Material.Flat_Light.out", 

	"Sources.Materials.DefaultLib.Scene_Material.Phong.reflectivity", false);

LogInstances(sProgID);

// INFO : # of instances on Flat Light: 2

// INFO : Found shader instance: Shader

// INFO : Shader container: null

// INFO : Found shader instance: Flat_Light

// INFO : Shader container: Sources.Materials.DefaultLib.Scene_Material

// Convenience function that will be called before and after 

// instantiating and after connecting the shader

function LogInstances( in_name )

{

	var oShaderDef = app.ShaderDefinitions(in_name);

	app.LogMessage("# of instances on "+oShaderDef.DisplayName+": "+oShaderDef.ShaderInstanceCount);

	if (oShaderDef.ShaderInstanceCount) {

		for (var i=0; i<oShaderDef.ShaderInstanceCount; i++) {

			var oShader = oShaderDef.ShaderInstances(i);

			app.LogMessage("Found shader instance: "+oShader.Name);

			app.LogMessage("Shader container: "+oShader.GetShaderContainer());

		}

	}

}

関連項目

XSIApplication.GetShaderDef XSIFactory.CreateShaderDef Shader.ShaderDef XSIFactory.RemoveShaderDef Shader callbacks Custom Shaders Shader Definition examples installed with Softimage Shader Parser examples installed with Softimage