SceneKit - 为啥添加聚光灯会使地板变黑?
Posted
技术标签:
【中文标题】SceneKit - 为啥添加聚光灯会使地板变黑?【英文标题】:SceneKit – Why does adding spot light blacken the floor?SceneKit - 为什么添加聚光灯会使地板变黑? 【发布时间】:2016-12-02 04:01:51 【问题描述】:屏幕截图 #1 显示了一个简单的 SceneKit 场景,其中只有一个环境光(明确添加,而不是默认的)。
屏幕截图 #2 显示了添加聚光灯后发生的情况。整个地板都变黑了。在 SceneKit 编辑器中添加聚光灯后,此聚光灯具有默认属性。
定向光也会发生这种情况。
需要明确的是,场景默认包含环境光。但是,我们在添加聚光灯/定向光之前明确地添加了一个环境光(甚至测试了两个)。所以this question中提到的默认光理论不再适用。因此混乱。
聚光灯和定向灯应该为场景的特定区域添加光线,这是可以理解的。但他们不应该把他们范围之外的区域变黑,对吧?
对于 3D 图形和 SceneKit 的新手,非常感谢任何建议。
屏幕截图 #1:
屏幕截图 #2:
【问题讨论】:
当您没有自己的灯时,这是默认照明。 ***.com/questions/24697574/…你应该添加自己的全向光。 @JamesP 在屏幕截图 1 中不清楚的是已经明确添加了环境光,因此造成了混乱。因此,添加聚光灯有效地“减少”了光线而不是增加了光线。你可以自己测试一下。添加环境光(甚至两个),然后添加聚光灯。 您说得对,在您添加另一种类型的光源之前,似乎仍有默认照明。我发现这篇文章似乎可以解释它***.com/questions/36705733/… 【参考方案1】:有什么问题
一个空的 SceneKit 的场景(没有添加任何灯光)有一个默认的全向灯,您可以轻松地打开或关闭它:
sceneView.autoenablesDefaultLighting = true
让我们看看 Apple 文档是怎么说的:
如果此属性的值为 false(默认值),则 SceneKit 用于渲染场景的唯一光源是场景图中包含的光源。如果您将该值更改为 true,SceneKit 会在渲染无灯光或仅包含环境光的场景时自动添加并放置全向光源。
当您将灯光添加到场景中时,它们会相应地表现。主要原则是:
如果添加了新灯光,默认 SceneKit 的灯光会关闭。
如果光线是rays are parallel to any 3D surface
,则该表面将是黑色的。
环境光是全方位的,没有衰减。它只有表面法线的阴影。
点光源是全向的并且有衰减(光的强度会根据距离而减弱)。
这就是你场景中的地板变黑的原因。
请记住 - 您可以轻松打开或关闭任何灯:
@IBAction func turnLight(_ sender: NSButton)
if counter % 2 == 0
ambientLightNode.isHidden = true
else
ambientLightNode.isHidden = false
counter += 1
解决方案
当您为场景照明时,您需要使用多种灯光类型。如果您只使用定向光,场景中的某些对象的表面将是黑色的,因此请使用额外的低强度环境光(200 到 500 流明)来照亮这些黑色表面。不要使用过多的点光源,因为每个点光源是一组 6 个具有 90 度圆锥的聚光灯。所以每个开启阴影的点光源都是计算密集型的!
附言
如果您对 RealityKit 照明感兴趣,请在 Medium 上read my story。
【讨论】:
以上是关于SceneKit - 为啥添加聚光灯会使地板变黑?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 webView.setWebChromeClient(new WebChromeClient());导致屏幕变黑?