XSIFactory.CreateShaderDef operator


v9.0 (2011)


新しいシェーダ定義を作成します。Softimage シェーダ定義は XSIApplication.ShaderDefinitions を介して、または XSIApplication.GetShaderDef を介する ShaderDef.ProgID によってアクセスできます。

注: 各シェーダ定義には、4 つの指定コンポーネントから作成されたユニークな ProgID があります。詳細については、Instantiating Shader Definitions and the ProgIDを参照してください。

注:処理中の(保持されない)シェーダ定義はパーサベースのシェーダ定義のように動作します。このシェーダ定義は決して解析されず(ShaderDef.Parsed は常に False を戻す)、定義ファイルはありません(ShaderDef.DefinitionPath は常に空)。 ただし、パーサ名を指定する必要があります。この名前は「Softimage」またはすでに登録されているパーサ名以外でなければなりません。


ShaderDef XSIFactory.CreateShaderDef( String in_strParserName, String in_strClassName, UInt32 in_ulMajor, UInt32 in_ulMinor );


oReturn = XSIFactory.CreateShaderDef( in_strParserName, in_strClassName, in_ulMajor, in_ulMinor );




パラメータ タイプ 説明
in_strParserName String 新しいシェーダ定義のパーサ名。このメソッドを使用して作成されたシェーダ定義はプラグインまたはパーサのいずれでも定義されないため、これは基本的にはダミーの文字列です。
in_strClassName String シェーダクラス名このシェーダ定義に対して UI 名を指定しない場合、レンダ ツリーにインスタスが作成される際にシェーダ ノードにこの名前が表示されます。
in_ulMajor Long メジャーバージョン番号(v2.5での 2)
in_ulMinor Long マイナーバージョン番号(v2.5での 5)

Python の例


# This example demonstrates how to create a completely bogus shader 

# definition on the fly (ie., not to be persisted) and then how to

# instantiate it on a scene object


from win32com.client import constants as si

app = Application

app.NewScene("", False)

# This function creates a bogus shader definition on the fly and returns its ProgID

def CreateDefOnTheFly () :

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

	otmpShaderDef.Category = "Test Shaders"

	# family


	# paramdef options (in)

	otmpShadPDefOpts = XSIFactory.CreateShaderParamDefOptions()



	# paramdef (in)

	otmpInParams = otmpShaderDef.InputParamDefs

	otmpInParams.AddParamDef2("west", si.siColorParameterType, otmpShadPDefOpts)

	# paramdef options (out)

	otmpShadPDefOpts = XSIFactory.CreateShaderParamDefOptions()



	# paramdef (out)

	otmpOutParams = otmpShaderDef.OutputParamDefs

	otmpOutParams.AddParamDef2("east", si.siColorParameterType, otmpShadPDefOpts)

	# renderer

	otmpRendDef = otmpShaderDef.AddRendererDef("whoops")

	otmpRendOpts = otmpRendDef.RendererOptions

	otmpRendOpts.Set("plain", False)

	# attributes

	otmpAttrs = otmpShaderDef.Attributes

	otmpAttrs.Set("chuckle", "on")

	otmpAttrs.Set("nbr", 456123)

	# return the ProgID of the new shader

	return otmpShaderDef.ProgID

# This function tests to see whether the specified parser name is 

# a registered parser name already (if it is, the script will not

# attempt to create a definition on the fly (to avoid errors)

def IsNotRegistered( in_name ) :

	oPC = Application.Plugins

	for p in oPC :

		for pi in p.Items :

			if pi.Type == "Shader Language Parser" :

				if pi.Name == in_name :

					return False

	# If no match is found, return true

	return True

# First check to make sure the parser name isn't already registered

if IsNotRegistered("NoParser"):

	# Create the shader definition on the fly and get its ProgID

	sProgID = CreateDefOnTheFly()

	# Now create a cube and instantiate this shader on it

	oCube = app.CreatePrim("Cube", "MeshSurface")

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


		"Sources.Materials.DefaultLib.Scene_Material.Phong.ambient", False)

	# Finally, remove it (we don't want to clutter up the system)

	oRemoveMe = app.ShaderDefinitions(sProgID)

	if oRemoveMe :


else :

	app.LogMessage("Parser name is already registered.")


XSIFactory.RemoveShaderDef XSIFactory.CreateShaderParamDefOptions XSIApplication.ShaderDefinitions XSIApplication.GetShaderDef Instantiating Shader Definitions and the ProgID