首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SceneKit -为什么加点灯会使地板变黑?

SceneKit -为什么加点灯会使地板变黑?
EN

Stack Overflow用户
提问于 2016-07-27 23:38:29
回答 1查看 1.4K关注 0票数 4

屏幕截图#1显示了一个简单的SceneKit场景,只有一个环境光(显式添加,而不是默认的)。

屏幕截图#2显示了添加光点后发生的事情。整层楼变黑了。在SceneKit编辑器中添加光点灯后,此光点灯具有默认属性。

这也发生在一个定向光。

为了清楚起见,了解到场景默认包含环境照明。但是,在添加光斑/方向光之前,我们显式地添加了环境光(甚至用两个环境光进行了测试)。因此,这个问题中提到的默认光理论不再适用。因此产生了混乱。

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

新的三维图形和SceneKit,所以任何建议都非常感谢。

截图#1:

截图#2:

EN

回答 1

Stack Overflow用户

发布于 2020-03-04 16:50:23

有什么问题

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

代码语言:javascript
复制
sceneView.autoenablesDefaultLighting = true

让我们看看苹果的文档是怎么说的:

如果该属性的值为false (默认值),则SceneKit用于呈现场景的唯一光源是场景图中包含的光源。如果将值更改为true,则在呈现c不含灯光或只包含环境灯的场景时,SceneKit会自动添加和放置全方位光源。

当你在你的场景中添加灯光时,它们的行为也相应的。主要原则是

  • 如果添加了新的灯光,默认SceneKit的灯就会关闭。
  • 如果光是rays are parallel to any 3D surface,那么表面将是黑色的。
代码语言:javascript
复制
- This behavior is true for **Directional Light** or **Spot Light** with a narrow light-cone.
- That occurs because SceneKit has no [Global Illumination](https://en.wikipedia.org/wiki/Global_illumination) option (or secondary light rays).
  • 环境光是全方位的,没有衰变。它只对表面法线有阴影。
  • 点光是全方位的,并有衰减(光失去其强度取决于距离)。

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

记住-你可以很容易地打开或关闭任何灯:

代码语言:javascript
复制
@IBAction func turnLight(_ sender: NSButton) {   

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

解决方案

当你点亮你的场景时,你需要使用几种灯光类型。如果你只使用定向光,你的场景中的一些物体的表面将是黑色的,所以使用低强度的附加环境光-- 200到500流明--来减轻这些黑色表面。不要使用太多的点灯,因为每个点灯是一套6点灯与90度锥。因此,每一个点灯与打开阴影是计算密集型!

附注:

如果您对RealityKit照明感兴趣,请使用读我的故事中档。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38624883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档