问题描述
我在某些 Android 设备上遇到了粒子系统渲染的问题(奇怪的是,该问题似乎发生在具有更高功能的设备上)。当渲染基于网格的粒子(渲染器/渲染器模式/网格)时会出现问题。似乎随着时间的流逝而被喷出并慢慢缩小的网格正在减少(“反向镶嵌”),这会导致令人讨厌的视觉效果。有谁知道这可能是什么原因?
更新:我注意到的一件事是,随着时间的推移 - 游戏时间越长 - 这个问题越来越严重。
更新:我尝试将一个粒子系统放大(大约 x5 倍),以检查它是否会对其光栅化产生任何影响。通常,粒子的大小会根据其寿命从 1 减小到 0。我注意到,在调整它们的大小后,问题不再发生。
UPDATE:问题的可视化:
正确呈现:
渲染不当:
解决方法
我能够追踪到问题。原来是我写的一个卡通着色器中的一个问题。我注意到的所有事情都是有效的,但不幸的是,我花了一些时间才走上正轨。
取自 Unity 的 documentation
half 和 fixed 类型仅在定位到移动设备时才变得相关 GPU,这些类型主要用于电源(有时 性能)约束。请记住,您需要测试您的 移动设备上的着色器以查看您是否遇到 精度/数值问题。
对我来说很不幸,因为它花费了我相当长的时间,我使用了 half3/4 值和 POSITION 语义,这在某些 Android 设备上导致了一些数值精度问题(在这种情况下,粒子是越来越小 - 准确地说是尺寸 0)。作为一般规则,从我在 Unity 的文档中读到的内容来看,float3/4 应该始终与 POSITION 语义结合使用。