我有一个简单的 SceneKit
场景,只有两个光源(环境光源和全向光源)和一个模型。我注意到,在 iOS 10
上运行时,我的场景显得完全黑暗(甚至在我使用 iOS 10
SDK 重新编译我的应用程序之前)。经过调查,我意识到我的环境光是唯一影响我的模型的因素。
让全向光影响模型的唯一方法是将其真正接近模型,或者将其强度增加 setIntensity:
选择器) 5000000
。
更改attenuationStartDistance
、attenuationEndDistance
和attenuationFalloffExponent
的值并没有改变结果,这真的很奇怪,考虑到如果我对于两个距离都使用 0.0
那么我不应该期望任何衰减,但它确实发生了(因此需要使用这个巨大的强度值)。
即使我将 SCNDisableLinearSpaceRendering
键添加到 Info.plist
或 SCNDisableWideGamut
键,此结果也不会改变。
我是否缺少一些新参数,或者这是一个 iOS 10
错误?
最佳答案
在更改 attenuationStartDistance 、 attenuationEndDistance 和 attenuationFalloffExponent 的值后,我成功地更改了结果,但仅限于使用那个巨大的 强度
值。 iOS 10
绝对不会忽略这些参数。
但是,iOS 10
似乎在前一个衰减的基础上应用了另一种衰减。无论这些参数如何,它还会自动衰减强度
值。也许它会像在基于物理的渲染器中一样对待这个新的intensity
参数,即使它不是?
因此,如果您有一个远处的全向光源,即使禁用衰减,您似乎仍然需要很大的强度
才能使其从远处看足够亮。
编辑
iOS 10
确实使用基于物理的光照模型作为新的默认值!加载模型后,iOS 9
将为 Material 的 lightingModelName
属性提供 SCNLightingModelBlinn
,而 iOS 10
将具有SCNLightingModelPhysicallyBased
。您可以通过在加载模型后更改该属性的值来实现 iOS 9
行为。
for(SCNMaterial * mt in model.geometry.materials)
mt.lightingModelName = SCNLightingModelBlinn;
关于iOS 10 : SCNLight of type Omni ignoring attenuation values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39652173/