首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的阴影在SceneKit中被像素化/起伏?

为什么我的阴影在SceneKit中被像素化/起伏?
EN

Stack Overflow用户
提问于 2018-12-29 00:54:13
回答 1查看 307关注 0票数 3

我在SceneKit中很难获得平滑的阴影。下面你会发现的代码,增加了两个灯到我的场景,以及一个图片。我圈出了像素化的区域。

即使是SceneKit提供的基本几何图形也没有被正确地阴影化。

有人知道我怎么解决这个问题吗?

谢谢!

代码语言:javascript
复制
        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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-29 02:01:34

SceneKit使用一种称为“阴影映射”的技术来呈现阴影。这些效果在这种技术中是正常的,但在您的情况下是有点极端的。

如果您想知道更多的话,很多关于影子映射的信息以及如何从中获得最好的结果都是可用的,值得进行Google查询。

在您的例子中,我认为首先要查看的是directionalLight节点的shadowMapSize和它的SCNLightshadowMapSize

为什么方向灯的位置?SceneKit会从光线的角度只渲染你的场景的深度图像,然后使用这个图像来计算你最后渲染中的像素是否在阴影中。如果光的位置远离你的场景,那么场景将只占据这个shadow map的一小部分。

确保场景在shadow map上有很多可用像素的另一种方法是使用shadowMapSize属性增加阴影映射的大小。这将增加渲染时间和GPU内存使用难度,因此尝试在这里找到一个“甜蜜点”。

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

https://stackoverflow.com/questions/53965822

复制
相关文章

相似问题

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