XSIFactory.CreateShaderDef operator

導入

v9.0 (2011)

カテゴリ

ICE シェーダ

詳細

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

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

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

スクリプト 構文

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

戻り値

ShaderDef

パラメータ

パラメータ タイプ 詳細
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
        otmpShaderDef.AddShaderFamily("mrTexture")
        # paramdef options (in)
        otmpShadPDefOpts = XSIFactory.CreateShaderParamDefOptions()
        otmpShadPDefOpts.SetTexturable(True)
        otmpShadPDefOpts.SetShortName("squelch")
        # paramdef (in)
        otmpInParams = otmpShaderDef.InputParamDefs
        otmpInParams.AddParamDef("west", si.siColorParameterType, otmpShadPDefOpts)
        # paramdef options (out)
        otmpShadPDefOpts = XSIFactory.CreateShaderParamDefOptions()
        otmpShadPDefOpts.SetTexturable(True)
        otmpShadPDefOpts.SetShortName("splosh")
        # paramdef (out)
        otmpOutParams = otmpShaderDef.OutputParamDefs
        otmpOutParams.AddParamDef("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")
        app.SIConnectShaderToCnxPoint("Sources.Materials.DefaultLib.Scene_Material.Nunce.east", 
                "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 :
                XSIFactory.RemoveShaderDef(oRemoveMe)
else :
        app.LogMessage("Parser name is already registered.")

関連項目

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