柔和阴影,SceneKit中的阴影模糊

时间:2017-06-15 12:58:27

标签: ios scenekit

我添加一个节点并尝试使用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时更柔和 在这里: enter image description here

我确实尝试添加samplecount

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;

结果如下所示 enter image description here

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

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

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

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

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会对我的模型有很大帮助,但之后我需要增加 shadowSampleCount shadowBias 来获取工件。

答案 1 :(得分:1)

我真的可以使用orthographicScale进行阴影模糊。我不知道为什么,但这个伎俩对我有用。希望可以帮助别人

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

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