Мягкая тень, размытие тени в SceneKit

Я добавляю один node и пытаюсь установить размытие теневой картинки с помощью 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 это здесь: введите описание изображения здесь

Я попытался добавить 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;
Результат

выглядит следующим образом введите описание изображения здесь

тень кажется мягкой, но эта тень начинается со дна node (координата z равна 0). Я трачу много времени, чтобы установить мягкую тень только на краю node, а не снизу. Но результата нет.

Эта проблема также возникла при добавлении двух перекрестных node (не только node и геометрии как SCNFloor)

Моя проблема заключается в том, как получить теневое размытие (мягкая тень) с подсветкой направления.

любая помощь будет оценена!

Ответы

Ответ 1

Я действительно могу размыть тень с помощью orthographicScale. Я не знаю почему, но этот трюк работает для меня. Надежда может помочь кому-то

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

Я также изменяю shadowMapSize на большее значение и устанавливаю isJitteringEnabled antialiasingMode, чтобы уменьшить наложение.