Я пытаюсь реализовать мягкие тени, используя каскадное отображение теней.
Для этого теста я использую PCF:
for(int i = 0; i < 16; i++)
{
int index = int(16.0*random(worldPos.xyz, i))%16;
shadow += 1.0 - textureProj(projCoords + vec4(poissonDisk[index] / divisor, 0.0, 0.0), cascadeIndex);
}
shadow /= 16.0;
Проблема заключается в том, что я использую каскадное отображение теней, кажется, что размер объекта на карте теней не одинаков между разными направлениями камеры.
Вот пример (квад в правом нижнем углу рисует карту теней первого каскада):
Как видно на втором изображении, ширина щуки на карте теней меньше, чем на первом изображении.
Поскольку PCFчитая передний текст карты теней, независимо от ориентации камеры, щука выглядит меньше, чем прозрачнее.
Во многих алгоритмах мягких теней, которые я читаю в Интернете, я вижу, что они состоят из чтениянекоторые фронтальные элементы карты теней.
Мой вопрос: несовместим ли этот алгоритм с каскадным отображением теней или есть способ это исправить?