跳转到内容
CRUSHFORMV1.1.0
在 Fab 上获取

更新日志

更新日志

一次剧烈碰撞在游戏线程上的开销大幅降低。在我们测量的机器上,剧烈碰撞的任何一帧,Crushform 在游戏线程上的工作都不再超过约 1.3 ms,而此前碰撞那一帧要花几毫秒。

受损车辆的绘制开销大幅降低,项目现在还可以限制有多少辆车绘制其损伤。在 OpenGL ES 3.1 下的 Mali-G76 GPU 上,以其最高频率运行时,受损车身的槽位从每帧约 80 ms 降到了约 4 ms。我们没有在桌面 GPU 上测量过这一收益。

新增:

  • 碰撞计算移出游戏线程。 被扯断部件的切割、凹陷车身的重建和被扯断部件的凸包,都在工作线程上运行。UCFSettings::CollisionDeferFrames(1)或 Crushform.Collision.DeferFrames 的取值为 0 或 1。取 1 时,车身的重建和切割会在下一帧的物理之前落到车身上。0 则像 1.0.0 那样在命中的那一帧完成全部构建。
  • 跟随凹陷的碰撞体有了项目级开关。 UCFSettings::bDeformCollision(开)或 Crushform.Collision.Deform。关闭时优先于所有配置文件,因此设备配置文件可以在性能较弱的设备上将其关闭。
  • 玻璃碎片是 Niagara 系统。 默认系统是 UCFSettings::DefaultGlassShardSystem,UCFGlassDefinition::ShardSystem 可为某个玻璃定义指定另一个。它们不再使用碎片池及其上限。Crushform.Glass.ShardScale 设置抛出碎片的比例,Crushform.Glass.MaxLiveShards(512)限制同时存活的碎片数。
  • 一起碎裂的玻璃板错开一帧启动。 Crushform.Glass.ShardSystemsPerFrame(1)设置一帧内启动的碎片系统数。0 表示不限。
  • 撞击声每次只启动几个。 UCFImpactFeedbackSettings::MaxSoundsPerFrame(2)设置一帧内启动的数量。其余的最多等待 UCFImpactFeedbackSettings::SoundQueueSeconds(0.15 s),最强的优先,之后被丢弃。
  • 整条命中路径上都有命名的追踪范围。 见性能中的列表。
  • 凹陷和污垢各有独立的绘制上限。 凹陷和划痕:UCFSettings::DentCullDistance 和 UCFSettings::MaxDentedBodies,或 Crushform.Dents.CullDistance 和 Crushform.Dents.MaxBodies。车身和车轮上的污垢:UCFSettings::DirtCullDistance 和 UCFSettings::MaxDirtyBodies,或 Crushform.Dirt.CullDistance 和 Crushform.Dirt.MaxBodies。最近的车身优先绘制,屏幕内的先于屏幕外的。这四项默认都是 0,即不设限,设备配置文件可以按设备分别设置。
  • Sedan 上生成的 LOD。 它的静态网格体多了三级 LOD,最低降到约十分之一的三角形,整辆车在同一距离切换 LOD。使用 Nanite 的网格体仍照常由 Nanite 绘制;没有 Nanite 的平台会绘制这些 LOD,玻璃在所有平台上也是如此。
  • 白杨上的简化 LOD。 SM_CF_Tree(804 个三角形)是 BP_CF_Tree 中这棵树的 LOD1。Android 和 iOS 通过网格体的最小 LOD 绘制它;其他平台仍使用完整的白杨。
  • Android 和 iOS。 每个运行时模块现在都允许这两个平台作为目标平台,与 Win64、Linux 和 Mac 并列。Android 已在 OpenGL ES 3.1 下的 Mali-G76 上运行过;iOS 尚未构建或运行。在手机上,请使用上面的绘制上限,并关闭 UCFSettings::bDeformCollision。

变更:

  • 变形读取更少。 一个顶点在一次着色器调用中只计算一次,约 11 次图集读取,而不是 32 次。没有凹陷也没有划痕的车身,在顶点阶段什么都不读取。
  • 污垢读取更少。 一个像素只做 2 次过滤读取,而不是 8 次。RT_CF_DirtAtlas 和 RT_CF_DirtFreshAtlas 现在使用双线性读取;拥有自己污垢图集的项目也要把它们的过滤方式设为双线性。
  • CF_DirtBlend、CF_DirtAmount 和 CF_DirtFresh 接收图集的采样器。 项目中调用它们的自定义 Custom 节点,要把采样器作为图集之后的下一个参数传入。
  • 划痕线在任何距离下都是同一组线条。 着色器现在直接计算它们,不再对纹理取阈值,因此不会闪烁或破碎,也不会只在近处出现。远处的线条会变淡,更远时线条融合为均匀的提亮。UCFProfile::MaxScratch 的默认值现在是 0.033,而不是 0.1,撞毁的车上线条约为原来的三分之一。

行为变化(在默认设置下):

  • 铰接部件在碰撞之后的那一帧才开始摆动或脱落,而不是在碰撞的那一帧。
  • 脱落的部件会等待车身碰撞体在其位置周围切割完成:等一帧,如果当时另一次碰撞构建正在运行,则等两帧。在此之前,它留在原位,或继续在铰链上摆动。

将 Crushform.Collision.DeferFrames 设为 0,即可恢复这两处原有的时序。

超过污垢上限的车身会以干净的外观绘制,它的污垢在这台机器上保持不变:在车身再次显示之前,既不积累也不消退。清洗、填充或新增污垢仍然生效。超过凹陷上限的车身会以完好的外观绘制;它的晶格、碰撞、复制和损伤事件照常进行。上限为 0(默认值)时,这些都不会发生。

首次公开发布。