You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MaxScript技术问询:如何以全局模式将bone_1动画复制到bone_2

在3ds Max MaxScript中通过全局变换复制骨骼动画(Exposed World Transform)

要实现**全局模式(世界空间)**下将bone_1的动画复制到bone_2,需要使用Exposed_World_Transform控制器直接操作世界空间变换,替代你提供的本地相对变换复制逻辑。以下是具体实现:

核心思路

本地模式操作的是骨骼相对于父对象的变换控制器,而全局模式需要通过Exposed_World_Transform控制器直接访问世界空间的位置、旋转、缩放动画数据,确保动画是基于世界坐标系的绝对变换,适合保存/加载独立于骨骼层级的动画。

完整实现代码

-- 定义源骨骼和目标骨骼
sourceBone = $bone_1
targetBone = $bone_2

-- 确保目标骨骼的变换轨道使用Exposed World Transform控制器
-- 遍历位置、旋转、缩放三个变换组件
for transformType in #(transform.pos, transform.rot, transform.scale) do
(
    -- 获取目标骨骼对应变换组件的轨道
    targetTransformTrack = targetBone.baseObject[transformType]
    -- 创建并赋值Exposed World Transform控制器
    targetTransformTrack.controller = Exposed_World_Transform()
)

-- 复制源骨骼的全局变换动画到目标骨骼
-- 复制位置动画
targetBone.pos.controller = copy sourceBone.pos.controller
-- 复制旋转动画
targetBone.rot.controller = copy sourceBone.rot.controller
-- 复制缩放动画
targetBone.scale.controller = copy sourceBone.scale.controller

代码说明

  1. 控制器替换:先为目标骨骼的三个变换组件(位置、旋转、缩放)替换为Exposed_World_Transform控制器,确保后续操作的是世界空间变换。
  2. 动画复制:直接复制源骨骼的全局变换控制器(包含所有关键帧数据)到目标骨骼的对应轨道,copy关键字会创建控制器的副本,避免实例化导致的动画联动问题。

替代简化写法

如果源骨骼已经使用全局变换控制器,也可以直接遍历轨道批量复制:

sourceBone = $bone_1
targetBone = $bone_2

-- 初始化目标骨骼的全局变换控制器
for i = 1 to 3 do
(
    targetBone.baseObject[3][i].controller = Exposed_World_Transform()
)

-- 批量复制三个变换组件的动画
for i = 1 to 3 do
(
    targetBone.baseObject[3][i].controller = copy sourceBone.baseObject[3][i].controller
)

内容的提问来源于stack exchange,提问作者Opans Keyrist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:46:11