Cra*_*lot 4 xcode scenekit swift virtual-reality arkit
屏幕截图 #1 显示了一个简单的 SceneKit 场景,只有环境光(显式添加,不是默认的)。
屏幕截图#2 显示了添加聚光灯后发生的情况。整个地板都变黑了。在 SceneKit 编辑器中添加聚光灯后,该聚光灯具有默认属性。
定向光也会发生这种情况。
需要明确的是,场景默认包含环境照明。然而,在添加聚光灯/定向光之前,我们明确添加了环境光(甚至测试了两个环境光) 。所以这个问题中提到的默认光理论不再适用。因此造成混乱。
据了解,聚光灯和定向灯应该向场景的特定区域添加光线。但他们不应该把范围之外的区域涂黑,对吗?
3D 图形和 SceneKit 新手,因此非常感谢任何建议。
\n\n空的 SceneKit 场景(没有任何添加的灯光)具有默认的全向光,您可以轻松打开或关闭:
\n
sceneView.autoenablesDefaultLighting = true\nRun Code Online (Sandbox Code Playgroud)\n让我们看看苹果文档是如何描述的:
\n\n\n如果此属性\xe2\x80\x99s 值为false(默认值),则 SceneKit 用于渲染场景的唯一光源是场景图中包含的光源。如果将该值更改为true ,则在渲染不包含灯光或仅包含环境光的场景时,SceneKit 会自动添加并放置全向光源。
\n
当您将灯光添加到场景中时,它们的行为会相应变化。主要原则是:
\n如果添加新灯光,默认 SceneKit 的灯光会关闭。
\n如果有光,rays are parallel to any 3D surface表面就会是黑色的。
环境光是全向的并且没有衰减。它仅具有表面法线的阴影。
\n点光是全向的并且具有衰减(光根据距离而失去其强度)。
\n这就是场景中地板变黑的原因。
\n请记住 \xe2\x80\x93 您可以轻松打开或关闭任何灯:
\n@IBAction func turnLight(_ sender: NSButton) { \n\n if counter % 2 == 0 {\n ambientLightNode.isHidden = true\n } else {\n ambientLightNode.isHidden = false\n }\n counter += 1\n}\nRun Code Online (Sandbox Code Playgroud)\n当您照亮场景时,您需要使用多种灯光类型。如果仅使用定向光,场景中的某些对象表面将为黑色,因此请使用低强度 \xe2\x80\x93 200 至 500 流明 \xe2\x80\x93 的附加环境光来照亮这些黑色表面。不要使用太多点光源,因为每个点光源都是一组 6 个具有 90 度锥体的聚光灯。因此,每个打开阴影的点光源都是计算密集型的!
\n聚苯乙烯
\n如果您对 RealityKit 光照感兴趣,请阅读我在 Medium 上的故事。
\n