unity3d - 生成和显示数千个多边形的最佳实践
问题描述
我目前正致力于在屏幕上的任何一点生成和显示数千个多边形,我目前通过定义顶点并使用顶点列表创建网格,将其应用于网格渲染器并让它实例化对象来做到这一点。
这...在我的开发人员 PC 上很好,但在速度较慢的计算机或手机上,它就是行不通。
我主要希望是否有任何方法可以在不使用网格实例化对象的情况下渲染大量小多边形?我在考虑可能使用着色器,但我不是最擅长编写它们!它们都需要是静态的并且能够改变颜色等吗?
如果最好的方法是使用着色器......你会怎么做。
非常感谢!
解决方案
在我弄清楚如何编写着色器之前,我找到了一个很好的解决方案。
因为我动态生成网格而不是使用网格渲染器创建游戏对象并实例化它。我正在做的是找到所有具有相同材料的网格并使用统一网格组合器制作单个网格,然后使用统一的 drawmesh 函数来避免实例化对象。
使用这种方法,我现在可以在手机上以 60FPS 的速度渲染 260 万个三角形。
编辑: 比较
原始方法:260 万个 tris,19,000 个对象单个网格。50% 的 CPU 使用率,3FPS。
第二种方法:使用 DrawMeshInstanced 对 260 万个 tris、0 个对象、19,000 个实例化网格进行批处理。100% CPU 使用率 0.4FPS。试图利用 gpu 实例化。
第三种方法:260万个tris,0个物体,10个组合网格,使用DrawMesh方法进行渲染。13% cpu 使用率 60+FPS
推荐阅读
- nginx - 适用于 Amazon Linux 第 2 版 (Karoo) 和 nginx 的 certbot-auto (2021)
- svg - Vue Konva,动态创建阶段
- powerbi - Power BI - 排名视觉
- python - 使用 Python 请求库解析 HTTP 请求正文时出错
- python - 如何在 django 中的页面上呈现 DateField
- cucumber - Cucumber 在多个站点上运行测试
- java - 使用 java FileWriter 时我尝试解决并发问题是否正确?
- python - Foluim - 在等值线覆盖上绘制圆圈
- python - 使用 Pandas 根据数据框中的另一列值获取特定值的计数和总数
- pandas - 如果列包含字符串,熊猫会删除行