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