返回 登录
0

Unreal Engine* 4: 制定布料模拟 CPU 优化蓝图

阅读3577

内容

布料模拟
禁用布料模拟
Unreal Physics 统计
细节级别
布尔转换
遮挡剔除转换
组合/Set Piece 转换
使用 Set Piece 转换
布料模拟

逼真的布料运动可大幅提升游戏的视觉沉浸感。 使用 PhysX* Clothing* 是实现这一目标的一个方法,无需手工绘制动画。 将这些模拟整合到 Unreal Engine* 4 中非常容易,但该流程需占用较多 CPU,因此最好了解模拟的性能特征及优化方式,

禁用布料模拟

在 Unreal 中,布料模拟位于相应的关卡,无论是否可见。 优化可防止该风险。 优化模拟布料时请勿依赖 Disable Cloth 设置,因此它仅在构建中有用,在游戏进行时毫无用处。

Unreal Physics 统计

为更好了解布料模拟及其对游戏和系统的影响,我们可在 Unreal 中使用控制台命令 Stat PHYSICS。

在命令行中输入 Stat PHYSICS,然后会出现物理结构表覆盖(图 1)。 删除它请在控制台中输入相同命令。
图片描述
图 1. 物理结构覆盖表。

尽管有大量信息可用,我们还存在两方面(Cloth Total 和 Cloth Sim)担忧。

Cloth Total 表示场景中的布料绘制总数,Cloth Sim(模拟)表示当前模拟的活跃布料网格数量。 确保这两个数目处于目标平台的合理水平内,有助于防止处理布料造成 CPU 过载和帧速下降。 通过在该水平中添加更多布料网格,CPU 一次可处理的模拟数量便显而易见。

细节级别
在创建骨架网格并在其中附加一个顶点布料文件时,布料模拟将始终与该网格细节级别 (LOD) 的零值关联。 如果网格的 LOD 0 被禁用,布料模拟将不再发生。 为发挥其作用,我们可创建与 LOD 0 完全相同的 LOD 1(减去布料顶点文件),并将其用作转换,无论是否使用布料模拟(图 2)。
图片描述
图 2. 细节级别信息。

布尔转换

既然已有转换,我们可设置简单的蓝图控制它。 通过创建事件(或函数),我们可在模拟布料 (LOD 0) 和不模拟布料之间使用布尔转换,实施分支。 该事件可在输入的触发器上调用,以开始在下一个区域模拟布料网格,并在玩家离开该区域时再次调用,以停止模拟或任何数量的方法,取决于游戏关卡。
图片描述
遮挡剔除转换

如果希望采用更自动化的方法,可将遮挡剔除用作交换变量。 为此,调用“Was Recently Rendered”函数,并返回转换分支(图 4)。 这会在对象不再被渲染时阻止布料模拟。
图片描述
图 4. 转换蓝图中的”Was Recently Rendered”函数。

该方法的问题在于模拟恢复启动时发生的模拟重置。 如果布料网格与模拟时显著不同,玩家将始终看到这种转换。 为降低这种情况发生的概率,可通过导入设置扩大网格边界。 然而,这也意味着故意渲染玩家看不到的对象,因此请确保其有助于满足游戏的渲染需求。

解决此问题的一个关卡设计方法包括确保所有动态布料网格(如旗帜)与风处于同一个方向。

我们可以使用…查看全文
了解更多相关内容,请关注CSDN英特尔开发专区

Intel技术双周刊已全面开启:订阅请点击这里

评论