Choose your operating system:
Windows
macOS
Linux
依赖场景深度时,在游戏中的粒子碰撞会受到限制,仅可以将摄像机视图中可用的粒子用于碰撞。对于寿命较长的粒子或在大面积区域中使用的粒子,在某些角度,场景深度不是特别精确。如果在项目中使用网格体距离场(Mesh Distance Field),粒子的 碰撞模式 就可以使用整个场景进行碰撞,而非场景深度。
距离场 碰撞模式提供的碰撞相较于 场景深度 更加可靠。但是,由于 全局距离场(Global Distance Field)用于表示整个场景的较低分辨率,您可能会发现使用距离场碰撞模式时粒子会穿过较薄的对象或者尖角会变圆。作为分辨率降低的回报,距离场碰撞可以高效运行。其性能成本与场景深度碰撞差不多,但是却不受摄像机视图限制。距离场碰撞模式是一个Shader Model 5(SM5)功能。在不支持SM5的硬件上,粒子碰撞会自动退回到使用场景深度碰撞。
在本指南中,您将学习如何为粒子系统中的距离场启用碰撞模式。
步骤
该功能要求您在 项目设置(Project Settings) 的 渲染(Rendering) 部分中启用 生成网格体距离场(Generate Mesh Distance Fields)。请在此处查看如何启用网格体距离场(Mesh Distance Field) (如果尚未启用)。
在 内容浏览器(Content Browser) 中,找到并打开任意 粒子系统(Particle System),如果不存在立即可用的粒子系统则新建一个。
粒子 P_GPU_particles_collision2 资源(位于内容示例中)是只需要少量设置即可以使用的良好示例,可将其作为起点。
双击已选择的粒子系统以打开级联粒子编辑器(Cascade Particle Editor)。
级联粒子编辑器(Cascade Particle Editor)打开后,在空白的地方右键单击,然后从模块列表中选择 类型数据(Type Data) > 新建GPU Sprite(New GPU Sprites)。
再次在空白的地方右键单击,然后从模块列表中选择 碰撞(Collision) > 碰撞(场景深度))(Collision(Scene Depth))。
选择 碰撞(场景深度)(Collision (Scene Depth)) 模块。导航至 细节(Details) 面板,然后从 碰撞模式(Collision Mode) 旁边的下拉菜单中选择 距离场(Distance Field)。
最终结果
现在你已经学习了如何让粒子系统为距离场使用碰撞模式,粒子将能够与整个场景碰撞,而不必依赖于场景深度。这提供了视觉效果类型和所创建效果的寿命方面的灵活性,无论这些效果覆盖较大区域还是位于较小的区域中。
在本示例中,粒子碰撞使用的是 距离场(Distance Fields) 碰撞。这些粒子始终会被具有生成的距离场的任何表面阻挡,无论其在摄像机视图中是否可见。随着摄像机移动到树下,树顶表面的粒子碰撞(在摄像机视图范围之外)仍将会影响这些粒子。
当 场景深度(Scene Depth) 碰撞用于粒子碰撞时,由于使用场景深度缓冲,粒子仅会被摄像机视图中可见的内容阻挡。因此,当摄像机移动到树下时,树顶表面的粒子碰撞(在摄像机视图范围之外)就不会继续影响这些粒子,从而使它们在摄像机前掉落在地上,即使它们本该被阻挡。