Простой, самый простой SSR в GLSL
Я экспериментирую, пытаясь реализовать "как можно более простой " SSR в GLSL. Есть ли шанс, что кто-нибудь может помочь мне установить чрезвычайно простой код ssr?
Мне не нужны (на данный момент) какие-либо расчеты шероховатости / металличности, никакого Френеля, никакого эффекта затухания и затухания, ничего необычного - я просто хочу самую простую установку, которую я могу понять, изучить и, возможно, позже улучшить.
У меня есть 4 исходные текстуры: Цвет, Положение, Нормальный, и копия изображения предыдущего финального кадра (Отражение)
attribute.position - это текстура позиции (FLOAT16F) - WorldSpace
attribute.normal - это нормальная текстура (FLOAT16F) - WorldSpace
sys_CameraPosition - это позиция глаза в WorldSpace.
должно быть направление отражения вWorldSpace
текстура (SOURCE_2, projectedCoord.xy)- это текстура позиции в текущей конечной точкекаталога- отражения
vec3 rd = normalize(reflect(attributes.position - sys_CameraPosition, attributes.normal));
vec2 uvs;
vec4 projectedCoord;
for (int i = 0; i < 10; i++)
{
// Calculate screen space position from ray's current world position:
projectedCoord = sys_ProjectionMatrix * sys_ViewMatrix * vec4(attributes.position + rd, 1.0);
projectedCoord.xy /= projectedCoord.w;
projectedCoord.xy = projectedCoord.xy * 0.5 + 0.5;
// this bit is tripping me up
if (distance(texture(SOURCE_2, projectedCoord.xy).xyz, (attributes.position + rd)) > 0.1)
rd += rd;
else
uvs = projectedCoord.xy;
break;
}
out_color += (texture(SOURCE_REFL, uvs).rgb);
Возможно ли это, используя координаты worldSpace? Когда я умножаю выходные данные первого прохода на viewMatrix так же, как на modelMatrix, мои легкие вычисления растут, потому что они также находятся в worldSpace...
К сожалению, в интернете нет базовых учебных пособий по SSR, которые объясняют только бит SSR и ничего больше, поэтому я подумал, что я попробую здесь, я действительно не могу разобраться в этом...