GLSL中简单,最基本的SSR

时间:2017-08-11 06:04:24

标签: opengl reflection glsl ssr raymarching

我正在尝试在GLSL中实现“尽可能简单”SSR。有人可以帮我设置一个非常基本的ssr代码吗?

我不需要(现在)任何粗糙度/金属度计算,没有菲涅耳,没有淡入效果,没有任何幻想 - 我只想要最简单的设置,我可以理解,学习,甚至可以在以后进行改进。 / p>

我有4个源纹理:颜色,位置,法线和前一个最终帧图像的副本(反射)

attributes.position 是位置纹理(FLOAT16F) - WorldSpace

attributes.normal 是正常纹理(FLOAT16F) - WorldSpace

sys_CameraPosition 是眼睛在 WorldSpace 中的位置

rd 应该是 WorldSpace

中的反射方向

纹理(SOURCE_2,projectedCoord.xy)是当前reflection-dir端点的位置纹理

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位而没有别的,所以我想我会在这里试一试,我真的无法理解这个...

0 个答案:

没有答案