屏幕截图#1显示了一个只有环境光的简单SceneKit场景(明确添加,而不是默认的)。
屏幕截图#2显示添加聚光灯后会发生什么。整个楼层变黑了。在SceneKit编辑器中添加聚光灯后,此聚光灯具有默认属性。
定向灯也会发生这种情况。
要清楚,可以理解,场景默认包含环境光。但是,在添加点/方向光之前,我们明确添加了环境光(甚至用两个测试)。因此this question中提到的默认光理论不再适用。因此混乱。
聚光灯和方向灯应该为场景的特定区域添加光线,这是可以理解的。但是他们不应该把范围以外的区域涂黑,对吗?
3D图形和SceneKit的新手,所以非常感谢任何建议。
答案 0 :(得分:3)
一个空的SceneKit场景(不添加任何灯光)具有默认的全向灯光,您可以轻松打开或关闭该灯光:
sceneView.autoenablesDefaultLighting = true
让我们看看Apple文档对此有何评论:
如果此属性的值为 false (默认值),则SceneKit用于渲染场景的唯一光源是场景图中包含的光源。如果将值更改为 true ,则在渲染c 不保持光或仅包含环境光的场景时,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度圆锥形的射灯。因此,每个具有打开阴影的点光源都需要大量计算!