Источники света в A-Frame имеют полосатые артефакты в зависимости от расстояния до них. - PullRequest
1 голос
/ 27 мая 2020

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

Если я установлю для shadowMapHeight и shadowMapWidth значение 1024, артефакт немного отступит от источника света. Чтобы он полностью исчез, мне нужно поставить 4096, что многовато с точки зрения производительности. У меня не может быть всех источников света с картой теней 4k.

Подобный эффект сильно увеличивает shadowCamera, например, с 500 до 5000. но это вводит неправильные тени, удаленные от объектов (даже если я настраиваю shadowBias).

Я что-то делаю не так? Почему у фонарей с настройками по умолчанию есть эти проблемы? Может быть, это зависит от моделей?

Любая подсказка приветствуется

artifact

Ответы [ 2 ]

1 голос
/ 03 июня 2020

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

После просмотра 3. js - материал и подтверждая с помощью material.side, что на самом деле он двусторонний, я использовал material.shadowSide = THREE.BackSide, чтобы заставить заднюю сторону отбрасывать тень на переднюю, независимо от свойства двойной стороны модели / материала. Это решило проблему!

Конечно, имейте в виду, что если модель имеет неправильные нормали, т.е. не обращена наружу / не перевернута, это лицо снова будет иметь сбой.

1 голос
/ 29 мая 2020

Я загрузил довольно сложную анимированную модель ( эта ) как glTF из Sketchfab и мне удалось получить правильные тени (-i sh) со следующими параметрами:

<a-entity shadow="cast: true; receive: true" id="model1" gltf-model="scene.gltf"
  position="6 1.5 -12" scale="0.5 0.5 0.5" animation-mixer>
</a-entity>

<a-entity light="type: ambient; intensity:0.1;"></a-entity>

<a-entity id="sun" light="type: directional; color: #FFF; intensity: 0.9; castShadow: true; shadowCameraFar: 500;
    shadowCameraVisible: false;
    shadowBias: -0.001;
    shadowMapHeight:2048; shadowMapWidth:2048;
    shadowCameraLeft: -50; shadowCameraRight: 50;
    shadowCameraBottom: -50; shadowCameraTop: 50;" position="10 50 -10">
</a-entity>

Результат выглядел хорошо: result, но вы все равно можете увидеть некоторые артефакты. Кроме того, для Oculus Quest это было слишком большим стрессом.

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

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

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

Может это поможет.

...