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

Unity's Particle System - shader glitch (mesh vertices reduction)

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

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

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

更新:问题的可视化:

正确呈现:

渲染不当:

我能够找到问题所在。事实证明这是我在旅途中编写的卡通着色器中的问题。我注意到的所有事情都是有效的,但不幸的是我花了一些时间才走上正轨。

取自 Unity 的 documentation

The half and fixed types only become relevant when targeting mobile GPUs, where these types primarily exist for power (and sometimes performance) constraints. Keep in mind that you need to test your shaders on mobile to see whether or not you are running into precision/numerical issues.

对我来说很不幸,因为它花了我很多时间,我使用了带有 POSITION 语义的 half3/4 值,这导致一些 数值精度问题 Android 设备(在这种情况下,粒子变得越来越小——准确地说是尺寸 0)。作为一般规则,根据我在 Unity 的文档中阅读的内容,float3/4 应该始终与 POSITION 语义结合使用。