【问题标题】:soft shadow, shadow blur in SceneKit软阴影,SceneKit 中的阴影模糊
【发布时间】:2017-11-17 23:40:49
【问题描述】:

我添加一个节点并尝试使用 SceneKit 设置阴影模糊

这是我的灯光配置,我确实尝试设置 shadowRadius

light = [SCNLight light];
light.type = SCNLightTypeDirectional;
light.castsShadow = true;
light.shadowMode = SCNShadowModeForward;
light.shadowRadius = 5;
light.shadowMapSize=CGSizeMake(4000, 4000);
light.orthographicScale=25;
light.zNear=1;
light.zFar=1000;

但结果并不比我没有设置shadowRadius时更柔和 在这里:

我确实尝试添加样本计数

light = [SCNLight light];
light.type = SCNLightTypeDirectional;
light.castsShadow = true;
light.shadowMode = SCNShadowModeForward;
light.shadowRadius = 5;
// add samplecount
light.shadowSampleCount = 5;
light.shadowMapSize=CGSizeMake(4000, 4000);
light.orthographicScale=25;
light.zNear=1;
light.zFar=1000;

结果如下所示

阴影看起来很柔和,但是这个阴影从节点的底部开始(z坐标为0)。我花了很多时间只在节点边缘设置软阴影,而不是从底部设置。但没有结果。

添加两个节点交叉时也会出现此问题(不仅节点和几何体为SCNFoor)

我的问题是如何用方向光获得阴影模糊(软阴影)。

任何帮助将不胜感激!

【问题讨论】:

  • 来自docs.microsoft.com/en-us/windows/win32/dxtecharts/…,我猜你看到的问题可能是所谓的“彼得平移”?我希望 Apple 能够为 SceneKit 提供更好的概念和编程指南类型的内容。今天,下面提到的automaticallyAdjustsShadowProjection 属性仍然没有记录。

标签: ios scenekit


【解决方案1】:

Swift 4 / Xcode 9.2

通过这些设置我得到了很好的结果:

light2.castsShadow = true
light2.automaticallyAdjustsShadowProjection = true
light2.maximumShadowDistance = 20.0
light2.orthographicScale = 1

light2.shadowMapSize = CGSize(width: 2048, height: 2048)
light2.shadowMode = .forward
light2.shadowSampleCount = 128
light2.shadowRadius = 3
light2.shadowBias  = 32

shadowRadius 增加到 12 对我的模型有很大帮助,但随后我需要增加 shadowSampleCountshadowBias 以免出现伪影。

【讨论】:

    【解决方案2】:

    我真的可以用orthographicScale 制作阴影模糊。我不知道为什么,但这个技巧对我有用。希望可以帮助别人

    light.shadowMapSize=CGSizeMake(4000, 4000);
    light.orthographicScale=100; // bigger is softer
    

    我还将 shadowMapSize 更改为更大的值并设置 isJitteringEnabled antialiasingMode 以减少锯齿。

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 2016-06-11
      • 1970-01-01
      • 2015-07-01
      • 2016-02-07
      • 2019-01-10
      • 2015-09-17
      • 2021-02-19
      • 2011-08-24
      相关资源
      最近更新 更多