Кажется невозможным удалить такой перспективный псевдоним, когда поверхность почти параллельна направлению света.
Я проверил несколько различных методов удаления теневых угрей:
Судя по всему, что я вижу во всем, что я могу найти в Google и в моих книгах, это, по сути, неразрешимая проблема. Однако я знаю, что должны быть способы обойти это, потому что даже некоторые инди-игры имеют идеальные и гладкие тени карты теней.
Кто-нибудь готов поделиться этой тайной?
Возможно, вы уже нашли ответ, поскольку этому вопросу уже три года, но я все же хотел бы сказать, что артефакты на поверхностях, параллельных направлению света, должны быть зафиксированы с нормальным смещением. По крайней мере, я только что решил ту же проблему с этим подходом. это было
vec4 shadowPosition = lightMatrix * vec4(_position, 1.0);
float bias = 0.0002;
float visibility = (texture(shadow, shadowPosition.xy / 2. + .5).r - .5) * 2. < shadowPosition.z - bias ? 0.1: 1.0;
И теперь это
float bias = 0.02;
vec4 shadowPosition = lightMatrix * vec4(_position + _normal * bias, 1.);
float visibility = (texture(shadow, shadowPosition.xy / 2. + .5).r - .5) * 2. < shadowPosition.z ? 0.1: 1.0;
Да, граница тени теперь неровная, но я надеюсь, что некоторые другие методы помогут мне сгладить ее позже.