我有一个简单的 SceneKit 场景,只有两个光源(环境光源和全向光源)和一个模型。我注意到在 iOS 10 上运行时,我的场景显得完全黑暗(甚至在我使用 iOS 10 SDK 重新编译我的应用程序之前)。经过调查,我意识到我的环境光是唯一影响我的模型的光。
让泛光灯影响我的模型的唯一方法是让它非常接近它,或者将其强度(使用新的 setIntensity: 选择器)增加 倍5000000 .
更改 attenuationStartDistance 、attenuationEndDistance 和 attenuationFalloffExponent 的值并没有改变结果,考虑到如果我对两个距离都使用 0.0 那么我不应该期望任何衰减,但它发生了(因此需要使用这个巨大的强度值)。
即使我将 SCNDisableLinearSpaceRendering 键添加到我的 Info.plist 或 SCNDisableWideGamut 键,此结果也不会改变。
是我遗漏了一些新参数还是 iOS 10 错误?
Best Answer-推荐答案 strong>
在更改 attenuationStartDistance 、attenuationEndDistance 和 attenuationFalloffExponent 的值后,我设法更改了结果,但仅在使用那个巨大的 强度 值。 iOS 10 绝对不会忽略这些参数。
然而,iOS 10 似乎在前一个之上应用了另一个衰减。它还会自动衰减 intensity 值,而不管这些参数如何。也许它将这个新的 intensity 参数视为在基于物理的渲染器中,即使它不是?
因此,如果您有一个遥远的全向光源,您似乎仍然需要一个较大的 intensity 才能使其在远处足够亮,即使您禁用了衰减。
编辑
iOS 10 确实使用基于物理的光照模型作为新的默认值!加载模型后,iOS 9 将具有 SCNLightingModelBlinn 用于 Material 的 lightingModelName 属性,而 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/
|