【问题标题】:SceneKit and ARKit – Soft shadows or blurred shadowsSceneKit 和 ARKit – 柔和阴影或模糊阴影
【发布时间】:2020-05-06 03:47:56
【问题描述】:

我在 ARKit 中设置了阴影,但结果不满意,我们需要与 safari 中的快速视图相同的阴影。请帮助我如何设置它。我们附上了两张图片。

代码

var light = SCNLight()
var lightNode = SCNNode()
light.castsShadow = true
light.automaticallyAdjustsShadowProjection = true
light.maximumShadowDistance = 20.0
light.orthographicScale = 1
light.type = .directional
light.shadowMapSize = CGSize(width: 2048, height: 2048)
light.shadowMode = .deferred
light.shadowSampleCount = 128
light.shadowRadius = 3
light.shadowBias = 32
light.zNear = 1
light.zFar = 1000
light.shadowColor = UIColor.black.withAlphaComponent(0.36)
lightNode.light = light2
lightNode.eulerAngles = SCNVector3(-Float.pi / 2, 0, 0)
self.sceneView.scene.rootNode.addChildNode(lightNode)

【问题讨论】:

    标签: ios swift scenekit augmented-reality arkit


    【解决方案1】:

    提供阴影偏移并增加阴影半径。使用这些值来获得所需的输出。

    light.shadowOffset = CGSize(width: 1, height: 1) //controls spread
    light.shadowOpacity = 0.5  // controls opacity
    light.shadowRadius = 5.0 // controls blur level
    

    【讨论】:

      【解决方案2】:

      如果您在场景中需要更模糊的阴影,请为 shadowRadius 实例属性使用更大的值。 shadowRadius 指定用于渲染接收器阴影的样本半径。

      默认值为 3.0

      var shadowRadius: CGFloat { get set }
      

      ...在实际代码中是这样的:

      lightNode.light?.shadowRadius = 20.0
      

      苹果文档says

      shadowRadius 是一个数字,用于指定灯光投射的阴影边缘周围的模糊程度。 SceneKit 通过将几何轮廓渲染成 2D 阴影贴图,然后使用阴影贴图中的几个加权样本来确定渲染场景中每个像素的阴影强度,从而产生软边阴影。该属性控制阴影贴图采样的半径。数字越小,阴影边缘清晰,像素化边缘,数字越大,阴影模糊

      另外,使用聚光灯而不是定向光,因为第一个会产生漂亮而模糊的阴影。

      lightNode.light?.type = .spot
      

      还有一个提示:将聚光灯固定在距离模型 2 米以上的位置,并为 spotOuterAngle 实例属性分配 179 度的值:

      lightNode.light?.spotOuterAngle = 179.0    /* default is 45 degrees */
      

      附言

      如果您想了解如何在 RealityKit 中使用模糊阴影,请阅读this post

      【讨论】:

        猜你喜欢
        • 2017-11-17
        • 2021-02-19
        • 1970-01-01
        • 1970-01-01
        • 2015-10-20
        • 2013-12-16
        • 2015-06-29
        • 2016-06-11
        相关资源
        最近更新 更多