SceneKit:如何在不禁用 PBR 的情况下在 iOS 10 上重现 iOS 9 照明颜色效果(一个方向,一个环境)?
SceneKit: how to reproduce iOS 9 lighting color effect (one directional, one ambient) on iOS 10 without disabling PBR?
As this thread 在 Apple 论坛上提到,iOS 10 上的灯现在变弱并改变了场景的外观。
线程建议将 SCNDisableLinearSpaceRendering
设置为 YES,但这没有用。换句话说,使用 SCNDisableLinearSpaceRendering
不会使您的场景在 iOS 10 和 iOS 9 上看起来一样——至少在我们的测试中不会。
我们也尝试过:
floorNode.geometry?.firstMaterial?.lightingModel = SCNMaterial.LightingModel.blinn
下面的截图显示了同一场景之间的区别。注意地板是如何从绿色变成黄色的,即使照明是一样的。
场景包含一盏平行光和一盏环境光。
场景再现文件:https://www.dropbox.com/sh/cg5f7hyf1oonxfu/AAAJef7LhpSxuJyUSjqfGbmca?dl=0.
即使它确实有效,将 SCNDisableLinearSpaceRendering
设置为 YES 似乎也会禁用 PBR。
我们的应用程序允许用户自定义方向灯的颜色。目标是在 iOS 10 场景中重现来自 iOS 9 场景的相同自定义光照,同时利用 PBR。
1) 我们如何确保 iOS 10 个场景与 iOS 8/9 个场景看起来相同?
2) 如何在受益于 PBR 的同时取得第一名?
iOS 8/9(在模拟器上运行):
iOS 10(运行 在用户设备上):
您可以像在 iOS 9
上渲染场景一样在 iOS 10
上渲染场景,方法是将其材质的光照模型从 SCNLightingModelPhysicallyBased
更改为 SCNLightingModelBlinn
。
示例:如果场景中只有一个 3D 模型:
for(SCNMaterial * mt in model.geometry.materials)
mt.lightingModelName = SCNLightingModelBlinn;
但是,这样做您将无法利用 PBR。如果您想继续使用 PBR,那么您可以使用 SCNLight
的 intensity
和 temperature
属性来获得不同的结果。
这是 Scene Kit 中已确认的错误。我们在 Bug Reporter 中提交了一份报告,错误号为 28459280。问题是 Metal 总是在 iOS 10 上将 locksAmbientWithDiffuse
设置为 true
。
根据一位 Scene Kit 工程师的说法,解决方法是手动将相关节点(在本例中为地板节点)的 locksAmbientWithDiffuse
设置为 true
,然后调整光照iOS 8/9 直到达到所需的外观。
这应该确保 iOS 10 个场景与 iOS 8/9 个场景看起来相同。
As this thread 在 Apple 论坛上提到,iOS 10 上的灯现在变弱并改变了场景的外观。
线程建议将 SCNDisableLinearSpaceRendering
设置为 YES,但这没有用。换句话说,使用 SCNDisableLinearSpaceRendering
不会使您的场景在 iOS 10 和 iOS 9 上看起来一样——至少在我们的测试中不会。
我们也尝试过:
floorNode.geometry?.firstMaterial?.lightingModel = SCNMaterial.LightingModel.blinn
下面的截图显示了同一场景之间的区别。注意地板是如何从绿色变成黄色的,即使照明是一样的。
场景包含一盏平行光和一盏环境光。
场景再现文件:https://www.dropbox.com/sh/cg5f7hyf1oonxfu/AAAJef7LhpSxuJyUSjqfGbmca?dl=0.
即使它确实有效,将 SCNDisableLinearSpaceRendering
设置为 YES 似乎也会禁用 PBR。
我们的应用程序允许用户自定义方向灯的颜色。目标是在 iOS 10 场景中重现来自 iOS 9 场景的相同自定义光照,同时利用 PBR。
1) 我们如何确保 iOS 10 个场景与 iOS 8/9 个场景看起来相同?
2) 如何在受益于 PBR 的同时取得第一名?
iOS 8/9(在模拟器上运行):
iOS 10(运行 在用户设备上):
您可以像在 iOS 9
上渲染场景一样在 iOS 10
上渲染场景,方法是将其材质的光照模型从 SCNLightingModelPhysicallyBased
更改为 SCNLightingModelBlinn
。
示例:如果场景中只有一个 3D 模型:
for(SCNMaterial * mt in model.geometry.materials)
mt.lightingModelName = SCNLightingModelBlinn;
但是,这样做您将无法利用 PBR。如果您想继续使用 PBR,那么您可以使用 SCNLight
的 intensity
和 temperature
属性来获得不同的结果。
这是 Scene Kit 中已确认的错误。我们在 Bug Reporter 中提交了一份报告,错误号为 28459280。问题是 Metal 总是在 iOS 10 上将 locksAmbientWithDiffuse
设置为 true
。
根据一位 Scene Kit 工程师的说法,解决方法是手动将相关节点(在本例中为地板节点)的 locksAmbientWithDiffuse
设置为 true
,然后调整光照iOS 8/9 直到达到所需的外观。
这应该确保 iOS 10 个场景与 iOS 8/9 个场景看起来相同。