首页 / 资讯中心 / 文章详情

边跑边开枪?靠遮罩精准分工

边跑边开枪?靠遮罩精准分工 ★ FEATURED ARTICLE
一、一句话说清楚遮罩就是给每根骨骼一个 01 的数字表示这根骨骼听上层动画的程度。0完全听下层动画1完全听上层动画0.5两个各听一半二、案例边跑边开枪 ‍♂️现在有两个动画下层奔跑全身都在动腿迈步、手臂前后摆上层开枪双手举枪身体站着不动我们想要的效果是腿继续跑手举着枪。没有遮罩会怎样只能整体混合比如各 50%腿一半在跑一半站着 → 像在小碎步滑行 手一半在摆一半举枪 → 枪口乱晃两个动作都没做好。加上上半身遮罩给骨骼标上数字头 1.0 ← 听开枪 │ 手臂 1.0 ─ 胸 1.0 ─ 手臂 1.0 │ 腰 0.5 ← 一半一半过渡 │ 骨盆 0.0 ← 听奔跑 / \ 左腿 0.0 右腿 0.0于是腿、骨盆 → 100% 奔跑动画 胸、手、头 → 100% 开枪动画 腰 → 两者各一半让上下身自然衔接结果就是边跑边稳稳举枪✅。三、核心公式每帧对每根骨骼做一次最终姿势 混合(下层姿势, 上层姿势, 层权重 × 遮罩权重)代码只有几行for(inti0;iboneCount;i){floatwlayerWeight*mask[i];// 这根骨骼听上层的比例result.rot[i]NLerp(baseRot[i],layerRot[i],w);// 旋转混合result.pos[i]Lerp(basePos[i],layerPos[i],w);// 位置混合}用数字算一遍假设某根骨骼的旋转角度简化成一个数骨骼奔跑开枪遮罩结果右腿30°0°0.030°跑腰10°0°0.55°过渡右臂40°90°1.090°举枪结果 奔跑 (开枪 - 奔跑) × 遮罩就这么简单。另外层权重控制整个上层的强度没开枪层权重 0 → 全身都是奔跑 开枪 层权重从 0 渐变到 1 → 手臂慢慢抬起来 收枪 层权重从 1 渐变到 0 → 手臂慢慢放下四、两个常见问题问题 1腰部像折断一样 如果遮罩是硬切换骨盆 0脊柱直接 1上下两个动作的差异全挤在一个关节上。解决让数字逐渐变化。骨盆 0 → 腰1 0.3 → 腰2 0.6 → 胸 1.0差异分摊到多根骨骼上就像真人扭腰一样自然。问题 2跑步时枪口左右晃 奔跑时骨盆会左右扭动。上半身虽然听开枪但它是挂在骨盆上的骨盆一扭整个上半身跟着扭。就像坐在晃动的车上举枪手臂姿势没变但枪口跟着车晃解决上半身改成按世界朝向混合模型空间混合。意思是胸口该朝哪个方向就朝哪个方向不管骨盆怎么扭自动抵消掉。瞄准类动作基本都要开这个。五、额外好处省性能 ⚡遮罩还告诉引擎哪些骨骼不用算上半身层只影响 40% 的骨骼 → 开枪动画里那些腿部数据根本不用读取和计算六、总结要点一句话是什么每根骨骼一个 01 的数字干什么让不同动画各管身体的一部分怎么算结果 混合(下层, 上层, 层权重 × 遮罩值)边界不自然数字逐渐过渡不要硬切上半身跟着晃改成按世界朝向混合顺便优化遮罩为 0 的骨骼不用采样记住这个画面就够了腿在跑、手举枪、腰负责过渡——遮罩就是那张告诉每根骨骼你听谁的的分工表。
阅读完成 · 觉得有帮助?
咨询建站