SceneKit –为什么添加聚光灯会使地板变黑?

问题描述 投票:3回答:1

屏幕截图1显示了一个简单的SceneKit场景,仅包含一个环境光(明确添加,不是默认的)。

屏幕快照2显示了添加聚光灯后会发生什么。整个地板变黑。在SceneKit编辑器中添加聚光灯后,此聚光灯具有默认属性。

这也发生在定向光下。

为了清楚起见,默认情况下该场景包含环境照明。但是,我们显式添加了环境光(甚至进行了两次测试)之前添加了点光源/定向光。因此,this question中提到的默认光源理论不再适用。因此造成混乱。

应该理解,聚光灯和定向光可以将光线添加到场景的特定区域。但是他们不应该使范围之外的区域变黑,对吧?

是3D图形和SceneKit的新手,因此非常感谢任何建议。

屏幕截图1:enter image description here

屏幕截图2:enter image description here

swift xcode scenekit scnnode scnlight
1个回答
1
投票

一个空的SceneKit的场景(不添加任何灯光)具有一个默认的全向灯光,您可以轻松打开或关闭它:

sceneView.autoenablesDefaultLighting = true

让我们看看Apple文档对此有何评论:

如果此属性的值为false(默认值),则SceneKit用于渲染场景的唯一光源是场景图中包含的光源。如果将值更改为true,则在渲染c 不保留光或仅包含环境光。的场景时,SceneKit会自动添加并放置全向光源。

将灯光添加到场景中时,它们的行为相应。主要原则是

  • 如果添加了新的灯光,默认的SceneKit的灯光将关闭。

  • 如果光线为rays are parallel to any 3D surface

  • ,则该表面将为黑色。
    • 这种行为是Direction Light的特征,有时是Spot Light的特征。
    • 这是因为SceneKit没有Global Illumination选项(或辅助光线)。
  • 环境光

  • 是全向的,并且具有NO衰减。仅对表面法线具有阴影。
  • 点光

  • 是全向的,并且具有衰减(光的强度取决于距离而消失)。

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

记住,您可以轻松打开或关闭任何灯:

@IBAction func turnLight(_ sender: NSButton) {   

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

解决方案:

当您为场景照明时,您需要使用多种光源类型。如果仅使用定向光,则场景中某些对象的表面将是黑色的,因此请使用低强度(200 ... 500流明)的其他环境光来照亮这些黑色表面。不要使用太多的点光源,因为每个点光源都是一组6个90度圆锥形的射灯。因此,每个带有阴影的点光源都需要大量计算!

© www.soinside.com 2019 - 2024. All rights reserved.