v4.0
Adds a TextureLayerPort
object (shader connection) to a texture layer. These indicate what
shader ports are being driven by the layer.
If the layer has ports added to it on containers it currently does
not belong to, it will be added to these containers (at the correct
place in the stack, maintaining layer order dependencies). For
example, suppose a render tree has both Phong and Lambert shaders,
and the Phong already has a layer "Dirt", but this layer is not
shared with Lambert. If we call TextureLayer.AddTextureLayerPort
to the target "Lambert.diffuse", then layer "Dirt" will be added to
the list of layers under Lambert, even though we did not explicitly
call Shader.AddSharedTextureLayer
on that shader.
oReturn = TextureLayer.AddTextureLayerPort( Target ); |
Parameter | Type | Description |
---|---|---|
Target | Parameter or String | Parameter on the target (must be a port on a shader or material) to which to add a texture layer port connection (that is, to be driven by this layer). Note that if a target is specified on a (valid) container which currently does not nest the layer, the layer will be added to that container. |
// This example shows creation of texture layer // ports, plus enumerating them. oRoot = ActiveProject.ActiveScene.Root; oSph = oRoot.AddGeometry( "Sphere", "MeshSurface" ); oMat = oSph.AddMaterial( "Phong" ); oPhong = oMat.Shaders(0); oParam = oPhong.parameters( "specular" ); oFractal = oParam.ConnectFromPreset( "Fractal", siTextureShaderFamily ); // Add a layer at the end. oLayer = oPhong.CreateTextureLayer( "DirtLayer" ); // Add some texture layer port connections on this layer. oPorts = new Array(3); oPorts[0] = oLayer.AddTextureLayerPort( oPhong.parameters( "ambient" ) ); oPorts[1] = oLayer.AddTextureLayerPort( oPhong.parameters( "diffuse" ) ); // The next line shows adding a port which is on a container that the layer // is currently not part of -- it will be added to that container. oPorts[2] = oLayer.AddTextureLayerPort( oFractal.parameters( "color1" ) ); Application.LogMessage( "Created " + oLayer.TextureLayerPorts.count + " ports." ); for ( i = 0; i < oLayer.TextureLayerPorts.count; i++ ) { oPort = oLayer.TextureLayerPorts(i); Application.LogMessage( (i+1) + ": " + oPort ); } // This example should log something like: //INFO : "Created 3 ports." //INFO : "1: sphere.Material.Phong.DirtLayer.ambient" //INFO : "2: sphere.Material.Phong.DirtLayer.diffuse" //INFO : "3: sphere.Material.Phong.DirtLayer.color1" |
' This example shows creation of texture layer ' ports, plus enumerating them. set oRoot = ActiveProject.ActiveScene.Root set oSph = oRoot.AddGeometry( "Sphere", "MeshSurface" ) set oMat = oSph.AddMaterial( "Phong" ) set oPhong = oMat.Shaders(0) set oParam = oPhong.parameters( "specular" ) set oFractal = oParam.ConnectFromPreset( "Fractal", siTextureShaderFamily ) ' Add a layer at the end. set oLayer = oPhong.CreateTextureLayer( "DirtLayer" ) ' Add some texture layer port connections on this layer. dim oPorts(2) set oPorts(0) = oLayer.AddTextureLayerPort( oPhong.parameters( "ambient" ) ) set oPorts(1) = oLayer.AddTextureLayerPort( oPhong.parameters( "diffuse" ) ) ' The next line shows adding a port which is on a container that the layer ' is currently not part of -- it will be added to that container. set oPorts(2) = oLayer.AddTextureLayerPort( oFractal.parameters( "color1" ) ) logmessage "Created " & oLayer.TextureLayerPorts.count & " ports." i = 1 for each oPort in oLayer.TextureLayerPorts logmessage i & ": " & oPort i = i + 1 next ' This example should log something like: 'INFO : "Created 3 ports." 'INFO : "1: sphere.Material.Phong.DirtLayer.ambient" 'INFO : "2: sphere.Material.Phong.DirtLayer.diffuse" 'INFO : "3: sphere.Material.Phong.DirtLayer.color1" |