我有一个简单的 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
值,而不管这些参数如何。也许它将这个新的 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/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |