iOS 10 : SCNLight of type Omni ignoring attenuation values?

标签 ios scenekit ios10

我有一个简单的 SceneKit 场景,只有两个光源(环境光源和全向光源)和一个模型。我注意到,在 iOS 10 上运行时,我的场景显得完全黑暗(甚至在我使用 iOS 10 SDK 重新编译我的应用程序之前)。经过调查,我意识到我的环境光是唯一影响我的模型的因素。

让全向光影响模型的唯一方法是将其真正接近模型,或者将其强度增加 setIntensity: 选择器) 5000000

更改attenuationStartDistanceattenuationEndDistanceattenuationFalloffExponent的值并没有改变结果,这真的很奇怪,考虑到如果我对于两个距离都使用 0.0 那么我不应该期望任何衰减,但它确实发生了(因此需要使用这个巨大的强度值)。

即使我将 SCNDisableLinearSpaceRendering 键添加到 Info.plistSCNDisableWideGamut 键,此结果也不会改变。

我是否缺少一些新参数,或者这是一个 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/

相关文章:

ios - 如何使用callkit获取来电号码

ios - 是否有 SKAudioNode 的 isPlaying() 等价物?

scenekit - ARKit:再现项目点功能

ios - 带有 ARSCNView 的 UIViewController 在显示在屏幕上之前需要花费大量时间

swift - 根据屏幕尺寸调整 3D 立方体的大小

ios - 如何每天重复一个 UNUserNotification?

ios - 什么时候获取 apple-app-site-association 文件?

ios - 当圆形蒙版应用于 ImageView 时,UIImageView 中的图像不显示在 UITableView 中,除非滚动

ios - 如何将制服传递给着色器

ios - __NSCFNumber stringByAddingPercentEncodingWithAllowedCharacters 无法识别的选择器错误