SceneKit:如何在iOS 10上重现iOS 9灯光色彩效果(单向,一个环境)而不禁用PBR?

Cra*_*lot 5 lighting ios scenekit pbr

正如苹果论坛上提到的这个主题提到的那样,iOS 10上的灯现在变弱了,改变了场景的样子.

线程建议设置SCNDisableLinearSpaceRendering为YES,但这不起作用.换句话说,使用SCNDisableLinearSpaceRendering不会使你的场景在iOS 10上看起来与在iOS 9上看起来相同 - 至少在我们的测试中没有.

我们还尝试过:

floorNode.geometry?.firstMaterial?.lightingModel = SCNMaterial.LightingModel.blinn
Run Code Online (Sandbox Code Playgroud)

下面的屏幕截图显示了同一场景之间的差异.注意即使灯光相同,地板也会从绿色变为黄色.

场景包含一个方向光和一个环境光.

用于再现场景的文件:https://www.dropbox.com/sh/cg5f7hyf1oonxfu/AAAJef7LhpSxuJyUSjqfGbmca?dl = 0.

即使它确实有效,设置SCNDisableLinearSpaceRendering为YES似乎禁用PBR.

我们的应用程序允许用户自定义定向灯的颜色.目标是在利用PBR的同时从iOS 10场景中的iOS 9场景重现相同的定制照明.

1)我们如何确保iOS 10场景与iOS 8/9场景完全相同?

2)如何在受益于PBR的同时实现#1?

iOS 8/9(在模拟器上运行):

在此输入图像描述

iOS 10(在用户设备上运行):

在此输入图像描述

Cra*_*lot 0

这是场景套件中已确认的错误。我们在 Bug Reporter 中提交了一份错误编号为 28459280 的报告。问题是 Metal 在 iOS 10 上始终设置locksAmbientWithDiffusetrue

据一位 Scene Kit 工程师介绍,解决方法是手动设置locksAmbientWithDiffuse相关true节点(在本例中为地板节点),然后调整 iOS 8/9 上的照明,直到达到所需的外观。

这应该确保 iOS 10 场景看起来与 iOS 8/9 场景相同。