我在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)

发布于 2018-12-29 02:01:34
SceneKit使用一种称为“阴影映射”的技术来呈现阴影。这些效果在这种技术中是正常的,但在您的情况下是有点极端的。
如果您想知道更多的话,很多关于影子映射的信息以及如何从中获得最好的结果都是可用的,值得进行Google查询。
在您的例子中,我认为首先要查看的是directionalLight节点的shadowMapSize和它的SCNLight的shadowMapSize。
为什么方向灯的位置?SceneKit会从光线的角度只渲染你的场景的深度图像,然后使用这个图像来计算你最后渲染中的像素是否在阴影中。如果光的位置远离你的场景,那么场景将只占据这个shadow map的一小部分。
确保场景在shadow map上有很多可用像素的另一种方法是使用shadowMapSize属性增加阴影映射的大小。这将增加渲染时间和GPU内存使用难度,因此尝试在这里找到一个“甜蜜点”。
https://stackoverflow.com/questions/53965822
复制相似问题