Object Hierarchy | 関連する C++クラス:ShaderDef
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 | |
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") |
//
// 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());
}
}
} |