v4.0
Adds a texture layer to one or more containers (a container can be either a shader or a material). The command does
some error checking, such as preventing layers from being added in a way that would introduce cycles between various containers,
and preventing adding layers to containers contained in different render trees.
A texture layer is an object which simplifies layering of shader effects on top of shaders and materials. Each layer has a set of
properties which describe its characteristics (such as color, mixing mode, scale factor) to specify how it will affect the
shader ports it drives. The order that layers appear under a container indicates the order the layering is applied, similar to the
way a "mix N colors" shader node works. Texture layer port objects (see AddTextureLayerPorts command) are owned by
layers, and are used to specify which shader ports the layer should affect.
oReturn = AddTextureLayer( [Object], [InputObjs], [Name], [After], [Reference] ); |
Returns the new TextureLayer object, if one was created.
Parameter | Type | Description |
---|---|---|
Object | String or object | Texture layer to add to the container(s). If not specified, then a new texture layer is created to add. |
InputObjs | String |
List of containers (shaders or materials) to which to add the texture layer. Note that all containers must currently be contained in a single render tree. Default Value: Current selection. |
Name | String | Name to use for the new layer. If an existing layer is being passed in, then this argument is ignored. |
After | Boolean |
True to insert the new texture layer after the reference layer. False to insert it before. If no reference layer, then True will add at the end of the container's list, False will add it at the start. Default Value: True |
Reference | String or object | Reference texture layer, to indicate where the newly-added layer should be located in the stack. The layer will be inserted adjacent to (before or after) the reference layer. If not specified, then the new layer will be added at the beginning or the end, depending on the value of the "After" argument. |
' ' This example creates two shaders in a simple render tree, and applies ' texture layers to them, illustrating inserting before/after, sharing layers ' between containers, and other fun things. ' In particular, it builds the following stacks of layers (in a slightly ' convoluted way, to show various features of the AddTextureLayer command)... ' ' Phong Fractal ' A A ' B D ' C E ' D ' option explicit dim oSph, oPhong, oFractal, oLyr(4) ' Build our shaders (a Phong and a Fractal), which will be the "texture ' layer containers" that will each be able to hold a stack of layers. NewScene , False set oSph = CreatePrim( "Sphere", "MeshSurface" ) set oPhong = SIApplyShader( "Phong", oSph ) set oFractal = BlendInPresetsInsp( "Fractal", , , True, siReplaceNoBlend, False, False, True ) ' Now create and add all the layers, as indicated above. ' Add 'D' to (the end of) the first container. set oLyr(3) = AddTextureLayer( , oPhong, "D", True ) ' Add 'A' to both containers at the start. set oLyr(0) = AddTextureLayer( , oPhong & "," & oFractal, "A", False ) ' Insert 'B' after 'A'. set oLyr(1) = AddTextureLayer( , oPhong, "B", True, oLyr(0) ) ' Insert 'C' before 'D'. set oLyr(2) = AddTextureLayer( , oPhong, "C", False, oLyr(3) ) ' Add 'E' to the end of the second container. set oLyr(4) = AddTextureLayer( , oFractal, "E", True ) ' Add existing layer 'D' to the second container, before 'E'. AddTextureLayer oLyr(3), oFractal, , False, oLyr(4) PrintTextureLayersInContainer oPhong PrintTextureLayersInContainer oFractal sub PrintTextureLayersInContainer( in_cont ) dim oStack, oItem, oStr oStr = "Texture Layers in Container: " & in_cont & vbCrLf set oStack = EnumElements( in_cont & ".TextureLayers" ) for each oItem in oStack oStr = oStr & " " & oItem.name & vbCrLf next logmessage oStr end sub ' ' The output from the example should look something like this: ' 'INFO : "Texture Layers in Container: sphere.Material.Phong ' A ' B ' C ' D ' 'INFO : "Texture Layers in Container: sphere.Material.Phong.Fractal ' A ' D ' E ' |