3d - ARKit + SceneKit:光照快速增加多边形数量
问题描述
我正在使用 SceneKit 和 ARKit 创建 AR 应用程序。当我在场景中添加光源时,多边形的数量几乎增加了 3 倍。在我的情况下,这导致了巨大的滞后。我能做些什么来解决这个问题?
解决方案
如果您使用正向渲染,则可能会出现此问题。
在这种情况下,当您有一些被少量灯光照亮的对象时,它将为每个灯光渲染一次(有例外,但我们现在先忽略它们)。根据灯光的数量和影响(大小),您的场景几何图形甚至可以渲染数十次。
可以做什么:
- 使用
Deferred
渲染而不是渲染Forward
。Deferred
渲染克服了这个问题,您甚至可以使用数千个灯光。 - 使用更少的灯光,但让它们更大,所以它们仍然照亮你的场景。
- 添加
Ambient
照明,这样您就不需要real
到处照明了。仅使用真实的灯光来使某些东西更亮。 - 查看灯光的半径和/或边界框,并在需要时修复它们。它们用于优化渲染,因此如果灯光未触及某些几何体,您可以忽略它。您可能没有这些数据,因此每盏灯都会触及每一个几何图形。
- 将你的关卡几何分割成更小的块。这很棘手,因为通过分割几何体可以获得更多的渲染批次,但也可以减少几何体和灯光之间的重叠。这应该根据您的特定级别和照明设置来完成。
推荐阅读
- kubernetes - 字段 'instance.networkInterfaces[0].accessConfigs[0].natIP' 的值无效:指定的外部 IP 地址未在区域中保留
- assembly - 带有字节的标记的平均值
- c++ - 改变整个屏幕像素的颜色
- intellij-idea - IntelliJ 无法解析捆绑包中的 Kotlin stdlib 成员
- linux - 配置命令错误(不支持arch)
- java - 在捕获异常时做一些事情
- c# - 如何将所有 gui 元素(如标签或按钮)的文本颜色更改为白色?
- android - 如何将图像直接存储在android的SqliteStudio中而不从应用程序中存储
- qt - 如何使用 GPIO 引脚进行 Qt 的串行流控制?
- business-objects - 查找所有使用手写 SQL 的 WebI 报告