我一直在测试光探针,看看我是否可以像 Apple 的 Badger 演示那样重现类似的光照效果,但无论出于何种原因我都无法在 SceneKit 编辑器中计算光探测器。

我不确定计算光探针的要求是什么,如果我能得到一些澄清,那将是很好的。

我将列出我到目前为止尝试过的光探测器。

我使用了 SceneKit 文档中的示例,将对象放在彩色墙壁旁边。我在物体和墙壁周围制作了一个光探针网格。

灯光:

尝试静态模式和动态的所有灯光类型。尝试使用和不使用基于图像的照明。还尝试更改 Direct/Indirect 灯光的灯光烘焙选项。也为灯光切换阴影。

材料:

试过 Phong 和基于物理的。对于基于物理的材料,尝试将自发光设置为黑色,将物体(而不是墙壁)设置为零。

节点:

将 object movability 标志设置为 true。 (不是墙)

这是编辑器中我如何将对象放置在场景中的屏幕截图。我从场景中删除了所有其他灯光,使屏幕截图看起来不那么杂乱。

在此输入图像描述

我想我接下来要尝试的是使用 ModelIO 计算光探针,希望我能得到一些结果。

更新 1:

我试图分享尽可能多的细节,但在考虑之后我觉得分享场景文件本身会提供很多我没想到的有用的细节。

我删除了场景中的所有 static/dynamic 灯,只有几何和探测器在场景中。要测试场景,请添加自己的灯光,转到 SceneKit 编辑器中的最后一个选项卡,然后单击“计算所有探测器”,然后在您选择的设备上运行。

场景文件链接:lightprobe_test.scn

更新 2:

我只是想展示一下我用光探针试图实现的截图。此屏幕截图显示了一个场景,其中所有静态对象都将光照信息烘焙到其纹理中使用光探针我希望获得类似的结果,但对于场景中的动态对象。

在此输入图像描述

更新 3:

我一直在测试 ModelIO 中的光探针烘烤。到目前为止,我已经能够使用 MDLAsset 类方法 placeLightProbes(withDensity:heuristic:using:)将光探针放置在网格图案中,无法使第二个放置选项工作。但我很高兴我使用这种方法,现在我不必花费数年时间在整个场景中放置探测器。

我确实发现了一些奇怪的东西,在导出场景文件并在 Xcode 中检查后,我注意到 ModelIO 创建的新光探针与 SceneKit 的光探针相比非常大。不确定这是否会导致任何问题,似乎只是一个美容问题。

在此输入图像描述

我尝试使用 MDLLightProbe 初始化场景中的灯光信息来烘焙探测器?(textureSize:forLocation:lightsToConsider:objectsToConsider:reflectiveCubemap:irradianceCubemap:)方法。但每次运行该方法时,应用程序都会崩溃。我从发生崩溃的线程中截取屏幕截图。

在此输入图像描述

这就是我现在所处的位置,我会休息一下,明天再尝试一下。谢谢阅读。

最后更新:

经过社区的大量测试和帮助,我终于找到了为什么我无法在 SceneKit 编辑器中计算光探测器。为了计算光探针,你的 mac 需要支持 Metal。不幸的是,我的 mac mini 2011 型号出了名。但我应该升级,这可能是我这样做的借口 8)。

支持 Metal 的 Mac 列表