想象一间木偶剧场:平时舞台上那位舞者,每个抬手、转身都是由操偶师手中的提线精确牵引的,动作优雅却永远带着“剧本味”。可当剧情演到“主角被重重一击”时,最震撼的一幕不是预演好的跌倒动作,而是操偶师干脆利落地剪断所有提线——木偶瞬间从“被操控”变成“自由落体”,重力抓住它的躯干,关节的铰链互相牵制,它不再表演,而是真实地塌落、翻滚,最后瘫倒在地。每一次倒下都独一无二,因为物理没有剧本。 游戏里的布娃娃系统(Ragdoll)就是这位剪线师。平常角色由骨骼动画的“提线”驱动,受击后切换为物理引擎接管,让刚体、碰撞体和关节约束接管每一根骨头,产生真实的瘫倒效果。本文将带你从提线木偶的视角,看懂布娃娃系统的组成、约束配置、动画物理混合、启动时机控制与常见问题排查。
布娃娃系统是游戏战斗反馈与死亡演出的基石,掌握它意味着你能让角色“倒下得真实”,也是进入游戏物理与动画系统岗位的必备技能。
目录
可视化演示
可视化展示游戏布娃娃系统骨骼约束结构、动画到物理切换混合过程与受击坍塌动力学,交互切换观察刚体驱动与穿模预防。
本节配有交互动效(进入视口后自动加载,约 3KB)。
骨骼刚体约束结构 每根骨骼绑定刚体并通过关节约束连接 铰链约束限制旋转自由度防穿模 DOF = 6 - constraint 点击下一步查看动画物理混合
布娃娃系统概述——木偶的双重身份
想象提线木偶的两种状态:表演时被操偶师的线牵引,每一个关节都服从剧本;倒下时线被剪断,关节开始服从重力与碰撞。一个成熟角色动画系统也需要这两种身份——平时由骨骼动画“提线”驱动,受击时切换到由物理引擎“自由坠落”驱动,这个切换系统就是布娃娃系统。
布娃娃系统的核心思路并不复杂:把角色骨骼的每个关节段绑定为物理世界中的刚体,用关节约束把相邻刚体连接起来,再让碰撞体包裹住皮肤。受击事件发生后,物理引擎接管这些刚体的运动,骨骼跟随刚体位置实时更新,于是角色像被剪断线的木偶一样“瘫倒”。
它的价值在于真实感和交互性。传统死亡动画是固定的几段剪辑,玩家看多了会觉得“假”;而布娃娃每次倒下的姿态由当时的受力、地形和碰撞决定,充满偶然性。在开放世界、动作游戏、甚至AI训练模拟环境中,这套系统被广泛用于受击反馈、死亡演出和NPC跌倒。
决定何时启用布娃娃,本质上是一个状态机判断——是否被击中,是否还活着。
把木偶剧场比作游戏世界,操偶师就是状态机——他只在“角色该倒下”的剧情节点剪线,其他时候牢牢握住提线。理解了这个开关,就能继续追问:木偶的身体用什么材料做?关节的铰链怎么装?
- 布娃娃启用标志 R_on它表示布娃娃物理系统的开关状态,为 1 时物理接管骨骼。
- 受击标志 hithit=1 表示角色在本帧受到了足以产生硬直的攻击,这是剪线的“动手信号”。
- 存活条件 hp>0血量必须大于 0,因为倒地死亡场景才需要完全瘫软的布娃娃;存活时通常只做短暂受击反馈。
- 逻辑与运算两个条件同时满足才启动,避免“死亡后还在播放布娃娃”或“存活时被误触发”的混乱状态。
刚体与碰撞体——躯干与皮肤的材质
剧场里要做一个真实的木偶,首先得选木材:头部用轻木、躯干用硬木、四肢用带弹性的柳木。材料决定它倒下时的重心表现。游戏里的“材料”就是刚体(Rigid Body)——一个不可变形、只受力和力矩影响的物理对象,承载着质量、速度、角速度等属性。
刚体还要有“皮肤”——碰撞体(Collider),用来和地面、墙壁、其他角色发生接触。碰撞体通常不是精细的网格,而是用胶囊体、球体或长方体简化代替:一个胶囊包住大腿,一个球放在头部位置,一个盒子罩住躯干。粗糙的碰撞体计算快,又能保证方向正确的碰撞。
质量分布是决定瘫倒姿态的关键。头部质量大,角色被击中后头先着地;腿部质量集中,则容易“上重下轻”地翻转倒地。阻尼(Damping)则模拟关节摩擦和空气阻力:阻尼太低,木偶落地后像弹簧一样弹跳不止;阻尼适中,倒地后很快趋于安静。刚体的初始状态通常设为“沉睡”(Sleeping),只有被冲击激活后才开始计算,节省CPU。
木偶选好了木材和布料,接下来要安装关键部件——决定它能往哪个方向弯的铰链。把铰链装错了,木偶倒下时就会像拧麻花一样别扭。
- 质心 C整具布娃娃的平衡点,物理上所有重力可以看作集中作用在这个点上。
- 每个刚体的质量 m_i第 i 个骨骼段对应的刚体质量,质量越大对质心位置影响越大。
- 刚体的位置 r_i每个刚体的重心坐标,通常取碰撞体的几何中心。
- 质量加权平均分子把每个位置按质量加权求和,分母是总质量,相当于“重量越大的部分在平均中话语权越大”。
关节约束配置——铰链的限度
木偶的肘关节只能在一个平面内弯曲,肩关节却能像球一样多方向旋转。真实感来自“限度”:关节约束(Constraint)就是连接两个刚体的虚拟铰链,它规定了两段骨骼之间允许的相对运动。游戏物理引擎中最常用的是两类:铰链约束(Hinge)允许绕一个固定轴旋转,用于肘部、膝盖;球窝约束(Ball-in-Socket)允许任意方向旋转但限制最大锥角,用于肩部、髋部。
如果约束只是“连上”而不限制范围,木偶的手臂就会像面条一样扭成麻花。因此每个约束都要配置角度限制:设定关节在某个轴上的最小角度和最大角度,例如膝盖只能从 0° 弯曲到 150°,超出的角度由物理引擎强行修正回来。
约束求解依靠求解器(Solver)迭代完成。每一帧物理引擎多次迭代调整刚体位置,把超出限制的距离和角度“拉回”合法范围。迭代次数太少,约束会变软,肢体容易穿模;迭代次数太多,CPU开销上升。实践中 3~10 次迭代通常是稳定与性能的平衡点。配合适当的刚度和阻尼参数,可以消除“橡皮筋式”的高频抖动。
铰链装好后,还要学会“重新提起线”——让木偶从瘫软状态自然过渡回站立,这段平滑恢复的关键就是动画物理混合。
- 角度上下限每个关节在配置时设定的最小、最大允许角度,比如膝盖可弯到 0°~150°。
- 骨骼方向向量 u 与 v相邻两段骨骼各自的朝向单位方向,由关节两端刚体的位置差得到。
- 夹角计算用向量点积除以模长得到余弦值,再取反余弦得到当前关节实际角度。
- 限制判定若实际角度超出上下限,求解器把角度夹回边界,并产生对应的修正力。
动画物理混合——重新系上提线
木偶倒下后剧情需要它重新站起,操偶师不会突然把线猛拽回去——那样木偶会“啪”地弹起,观众立刻出戏。正确做法是慢慢收紧提线,让木偶从完全瘫软的状态一点点回归受控。游戏里对应的是动画物理混合(Animation-Physics Blending)。
混合的原理是最终姿态由动画姿态和物理姿态按权重线性插值得到。权重 α(alpha)等于 0 时完全使用骨骼动画姿态,等于 1 时完全使用物理计算姿态;中间值则让两条“线”共同作用。从动画切到物理时,α 从 0 渐变为 1,角色被击中的一瞬身体先跟着动画,随后重心逐渐被物理接管,过渡自然。
反向切换同样需要技巧。角色倒地后要起身,物理姿态和待机动画差异很大,直接切回动画会跳帧。这时要先做关键帧回闪——寻找当前物理姿态在动画序列中最近的匹配帧,从那里继续播放,避免瞬间弹跳。状态切换配合平滑曲线(例如 ease-in-out 曲线),让 α 的增速先慢后快再慢,观众几乎察觉不到控制权在交接。
重新系线不是一蹴而就的,而是要选准“松手的那一刻”。启动时机控制就是操偶师剪线的艺术。
- 最终骨骼位置 P_final渲染时实际使用的骨骼节点位置,它综合了两种驱动来源。
- 动画位置 P_anim由关键帧动画算出的骨骼位置,代表“提线的剧本”。
- 物理位置 P_phys由刚体模拟算出的骨骼位置,代表“自由落体的真实”。
- 混合权重 αα=0 时完全用动画,α=1 时完全用物理,中间值让两个来源各占一定比例。
启动时机控制——松手的艺术
老道的操偶师剪线不会一刀全断,而是先松主绳、再放辅助绳,防止木偶因为突然失去全部拉力而“炸开”。布娃娃系统同样需要精心的启动时机:在受击事件发生的那一刻,物理引擎不应该立刻接管全部刚体,否则累积的动画速度会在瞬间释放,角色像被炸弹炸飞一样弹射出去。
正确的做法是延迟启用:受击回调触发后,先让角色播放一小段受击动画,等待约 30~100 毫秒,再把布娃娃刚体从沉睡状态唤醒。唤醒时给刚体施加一个与受击方向匹配的最小冲量,让身体顺着打击方向自然倒下,而不是垂直砸向地面。
布娃娃也有“禁区”:角色存活期间不能开启,否则玩家在地图上走路都会随机跌倒;NPC对话、载具驾驶、爬梯等场景也要禁用物理接管。同时要注册事件回调——当布娃娃与地面发生碰撞时,回调函数触发落地音效、灰尘粒子或镜头震动,这些反馈让瘫倒更有“重量感”。
松手时机对了,木偶倒得心甘情愿;可一旦没调好,后台就会事故频发:手臂穿进胸腔、关节抖成筛子。下一节进入剧场检修时间。
- 启动时刻 t_hit受击事件发生的帧时间,剪线的起点。
- 过渡总时长 T从完全动画到完全物理所经历的时间,通常取 0.1~0.5 秒,T 越大过渡越柔和。
- 归一化时间 τ把当前时间映射到 0~1 区间,τ=0 表示刚受击,τ=1 表示过渡完成。
- S 形平滑函数用三次多项式把线性 τ 映射为 S 形曲线,两端斜率接近零,中间近似线性,实现无跳变过渡。
常见问题排查——剧场故障检修
木偶剧场最常报告的两类故障是“穿模”和“抖动”。穿模是指肢体互相穿透或陷入地面,如同木偶的手臂插进了肚子里;抖动是指静止状态下关节高频颤动,像木偶在筛糠。这两类问题本质上是物理约束没有被求解到位。
穿模的原因通常是约束强度不足:求解器迭代次数太少,约束每帧只能部分拉回偏差;或碰撞体初始状态相互嵌套,物理引擎一启动就让刚体互相推开。解决思路是提高迭代次数、增大约束刚度,并在布娃娃启动前检查碰撞体是否和场景物体重叠。抖动则常源于迭代不足、时间步长过大或阻尼参数过低,导致约束在目标位置附近来回震荡;应合理提高迭代次数、采用固定时间步长,并给关节增加阻尼。
性能优化同样是布娃娃落地成真的前提。每个刚体都会消耗CPU,一具布娃娃包含十几个刚体,数量乘上同屏人数开销惊人。工程实践上要限制刚体数量,用胶囊体简化肢体,对远距离的NPC关闭布娃娃物理并退化回普通死亡动画。关键参数(质量、约束角度、混合时长)应配置化而非写死在代码里,方便策划和技术美术快速调参。
检修完毕的木偶剧场日复一日地演出。布娃娃系统从“剪线”到“重新系线”的完整闭环,正是游戏物理与动画协作的缩影:用物理模拟真实,用动画保留表演,用时机制造掌控感。
- 约束数量 N_c当前布娃娃系统中所有关节约束的总数,每个约束连接一对刚体。
- 两端刚体位置 p_a 与 p_b第 i 个约束连接的两个刚体的当前位置向量。
- 理想距离 d_i约束被创建时两端刚体之间的初始距离,即骨骼段的原始长度。
- 相对误差几何平均把每个约束的实际长度偏差除以理想长度,再平方求和,最终误差越小表示关节保持得越稳固。
AI 应用场景
游戏打击反馈系统
阶段:游戏引擎动画状态机设计(受击识别 → 状态切换 → 物理模拟)
解决的问题:传统受击反馈只能播放固定硬直动画,打多了显得机械。布娃娃系统让每次受击都根据打击方向、力度和场景障碍物产生不同倒地姿态,极大提升打击感与沉浸感。
具体案例:在一款动作手游中,玩家用重击将敌人击飞,敌人撞到墙壁后触发布娃娃物理,身体顺着墙面滑落并卡在墙角。状态机先播放 80ms 受击动画,再切换布娃娃,混合过渡时长 0.3 秒,落地瞬间通过碰撞回调触发尘土粒子特效。
开放世界NPC死亡演出
阶段:物理参数配置与调优(质量分布、关节限制、性能LOD)
解决的问题:开放世界中玩家可从任意角度攻击NPC,预制死亡动画无法覆盖所有情形。布娃娃系统按物理规则生成倒地轨迹,并配合地形碰撞,让NPC在台阶、山坡、水边都呈现合理的倒地效果。
具体案例:某开放世界项目为NPC配置了胶囊体碰撞和锥形约束,头部刚体质量设为身体的1.5倍以保证“头重脚轻”的倒地自然感;针对同屏20个NPC的极端场景,距离玩家30米外的NPC自动关闭布娃娃物理并切换为简化死亡动画。
程序化动作生成辅助
阶段:动画数据生成与混合(动画回合物理权重调节)
解决的问题:训练AI代理执行“受击→倒地→起身”连贯动作需要海量样本,手工采集成本极高。布娃娃系统的动画物理混合可以作为数据生成器:自动生成大量不同方向、不同力度的倒地轨迹,再反向抽取关键姿态用于动画训练。
具体案例:某强化学习项目利用布娃娃系统生成 10 万条跌到轨迹,将混合权重 α 按不同时间曲线采样,得到丰富多样的动作样本,替代人工动作捕捉。
Python 演示
"""2D 布娃娃模拟 - Y形木偶的剪线与混合"""import mathimport random GRAVITY = 8.0 # 重力加速度(单位/秒^2)DAMPING = 0.99 # 阻尼系数,模拟关节摩擦ITERATIONS = 4 # 约束求解迭代次数GROUND_Y = 4.0 # 地面高度(物理坐标 y 向下为正)DT = 1.0 / 60.0 # 固定时间步长 class Point: def __init__(self, x, y): self.x = x self.y = y self.px = x self.py = y class Constraint: def __init__(self, a, b, rest): self.a = a # 刚体 A 的索引 self.b = b # 刚体 B 的索引 self.rest = rest # 约束理想距离 def init_ragdoll(): """初始化 Y 形木偶:头在上,躯干居中,双腿在下""" pts = [ Point(0.0, -2.6), # 头 Point(0.0, 0.0), # 躯干 Point(-1.7, 1.5), # 左腿 Point(1.7, 1.5), # 右腿 ] cons = [ Constraint(1, 0, 2.6), Constraint(1, 2, 2.3), Constraint(1, 3, 2.3), ] return pts, cons def simulate(pts, cons, dt): """Verlet 积分 + 距离约束迭代求解 + 地面碰撞""" for p in pts: vx = (p.x - p.px) * DAMPING vy = (p.y - p.py) * DAMPING p.px, p.py = p.x, p.y p.x += vx p.y += vy + GRAVITY * dt * dt for _ in range(ITERATIONS): for c in cons: a, b = pts[c.a], pts[c.b] dx, dy = b.x - a.x, b.y - a.y dist = math.hypot(dx, dy) or 1e-6 diff = (dist - c.rest) / dist a.x += dx * diff * 0.5 a.y += dy * diff * 0.5 b.x -= dx * diff * 0.5 b.y -= dy * diff * 0.5 for p in pts: if p.y > GROUND_Y: p.y = GROUND_Y p.py = p.y def anim_pose(pts, t): """提线模式动画姿态:木偶在操偶师手中左右摇摆""" angle = math.sin(t * 1.5) * 0.6 return [ (math.sin(angle) * 2.6, -math.cos(angle) * 2.6), (0.0, 0.0), (-math.cos(angle) * 1.7, math.sin(angle) * 1.7 + 1.5), (math.cos(angle) * 1.7, -math.sin(angle) * 1.7 + 1.5), ] def blend(anim_list, phys_list, alpha): """按混合权重 alpha 插值动画姿态与物理姿态""" return [ (ax + (px - ax) * alpha, ay + (py - ay) * alpha) for (ax, ay), (px, py) in zip(anim_list, phys_list) ] def run(): pts, cons = init_ragdoll() mode = "anim" alpha = 0.0 t = 0.0 for frame in range(150): if frame == 30: mode = "phys" for p in pts: p.px = p.x + random.uniform(-0.4, 0.4) p.py = p.y + random.uniform(-0.2, 0.2) if mode == "anim": alpha = 0.0 else: alpha = min(alpha + 0.02, 1.0) simulate(pts, cons, DT) t += DT if frame % 30 == 0: ap = anim_pose(pts, t) fp = blend(ap, [(p.x, p.y) for p in pts], alpha) print("frame %3d | alpha=%.2f | head=(%.2f, %.2f)" % (frame, alpha, fp[0][0], fp[0][1])) if __name__ == "__main__": run()
init_ragdoll()创建 4 个质点和 3 条距离约束,对应木偶的头、躯干、双腿和关节;这是布娃娃的“刚体+约束”骨架。simulate(pts, cons, dt)Verlet 积分更新每个质点位置,内部循环迭代求解距离约束,把偏离的关节拉回理想长度。DAMPING = 0.99每帧把速度衰减 1%,模拟关节摩擦和空气阻力,防止木偶落地后无限弹跳。for _ in range(ITERATIONS)约束求解迭代 4 次,每次迭代都减小关节长度误差,迭代越多约束越“硬”、越不易穿模。anim_pose(pts, t)用正弦函数计算提线模式下的摇摆姿态,代表骨骼动画的“剧本”位置。blend(anim_list, phys_list, alpha)按 α 权重对动画姿态和物理姿态做线性插值,α=0 完全动画、α=1 完全物理。if frame == 30: mode = "phys"在第 30 帧“剪线”,并给每个质点施加微小随机速度扰动,模拟受击冲击。
常见误区
误区只要给模型挂上 Rigidbody 组件,角色被打就会自动瘫倒,布娃娃系统就是这么简单。
正解只加刚体,骨骼之间没有关节约束,肢体就会像散架的木偶零件一样各自飞散,毫无真实感。还必须有碰撞体包裹每一段肢体,并配置关节约束把相邻刚体连接起来——刚体、碰撞体、约束三者缺一不可,如同木偶要有躯干、皮肤和铰链才能倒下得完整。
为何常见:刚体是最显眼的组件,初学者容易把“物理引擎存在”等同于“布娃娃可用”,忽略了连接与限制才是瘫倒形态的灵魂。
误区受击判定一触发,就该在同一帧立刻激活所有刚体并开启物理,这样反应最快、最真实。
正解角色受击瞬间有大量动画速度,立即切换到物理会在第一帧释放巨大冲量,导致角色像被炸飞一样爆开。工程上通常延迟 30~100 毫秒再启用,并让刚体从沉睡中温和唤醒,同时沿着打击方向施加与动画速度匹配的最小冲量,才能顺着击打方向自然倒地。
为何常见:直观上“越快越真实”,但忽略了物理引擎接管的是整个动态系统的状态迁移,而不是一个开关的简单翻转。
误区动画物理混合时,把 α 快速拉到 1,让角色完全交给物理,效果一定最真实。
正解α 只决定位置来源,不决定过渡质量。若 α 从 0 跳到 1 的过渡时间太短,视觉上会出现“身体突然被物理夺舍”的弹跳感。真实感来自合适的过渡时长和 S 形曲线:先缓慢松手,再加速接管,最后趋于稳定,配合关键帧回闪,观众才看不出控制权交接。
为何常见:人们默认“物理 = 真实”,却忽略了平滑过渡本身是“真实感”的一部分,现实中提线松手也从来不是瞬间完成的。
误区肢体互相穿透是因为碰撞体尺寸不够,把胶囊体调大一圈就能解决穿模。
正解穿模的根源通常是约束求解不到位——迭代次数太少导致约束偏软,或刚体初始状态与场景物体重叠造成物理引擎强制推开。盲目调大碰撞体反而会让角色“浮”在障碍物上,产生新的失真。应先提高迭代次数、检查初始重叠,再微调碰撞体尺寸。
为何常见:“穿模”听起来像一个几何碰撞问题,天然让人联想到碰撞体的尺寸,而忽略了关节约束的求解精度才是维系肢体关系的关键。
面试题
Q1. 布娃娃系统区别于普通死亡动画的核心特征是什么?
- A.播放更长的骨骼动画序列
- B.骨骼由物理引擎接管驱动← 正确答案
- C.角色模型换成碎片模型
- D.关闭角色所有碰撞检测
答案:B。布娃娃的核心是把骨骼从关键帧动画驱动切换为物理引擎驱动,让角色按真实力学倒下。A 只是动画时长变长,C 属于破坏效果,D 反而会导致角色和地面失去接触,都不符合布娃娃系统的定义。
Q2. 布娃娃系统的三个核心组成部件是什么?
- A.刚体、约束、碰撞体← 正确答案
- B.贴图、材质、光照
- C.关键帧、曲线、插值
- D.骨骼、蒙皮、动画
答案:A。布娃娃需要刚体承载物理属性、约束连接骨骼段并限制活动范围、碰撞体处理接触。B 是渲染相关,C 是动画插值概念,D 是基础动画管线,均不是布娃娃物理模拟的专属组成。
Q3. 关于动画物理混合权重 α,下列说法正确的是?
- A.α=0 时完全物理驱动、α=1 时完全动画驱动
- B.α=0 时完全动画驱动、α=1 时完全物理驱动← 正确答案
- C.α 与渲染帧率无关且只影响贴图透明度
- D.α 只能取 0 或 1,不允许中间值
答案:B。α=0 时最终姿态全部来自动画位置,α=1 时全部来自物理位置,中间值表示两者的线性插值。A 恰好说反,C 混入了渲染概念,D 忽略了 α 可连续变化以实现平滑过渡。
Q4. 受击瞬间立即开启全部关节约束,最可能出现的现象是?
- A.角色原地消失且动画停止播放
- B.关节在冲击下爆开或剧烈抖动← 正确答案
- C.动画播放速度瞬间翻倍
- D.角色模型整个陷入地面以下
答案:B。受击瞬间骨骼携带巨大的动画速度,立即启用物理会使刚体在首帧释放大量冲量,造成关节爆开或剧烈抖动。工程实践要求延迟几十毫秒再启用,并施加与打击方向匹配的最小冲量,避免这种现象。
Q5. 关节约束中的“角度限制”相当于木偶铰链的什么?
- A.铰链能承受的最大重量
- B.允许旋转的角度范围← 正确答案
- C.铰链安装在躯干的位置
- D.木偶整体重心的高度
答案:B。角度限制定义了关节在某方向上的最小和最大允许角度,比如膝盖只能弯到 150°,超出后被求解器修正。它约束的是活动范围,与承载重量、安装位置、重心高度无关。
Q6. 在 Verlet 积分中采用多次迭代求解距离约束,其主要目的是?
- A.让每个质点质量均匀分布
- B.减小约束误差使结果更稳定收敛← 正确答案
- C.提升积分器的固定时间步长
- D.让刚体碰撞体自动生成
答案:B。一次迭代只能部分拉回边界偏移,多次迭代能让约束长度误差逐步收敛,关节更“硬”、不易穿模。A 与质量分布无关,C 时间步长改变会引起稳定性问题而非提升,D 属于碰撞体生成逻辑。
Q7. 场景:角色布娃娃倒地后需要重新站起继续战斗,下列哪个做法最恰当?
- A.直接冻结物理并播放一步到位的动画
- B.物理模式继续、动画覆盖显示并立即播放
- C.先动画到物理过渡再反向用混合曲线收回控制权← 正确答案
- D.删除刚体并随机设置初始姿态
答案:C。从物理回到动画需要平滑收回控制权:先做关键帧回闪找到最近匹配姿态,再沿混合曲线反向把权重从 1 降到 0,同时让动画从匹配帧继续播放。A 会跳变,B 会造成动画与物理叠加冲突,D 会破坏场景一致性。
Q8. 下列哪些属于布娃娃系统的常见故障?(多选)
- A.关节穿模肢体互相穿透← 正确答案
- B.静止时高频抖动噪声← 正确答案
- C.动画文件体积过大
- D.物理性能开销过高← 正确答案
答案:ABD。穿模源于约束求解不足或碰撞体初始重叠;抖动源于迭代过少或阻尼太低;性能开销过高是同屏刚体数量过多导致。动画文件体积是数据存储问题,不属于布娃娃物理故障。
Q9. 关于布娃娃启动时机控制,正确的策略有哪些?(多选)
- A.受击回调后延迟几十毫秒再启用← 正确答案
- B.先对刚体施加最小冲击力再开启← 正确答案
- C.角色存活时完全禁用布娃娃← 正确答案
- D.每帧重新创建所有关节约束
答案:ABC。延迟启用避免动画速度瞬间释放造成爆开,最小冲击让角色顺打击方向倒下,存活时禁用防止走路跌倒。D 每帧重建约束会撕裂物理系统且开销极大,应只在初始化时创建一次。
Q10. 以下哪些参数会影响布娃娃瘫倒效果的真实度?(多选)
- A.关节的角度限制上下限← 正确答案
- B.刚体质量与阻尼系数← 正确答案
- C.求解器迭代次数← 正确答案
- D.角色贴图的分辨率
答案:ABC。角度限制决定肢体能弯到哪里,质量分布决定倒向、阻尼决定落地后的震荡收敛速度,迭代次数决定关节稳定性——三者直接影响瘫倒姿态。贴图分辨率只影响视觉效果,不改变物理模拟。