The Data_Channel Modifier uses operators to build its operation stack. These operators all derive from the IDataChannelEngineClass, and are of three types: input, process, and output (although some input operators can be used as process operators). This topic covers the available operator classes.
Input operators query data from the mesh and create a channel to flow down the stack.
Colors the elements of an object based on the stack information, a map, soft selection or vertex colors. Output can be randomized based on hue, luminance and saturation.
Properties:
.inputOption : integer
The color data input, where:
.mapChannel : integer
The map channel, when inputOption
= 1.
.map : texturemap
The map, when inputOption
= 1.
.vertColorChannel : integer
The Vertex color channel, when inputOption
= 0.
.colorOption : integer
The color option, where
.useColors : Boolean
Indicates whether to apply colors to luminance.
.color1 : RGB color
The luminance color 0.
.color2 : RGB color
The luminance color 1.
.outputChannel : integer
The output VC channel.
.randomize : Boolean
Indicates whether to randomize the output.
.unused1 : float
.seed : integer
.HRand : Boolean
Indicates whether the randomizeHPercent value is used.
.SRand : Boolean
Indicates whether the randomizeSPercent value is used.
.LRand : Boolean
Indicates whether the randomizeLPercent value is used.
.randomizeHPercent : float
The Hue luminance value.
.randomizeSPercent : float
The Saturation luminance value.
.randomizeLPercent : float
The Lightness luminance value.
.useElementCenter : boolean
Indicates whether to use the element center when inputOption is 1 (Map).
Copies the geometry’s X, Y, or Z position to the stack to be processed.
.component (Component_Space) : integer
.min : float
The minimum value.
.max : float
The maximum value.
.normalize : Boolean
Indicates whether to normalize the values.
.space (XYZ_Space) : integer
The space dimension to use, where
.node : node
The node from which to take the component space.
Uses the local surface curvature of the mesh to define a float value.
.convex (Convex) : float
The Curvature convex value.
.flat (Flat) : float
The Curvature flat value.
.concave (Concave) : float
The Curvature concave value.
.scale (Scale) : float
The scale value applied to the convex, flat, and concave values.
.hardEdgesOnly (Hard_Only) : Boolean default: False
Indicates whether to compute hard edges only.
Uses the mesh's default pose to smooth the mesh when it is deformed while retaining the original detail of the mesh.
.strength : float default: 1.0
The strength value.
.iterations : integer default: 10
The number of iterations.
.pinBorders : Boolean default: True
Indicates whether to pin the borders.
.mask : boolean default: False
Indicates whether to mask with vertex colors.
.maskMapChannel : integer default: 2
The map channel to use, if mask is True.
.outputMode : integer default: 0
The deform setting, where:
Uses a map to distort the vertex value.
Uses a map to distort the vertex value.
.map (Distort) : texturemap
The map associated with the distort.
.amountBox (Amount) : float default: 1.0
The strength value applied to the distort.
.holdTex (Distort) : texturemap
Internal and renamed
.holdMat (Distort) : material
Internal and renamed
Adds edge data into the stack.
.input : integer
The Edge Input mode, where:
Adds face data to the stack.
.input : integer
Selects the edge input, where:
Uses MAXScript to manipulate a channel's values. Possible return values are float or point3.
.dataType : integer
The output data type, where:
.elementType : integer
The output element type, where:
.script : string
Gets or sets the MAXScript file associated with this operator.
Returns a float value based on the distance between a selected node and a mesh vertex or a mesh element.
.node : node
The node associated with the operator.
.minRange : float default: 1.0
The minimum Radius setting.
.minValue : float default: 1.0
The minimum value setting.
.maxRange : float default: 80.0
The maximum Radius setting.
.maxValue : float default: 0.0
The maximum range value.
.mode : integer
The Influence mode, where:
.hold (Hold_Frames) : integer
The hold time value.
.falloffCurve (Falloff_Curve) : maxObject
The curve controlling the weight falloff over time. This object is of type CurveControl
.
.radiusCurve (Radius_Curve) : maxObject
The curve controlling radius over time. This object is of type CurveControl
.
.strengthCurve (Strength_Curve) : maxObject
The curve controlling strength over time. This object is of type CurveControl
.
Uses the mesh’s deformation to compute squash and stretch to define a value. These values can be used to drive morph targets within the operator.
.mode : integer
The tension deform mode, where:
.enableDisplay : boolean
Not used.
.deformMesh : boolean
Indicates whether to deform the mesh.
.stretchColor (Stretch_Color) : color
Not used.
Stretch Adjustment Settings:
.stretch : float
The stretch value.
.stretchRange (Stretch_Range) : float
The stretch range
.stretchGrowShrink (Stretch_Grow_Shrink) : float
The stretch grow/shrink value.
Stretch Deform Settings:
.stretchPush (Stretch_Push) : float
The stretch deform push value.
.stretchRelax (Stretch_Relax) : integer
The stretch relax value.
.stretchUseMorph : boolean
Indicates whether the stretch deform uses a morph target.
.stretchTarget : node
The node representing the stretch target.
.stretchMask : boolean
Indicates whether to mask with vertex colors.
.stretchMapChannel : integer
The map channel to use for masking when stretchMask is True.
Squash Adjustment Settings:
.squashColor (Squash_Color) : color
Not used.
.squash : float
The squash amount.
.squashRange (Squash_Range) : float
The squash range amount.
.squashGrowShrink (Squash_Grow_Shrink) : float
The squash grow/shrink amount.
Squash Deform Settings:
.squashPush (Squash_Push) : float
The squash deform push amount.
.squashRelax (Squash_Relax) : integer
The squash relax value.
.squashUseMorph : boolean
Indicates whether to use a morph target, indicated by the squashTarget.
.squashTarget : node
The squash target, used when squashUseMorph is True.
.squashMask : boolean
Indicates whether to mask with vertex colors.
.squashMapChannel : integer
The map channel to use if squashMask is true.
Channel Output Settings:
.outputSquash : boolean
Indicates whether to output the squash value.
.outputStretch : boolean
Indicates whether to output the stretch value.
Uses channel information from the data channel’s operator stack, soft selection or vertex color to transform the elements’ position, rotation or scale.
.inputChannel : integer default 0
Gets or sets the input channel, where:
.transformType : integer default: 3
The transform type, where:
Offsets Settings
.XEnable : boolean
.YEnable : boolean
.ZEnable : boolean
Indicates whether the x, y, or z offsets are enabled.
.xoffset1 (XOffset) : float
.yoffset1 (YOffset) : float
.zoffset1 (ZOffset) : float
The minimum x, y or z offset.
.xoffset2 (XOffset) : float
.yoffset2 (YOffset) : float
.zoffset2 (ZOffset) : float
The maximum x, y, or z offset.
Point at Node Settings
.pointAtNode : boolean
Indicates whether to point at a node.
.pointNode : node
The node to point to, if pointAtNode
is true.
.axisMode : integer
The axis mode, where:
.pointElements : boolean
Indicates whether to point at individual elements.
Randomize Settings
.randomize : boolean
Indicates whether to randomize the data.
.randomize1 (RandomizePercent) : float
.randomize2 (RandomizePercent) : float
The minimum and maximum randomize settings.
.seed : integer
The randomization seed.
.phase : float
Controls the speed of the animation of the randomization function.
Allows you to combine an external vector with the stack data.
.space : integer
.dir : integer
.node : node
.x : float
.y : float
.z : float
Uses the mesh's velocity to return a Point3, where the (x,y,z) equates to the motion of the three axes.
.timeOffset (Time_Offset) : integer
.worldSpace (World_Space) : boolean
.noTranslation (No_Translation) : boolean
Uses channel information from the mesh as an input. Channels include, existing map channels, average normal, vertex position and vertex selection values.
.input (Channel) : integer
The input type, where:
.internal (Channel_Num) : integer
Internal use only, do no use.
.XYZ (Sub_Channel_Num) : integer
Indicates the axes to include in the data, where:
.deprecated (Name) : string
Deprecated, do not use.
Copies the geometry's position on to the stack to be processed.
.min : float
.max : float
The minimum and maximum values to use.
.normalize : boolean
Indicates whether to normalize the data.
.space (XYZ_Space) : integer
The reference coordinate system to use, where:
.node : node
The node to use for the coordinate system, when space = 2
.
Process operators modify data by applying operations to the data flowing through the stack.
Limits the value of channel flowing through the stack.
.clampMin (Min) : float
.clampMax (Max) : float
Minimum and maximum clamp values.
Copies the data from one sub object type to another.
.subObject : integer
The sub object type to convert to, which corresponds to the selected item position in the Convert To dropdown in the UI, and which depends on the incoming data type. For example, when the incoming data is from the vertex channel, 0 = Edge and 1 = Face.
.vertex : integer
When the Convert To target is vertex, this corresponds to the Vertex Channel Type selection, where:
.mapChan : integer
When vertex=2
(Map), this indicates the map channel.
Remaps the value of data in the channel based on a curve.
.curve : maxObject
The curve object.
.normalize (Normalize) : boolean Engine_Decay (const MAXClass): decay
Indicates whether the curve is normalized.
Causes the changes in a channel to persist or decay over time.
Properties:
.decay : float
The decay per frame.
.samples : integer
The number of record samples.
.smooth : boolean
Indicates whether to apply smoothing.
.iterations : integer
The number of smoothing iterations, if smooth=true
.
.deprecated (Max_Crossing) : integer
Deprecated, do not use.
.curve : maxObject
The custom decay curve.
.useCurve (Use_Curve) : boolean
Indicates whether to apply a custom decay curve.
.resetType : integer
The Cache reset type where:
.resetFrame (Reset_Frame) : integer
The reset frame, when resetType = 0, "Use Frame For Reset Data".
Interfaces:
Decay
Provides access to the Reset()
and Record()
methods.
Modifies the data based on geometry so that all vertices in an element share the same value.
.mode : integer
The data source, where:
Inverts the values in the data channel.
.invert (Invert) : boolean
Indicates whether to perform an inversion.
NEW in 3ds Max 2024.2 Update: This operator provides a way to manipulate mesh channel data using MAXScript, and is useful for performing manipulations not provided by other operators.
Overview
Whenever the Data Channel modifier is processing an object, the MAXScript Process operator will have its "Process" function called with arguments reflecting the data available for processing as well as the desired output options. The function format is:
on Process theNode theMesh inputElementType inputIndexChannel inputDataType inputData outputElementType outputIndexChannel outputDataType outputArray theTime do ( return 1 –- 1 == success; 0 = failure )
The arguments are:
theNode
: The node containing the object being processed
theMesh
: The poly mesh being processed
inputElementType
: The element type being processed. This is determined by the preceding operator’s output. The types are:
1: Vertex 2: Edge 3: Face 4: None 5: Don’t Care
inputIndexChannel
: The index channel of the data being processed. This is determined by the preceding operator’s output. The types are:
1: None 2: Position 3: Normal 4: Map Channel
inputDataType
: The data type of the data being processed. This is determined by the preceding operator’s output. The types are:
1: Integer 2: Float 3: Point3 4: Matrix3 5: Integer Array 6: Float Array 7: Point3 Array 8: Matrix3 Array
inputData
: The input data, matching the inputDataType, also determined by the preceding operator’s output. For example, if the inputDataType is 7, the inputData will be a Point3 array.
outputElementType
: The element type of the output data to be produced by the script. This is determined by the "Output" group’s "Element Type" selection in the user interface, and the values are the same as for the inputElementType, above.
outputIndexChannel
: The index channel of the output data to be produced by the script. This is determined by the "Output" group’s "Index Channel" selection in the user interface, and the values are the same as for the inputIndexChannel, above.
outputDataType
: The data type for the output to be produced by the script. . This is determined by the "Output" group’s "Data Type" selection in the user interface, and the values are the same as for the inputDataType, above.
outputArray
: The array containing the output data. The array type must match the outputDataType and should be the appropriate length, based on the inputElementType (for example, if the element type is Vertex, the array should contain a value for each vertex in the mesh.)
theTime
: The time at which the evaluation is happening.
Default Script
The default script contained in the operator provides a simple example of processing. To try it out:create a Box and apply a Data Channel Modifier.
In the Data Channel modifier UI, add the following operators, in this order, then close the Add Operators dialog:
Select the Maxscript Process operator and set the Output options to the following:
Now move the time slider back and forth. You will see the box moving along the X axis, with the X values increasing and decreasing in sync with the time slider position.
If you open the Listener, you will see some output from the script, which is printing the various values.
Properties
.script : string
Gets/sets the script string. A default script is provided that processes channel data as an example.
.outputElementType : integer
The type of data the script should output, where:
.outputDataType : integer
The type of data the script will produce, where:
.outputIndexChannel : integer
The channel for the output data, if any, where:
Normalizes the values in a channel to a range.
.normalizeMin (Min) : float
.normalizeMax (Max) : float
The minimum and maximum values to normalize to.
.rangeOverride (Use_Range) : boolean
Indicates whether to limit normalization to values in a range.
.rangeMin (Min_Range) : float
.rangeMax (Max_Range) : float
The range minimum and maximum to limit normalization to, if rangeOverride is true.
Converts a Point3 channel to a float channel.
.floatType (Point3_To_Float) : integer
The type of float to convert to, where:
Multiplies a channel by a value.
.scale : float
The factor by which to scale the channel data.
Smooths the values of a channel based on their neighbor's value.
.iteration : integer
The number of smoothing iterations.
.amount : float
The smoothing amount to apply.
.deprecated (Geom) : boolean
Deprecated parameter, do not use.
Output operators output the stack data back to the mesh.
Outputs the stack data to a specific geometry channel in the mesh.
.output (Channel) : integer
The output data type, where:
.channelNum (Channel_Num) : integer
When the output type is Map Channel or VData, this is the Channel Number.
.XYZ (Sub_Map_Channel) : integer
The X, Y, or Z setting, when the output type is Position, Vertex Color, Map Channel, or Normals, where:
.deprecated (Channel_Name) : string
Deprecated parameter, do not use.
.replace (Replace_Type) : integer
The replacement method, where:
Outputs the stack face data to the mesh.
.output : integer
The data type to output where:
.type : integer
The type of output operation, where:
Outputs the stack edge data to the mesh.
.output : integer
The data type to output where:
.type : integer
The type of output operation, where: