我无法在SceneKit中获得平滑的阴影。在下面,您将找到将两盏灯都添加到我的场景以及一张图片中的代码。我圈出了像素化的区域。
SceneKit提供的基本几何图形都没有正确着色。
有人知道我该如何解决吗?
谢谢!
let directionalLight = SCNNode()
directionalLight.light = SCNLight()
directionalLight.light?.type = .directional
directionalLight.light?.castsShadow = true
directionalLight.eulerAngles = SCNVector3(0, -toRadians(angle: 45), -toRadians(angle: 60))
self.scene.rootNode.addChildNode(directionalLight)
let ambientLight = SCNNode()
ambientLight.light = SCNLight()
ambientLight.light?.type = .ambient
ambientLight.light?.color = UIColor.darkGray
ambientLight.light?.intensity = 5000
self.scene.rootNode.addChildNode(ambientLight)
答案 0 :(得分:5)
SceneKit
使用一种称为“阴影映射”的技术来渲染阴影。这些效果是这项技术的正常现象,但在您的情况下有些极端。
如果您想了解更多有关阴影贴图的信息,以及如何获得最佳效果的信息,那么值得Google查询
在您的情况下,我认为首先要看的是您的directionalLight
节点的position和它的SCNLight
的{{3}}。
为什么定向灯的位置?
SceneKit将从灯光角度渲染场景的仅深度图像,然后使用该图像来计算最终渲染中的像素是否处于阴影中。如果光线位置距离您的场景较远,则场景将仅占shadow map
的一小部分。
确保场景在shadow map
上有很多可用像素的另一种方法是通过简单地使用shadowMapSize
属性增加阴影贴图的大小。这样会增加渲染时间和GPU内存使用量,因此请尝试在此处找到“最佳点”。