Autodesk 3ds Max Extension 1 includes several new features and improvements for Max Creation Graph.
You can use MCG to create custom animation controllers to set an object's animatable parameters based on a graph. There are new nodes in the Outputs category for various controller types, such as Float, Position, Rotation, Transform, and others. You can also use the new implicit parameter Transform Controller: Matrix to get the value of the object's parent to use in your calculations.
After MCG-based controllers have been successfully saved and evaluated, they automatically appear in the appropriate Assign Controller window in the Track View and Motion panel.
Several sample controllers are available. You can apply them from the
menu, or use them as examples for creating your own controllers.MCG now lets you create simulations that update iteratively based on the values at the previous frame. You can create simulation graphs for modifiers, controllers, and geometries.
Tools created from simulation graphs have an extra Simulation rollout. When you click Reset Simulation, the caches are cleared and the simulation is rerun from the start to the current time. This is useful, for example, if you have modified the any of the tool's inputs and want to see the correct results on the current frame.
For more information, see Creating a Simulation Graph.
The Bullet Physics category contains nodes that let you create rigid-body simulations based on the Bullet Physics engine. You can create a world, add objects and properties to it, and then get their world-space transforms after the world has been updated.
A couple of the sample MCG-based controllers, MCG 1 DOF Rotation Spring Controller and MCG 3 DOF Rotation Spring Controller, are examples of simulations built using the Bullet Physics nodes.
For an outline of how to create your own simulations using the Bullet Physics nodes, see Building a Bullet Rigid Body Simulation.
4D vectors are supported. In addition to Output: Point4 Controller for building XYZW and RGBA animation controllers, there are nodes in the Vector4 category for building vector4 values from singles, for getting single values from vector4s, and for converting between vector4s and quaternions.
The new *EmptyArray nodes in the Arrays category let you create arrays of various types, such as Matrix or Vector3, without the need to add a specific item to the array.
Here is a list of the new operators and compounds available in MCG.
GetRayToSurfaceIntersections(nodes, rayToSurfacePivot, rayOrigin, flipAxis, rayAxis)
MeshFromNodeAtTime(n, time)
NodePosAverage(values)
WeightedAveragePosition(Targets, Weights)
WorldTransformAtTime(node, time)
AnimationPlaybackEnd()
AnimationStartTime()
FramesToSeconds(frames)
FramesToTicks(frames)
SecondsToFrames(seconds)
SecondsToTicks(seconds)
TicksToFrames(ticks)
TicksToSeconds(ticks)
BitmapEmptyArray()
BooleanEmptyArray()
BoundingBoxEmptyArray()
BoundingFrustumEmptyArray()
BoundingSphereEmptyArray()
ConstraintEmptyArray()
EdgeEmptyArray()
Face3EmptyArray()
Face4EmptyArray()
INodeEmptyArray()
Int32EmptyArray()
LineEmptyArray()
MapChannelEmptyArray()
MatrixEmptyArray()
PlaneEmptyArray()
QuadMeshEmptyArray()
QuaternionEmptyArray()
RandomEmptyArray()
RayEmptyArray()
RayTraceIntersectionEmptyArray()
RayTraceSceneEmptyArray()
RectangleEmptyArray()
RigidBodyDynamicsEmptyArray()
SingleEmptyArray()
StringEmptyArray()
TexmapEmptyArray()
TriMeshEmptyArray()
Vector3EmptyArray()
WorldEmptyArray()
AddBulletObject(world, worldObject)
AddConstraint(world, constraint)
AddRigidBody(world, rigidBody)
CreateGeneric6DofConstraint(rigidBody1, frame1, rigidBody2, frame2, rotationOrder)
CreatePoint2PointConstraint(rigidBody1, pivot1, rigidBody2, pivot2, tau, damping)
CreatePointConstraint(rigidBody, pivot, tau, damping)
CreateRigidBody(xform, offset, convexHull, rigidBodyDynamics, localInertia, isKinematic)
CreateRigidBodyDynamics(mass, friction, rollingFriction, restitution, linearDamping, angularDamping)
CreateWorld(initialTime)
GetCenterOfMass(convexHull)
GetNumberOfRigidBodies(world)
GetRigidBodyByIndex(world, index)
GetRigidBodyConvexHull(rb)
GetRigidBodyWorldTransform(world, rb)
GetSimulationTime(world)
IsRigidBodyKinematic(rb)
ResetWorld(world)
SetGeneric6DofConstraintAngularDynamics(constraint, damping, bounce, stiffness)
SetGeneric6DofConstraintAngularLimit(constraint, lower, upper, reversed)
SetGeneric6DofConstraintLinearDynamics(constraint, damping, bounce, stiffness)
SetGeneric6DofConstraintLinearLimit(constraint, lower, upper)
AddConstraint(world, constraint)
SetGravity(world, gravity)
SetRigidBodyVelocity(rb, linear, angular)
SetRigidBodyWorldTransform(world, rb, m)
SetSimulationTime(world, time)
StepSimulation(world, step)
TraceRigidBody(world, rb)
CreateSimulation(constraints, rigidBodies, startTime, gravity, active, preUpdateFn, currentTime)
FilterAndSortRayIntersections(intersections, rays)
IfSingleGreaterThanZero(Value, True, False)
LimitSingle(Value, LimitOne, LimitTwo)
SwitchOneTwoThree(switchValue, valueIfOne, valueIfTwo, valueIfThree)
CanDecompose(matrix)
ConstructBasisFromUpFwd(upAxis, targetUp, forwardAxis, targetForward)
Determinant(matrix)
FlipMatrixBasis(matrix)
GetMatrixRotation(matrix)
GetMatrixScaling(matrix)
SetMatrixFrom3Rows(Row1, Row2, Row3)
RayFromMatrices(origin, destination)
RayFromMatrixAxis(origin, flipAxis, axis)
RayIntersectsBox(ray, box)
RayIntersectsPlane(ray, plane)
RayIntersectsSphere(ray, sphere)
GetMapChannel(mesh, id)
GetMapChannelName(id)
QuaternionToVector4(q)
Vector4(x, y, z, w)
Vector4ToQuaternion(v)
Vector4W(v)
Vector4X(v)
Vector4Y(v)
Vector4Z(v)
NormalizedCross(v1, v2)
NormalizedCrossWithFlip(Flip, VecOptFlipped, Vec2)
PerpToVecInPlane2ndVec(Flip, Vec, Vec2FirstCross)
VecNegateIf(Condition, Vec)
Reference Maker: ReferenceMaker()
Time: Int32()
Transform Controller: Matrix()
Input: cache()
Input: Constraint()
Input: RigidBodyDynamics()
Input: World()
Output: Color Controller(value)
Output: Float Controller(value)
Output: Point3 Controller(value)
Output: Point4 Controller(value)
Output: Position Controller(value)
Output: Rotation Controller(value)
Output: Scale Controller(value)
Output: Transform Controller(value)
Parameter: IArray<INode>()
Parameter: IArray<Single>()
Parameter: Vector3()
Pass-through: cache(x)
Pass-through: Constraint(x)
Pass-through: RigidBodyDynamics(x)
Pass-through: World(x)
NodeSingleTupleFirst(Tuple2)
NodeSingleTupleSecond(Tuple2)