场景工具包 - 为什么添加聚光灯会使地板变黑?

4

截图 #1 显示了一个简单的 SceneKit 场景,仅使用环境光(显式添加,而非默认光源)。

截图 #2 显示了添加聚光灯后的效果。整个地面变黑了。在 SceneKit 编辑器中添加聚光灯后,该聚光灯具有默认属性。

定向光也会出现这种情况。

需要明确的是,场景默认包含环境光照射。然而,在添加聚光灯/定向光之前,我们已经显式添加了一种环境光(甚至尝试过两种)。因此,此问题 中提到的默认光照理论不再适用。这就是引起混淆的原因。

理解聚光灯和定向光应该只为场景的特定区域添加光源。但它们不应该使其作用域外的区域变黑,对吧?

我刚接触 3D 图形和 SceneKit,所以非常感谢任何建议。

截图 #1: 进入图像描述

截图 #2: 进入图像描述


这是当你没有自己的灯光时的默认照明。https://dev59.com/ooHba4cB1Zd3GeqPRG-s 您应该添加自己的全向光。 - James P
@JamesP,截图1中不清楚的是已经明确添加了环境光,因此引起了混淆。因此,添加聚光灯实际上会“减少”光线而不是增加它。您可以自行测试。先添加一个环境光(甚至两个),然后再添加一个聚光灯。 - Crashalot
你说得对,似乎在添加其他类型的光源之前仍然存在默认照明。我找到了这篇文章,它似乎解释了这个问题:https://dev59.com/NZbfa4cB1Zd3GeqPqTQ_ - James P
1个回答

6

问题是什么

一个没有添加任何光源的空的SceneKit场景,有一个默认的全向光,您可以轻松地打开或关闭它:

sceneView.autoenablesDefaultLighting = true

让我们看看苹果文档对此的解释:
如果此属性的值为false(默认值),则SceneKit在渲染场景时仅使用场景图中包含的光源。如果您将其更改为true,则当渲染不包含任何光源或仅包含环境光的场景时,SceneKit会自动添加和放置一个全向光源。
当您向场景中添加光源时,它们会相应地表现。主要原则如下:
  • 如果添加了新的光源,则默认的SceneKit光源将关闭。

  • 如果光线与任何3D表面平行,则该表面将变黑。

    • 这种行为适用于具有狭窄光锥的定向光聚光灯
    • 这是因为SceneKit没有全局光照选项(或次要光线)。
  • 环境光是全向的,没有衰减。它仅对表面法线进行着色。

  • 点光源是全向的,具有衰减(光强度随距离而减弱)。

这就是为什么你场景中的地板会变黑的原因

记住 - 您可以轻松打开或关闭任何光源:

@IBAction func turnLight(_ sender: NSButton) {   

    if counter % 2 == 0 {
        ambientLightNode.isHidden = true
    } else {
        ambientLightNode.isHidden = false
    }
    counter += 1
}

解决方案

在照明场景时,您需要使用多种光源类型。如果仅使用定向光,则场景中某些物体表面将会是黑色的,因此请使用附加的环境光,其强度较低 - 200至500流明 - 以照亮这些黑色表面。不要使用过多的点光源,因为每个点光源都是一组具有90度锥形的6个聚光灯。因此,每个打开阴影的点光源都需要计算资源!

P.S.

如果您对RealityKit照明感兴趣,请阅读我在Medium上的故事


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接