刚好最近在研究物理碰撞的时候,看了不少关于碰撞模拟计算的方案,对比下来我觉得Control的方案是效果比较好的方案之一,这是Remedy的Johannes Richter在2020年GDC上分享了Control的Destructible Environments使用的技术和经验分享
碰撞真实感强 方案思路清晰 碰撞类型丰富 碰撞可控性高 有优化手段 分享一下加深一下自己的理解
什么是Destructible Environments,简单理解就是在游戏中构建一个可破坏性的环境,在一个破坏性高的游戏比起只是构建简单的破坏特效的游戏来说,吸引力不是一点点,我就是一个比较喜欢在游戏中打碎各种游戏物件的玩家。Destructible Environments会有个简单的新概念:
Rigid body 刚体是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体(简单理解就好,不用过去纠结名词)
目前主流的物理碰撞模拟的软件:PhysX Chaos Destruction Havok destruction....
当然我这里就不深究物理破碎的引擎的各种原理了(因为已经超出我的知识范畴了) 正式开始:大佬的自我介绍:
整个分享的议程:
在物理破碎的原理中,每一级的破碎都是由你去创造的,在原理上很清楚的罗列了物理碰撞的等级(破碎物体——破碎的块——破碎的碎片——破碎的灰尘),可以理解为物体在物理破碎的时状态递增,最终的整个物理破碎的状态就是有这四步组成的。
在引擎中可以拆分为三个不同的layer:
Layer0 : 环境刚体的模拟 参与碰撞的道具 大块的建筑墙体之类 Layer1 : 破碎的碎片 道具碎片 网格粒子 刚体层次结构 材料贴花 Layer2 :都是粒子(火花 灰尘 烟雾 碎片粒子)
在Control的游戏环境中参与碰撞的 建筑部分 物件 植被 道具有很丰富,展示了游戏中的画面。
接下来展示了他们在整个开发物理破碎环境中的工作流程 分为三部分:环境创建几何体层级 输出破碎数据和设置 游戏运行时状态。
在确定大的工作流程以后,确定整个破碎的规则,前面也提到了整个游戏环境中丰富的物理材料有不同的物理属性,在在不同的物理属性下梳理不同的规则来模拟。(这是正确的在游戏中不同的物理材料有不同的属性,这样整个游戏才能丰富真实)
在这里列举了一个简单的梳理规则,一个花台的资产中有三种不同的物理材质:植物 混凝土 织物 梳理出基于规则的数据处理 第一步:在美术资产方向梳理区分不同材质的材料,不同的几何层次结构 材料的数据 第二步:在以第一步为基础处理出什么材料有什么物理反应,是如何表现物理属性的 输出相关的模拟数据和设置 第三步:输入到引擎动态环境中:影响的视效 破坏的效果 刚体的行为。
这里展示了有材料规则驱动的不同材料在作用力下的不同状态,还有不同表现。
关于几何体的层次结构,在不同的层次下不同的状态(因为一般游戏中都是一枪就处于物理破碎的最终状态,这样真实感真的很差)
然后就是怎么去制作碰撞和制作碰撞数据的工具链,在引擎中引擎作为层级数据梳理,判断逻辑的驱动 粒子响应等工作,由physX完成物理模拟。
对于破碎数据制作的工具链以及使用的软件。
当然我们在houdini中创建了物理破坏的自动工具,输入破碎的物体,经过之前的梳理出来的不同物理规则(材料分类 )来完成不同的自动破坏模拟,然后整理数据结构 层次结构等数据输出到引擎中。
这就是整个物理破碎的思路(区分不同的材料 不同的物理属性 不同的层次结构 自动化的工具链)
接下来是关于物理破碎优化的分享
A. 屏幕中限制活动刚体的个数;
B. 设置碰撞延迟,并在前十帧禁用自碰撞;
C. 减少活动刚体的时间;
D. 在碰撞刚体的空白处悬挂粒子特效,在少量刚体的时候能起到很大的作用;
E. 某些部分使用材料贴花来模拟(这一点后面他提到)。
关于颗粒层部分。
关于粒子模拟部分。
关于材料贴花部分。
整个流程中以下四部分吸取了不少教训几何体的 基于名称的约定规则 模型破碎的工具 性能的监测 我们针对这四部分做了很多优化和调整并改进了其中的工作流程 Quality of Geometry部分。
Name-based conventions部分。
Monolithic Destruction Tool部分。
Perfromance and Testing部分(性能和测试)(实在是太晚了就不翻译了)
向Control和Control开发团队致敬。
哟哟哟 完结 撒花!
,