Мягкая тень, размытие тени в 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
, чтобы уменьшить наложение.