Unity 的粒子系统 - 着色器故障网格顶点减少

问题描述

我在某些 Android 设备上遇到了粒子系统渲染的问题(奇怪的是,该问题似乎发生在具有更高功能的设备上)。当渲染基于网格的粒子(渲染器/渲染器模式/网格)时会出现问题。似乎随着时间的流逝而被喷出并慢慢缩小的网格正在减少(“反向镶嵌”),这会导致令人讨厌的视觉效果。有谁知道这可能是什么原因?

更新:我注意到的一件事是,随着时间的推移 - 游戏时间越长 - 这个问题越来越严重。

更新:我尝试将一个粒子系统放大(大约 x5 倍),以检查它是否会对其光栅化产生任何影响。通常,粒子的大小会根据其寿命从 1 减小到 0。我注意到,在调整它们的大小后,问题不再发生。

UPDATE:问题的可视化:

正确呈现:

enter image description here

渲染不当:

enter image description here

解决方法

我能够追踪到问题。原来是我写的一个卡通着色器中的一个问题。我注意到的所有事情都是有效的,但不幸的是,我花了一些时间才走上正轨。

取自 Unity 的 documentation

half 和 fixed 类型仅在定位到移动设备时才变得相关 GPU,这些类型主要用于电源(有时 性能)约束。请记住,您需要测试您的 移动设备上的着色器以查看您是否遇到 精度/数值问题。

对我来说很不幸,因为它花费了我相当长的时间,我使用了 half3/4 值和 POSITION 语义,这在某些 Android 设备上导致了一些数值精度问题(在这种情况下,粒子是越来越小 - 准确地说是尺寸 0)。作为一般规则,从我在 Unity 的文档中读到的内容来看,float3/4 应该始终与 POSITION 语义结合使用。