MCG 新特性

Autodesk 3ds Max Extension 1 中包含几项新功能和针对 Max Creation Graph 的改进。

MCG 动画控制器

您可以使用 MCG 创建自定义动画控制器,根据图形设置对象的可设置动画的参数。“输出”类别中有几个适用于各种控制器(例如:浮点、位置、旋转、变换及其他)的新节点。您还可使用新的隐式参数“变换控制器: 矩阵”获取父对象的值,以便在计算中使用。

成功保存并评估基于 MCG 的控制器之后,它们将自动显示在“轨迹视图”“运动”面板上相应的“指定控制器”窗口中。

系统提供了多个采样控制器。您可从“动画” > “MCG 控制器”菜单中应用这些控制器,或将其用作创建您自己的控制器示例。

时间相关的节点

系统提供了几个节点,有助于在图形中更轻松地获取和使用场景时间。它们包括:
  • “3ds Max 时间”类别中的所有节点。
  • “3ds Max 节点”类别中的 MeshFro NodeAtTime
  • “3ds Max 节点”类别中的 WorldTransformAtTime
  • “隐式参数”类别中的 time:int 2

模拟

现在,MCG 支持创建模拟。模拟可根据上一帧的值迭代更新。您可以为修改器、控制器和几何体创建模拟图形。

从模拟图形中创建的工具具有额外的“模拟”卷展栏。单击“重置模拟”后,缓存将会清除,且模拟将从开始重新运行到当前时间。此操作非常有用,例如,如果您已修改该工具的任何输入,且希望在当前帧上看到正确的结果。

有关详细信息,请参见创建模拟图形

Bullet Physics

“Bullet Physics”类别包含几个节点,支持根据 Bullet Phsics 引擎创建刚体模拟。您可以创建一个世界并添加对象和属性,然后在更新世界后,获得世界空间的变换。

MCG 1 DOF 旋转弹簧控制器MCG 3 DOF 旋转弹簧控制器这两个基于 MCG 的采样控制器是使用 Bullet Physics 节点构建的模拟示例。

有关如何使用 Bullet Physics 节点创建自己的模拟的概述,请参见构建 Bullet 刚体模拟

新参数类型

“参数”类别中的新节点可用于为图形提供新的数据类型:
  • 参数:IArray<INode> 指定场景中对象的阵列。

  • 参数 IArray<Single> 指定浮点值的阵列。
  • 参数 Vector3 指定 3D 向量。在图形中不再需要使用这 3 个单一参数并构建向量。

Vector4 支持

支持四维向量。除了用于构建 XYZW 和 RGBA 动画控制器的输出:Point4 控制器以外,Vector4 类别中还存在用于从单一值构建 Vector4 值、从 vector4 中获取单一值以及在 vector4 与四元数之间进行转换的节点。

创建特定类型的空阵列

“阵列”类别中的新 *EmptyArray 节点可用于创建各种类型的阵列(例如,矩阵或 Vector3),而无需向阵列添加特定项。

新操作符和复合

以下是 MCG 中可用的新操作符和复合的列表。

3ds Max 节点

  • GetRayToSurfaceIntersections(nodes, rayToSurfacePivot, rayOrigin, flipAxis, rayAxis)

  • MeshFromNodeAtTime(n, time)

  • NodePosAverage(values)

  • WeightedAveragePosition(Targets, Weights)

  • WorldTransformAtTime(node, time)

3ds Max 时间

  • 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()

Bullet Physics

  • 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)

几何体 - TriMesh

  • GetMapChannel(mesh, id)

  • GetMapChannelName(id)

几何体 - Vector4

  • 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)

隐式参数

  • 参考生成器:ReferenceMaker()

  • 时间:Int32()

  • 变换控制器:Matrix()

输入

  • 输入:cache()

  • 输入:Constraint()

  • 输入:RigidBodyDynamics()

  • 输入:World()

输出

  • 输出:Color Controller(value)

  • 输出:Float Controller(value)

  • 输出:Point3 Controller(value)

  • 输出:Point4 Controller(value)

  • 输出:Position Controller(value)

  • 输出:Rotation Controller(value)

  • 输出:Scale Controller(value)

  • 输出:Transform Controller(value)

参数

  • 参数:IArray<INode>()

  • 参数:IArray<Single>()

  • 参数:Vector3()

通过

  • 通过:cache(x)

  • 通过:Constraint(x)

  • 通过:RigidBodyDynamics(x)

  • 通过:World(x)

元组

  • NodeSingleTupleFirst(Tuple2)

  • NodeSingleTupleSecond(Tuple2)