GLSL一个周末的光线追踪,如何增加景深以查看矩阵?

问题描述

我设置了着色器,以根据来自GLM的视图和投影矩阵生成光线,GLSL函数如下所示:

Ray Camera_getRay(inout uvec4 useed) {
    vec3 rayNDC = vec3(
        ((2.0f * fragCoord.x) / iResolution.x - 1.0f),(1.0f - (2.0f * fragCoord.y) / iResolution.y),1.0f
    );

    vec4 rayClip = vec4( rayNDC.x,rayNDC.y * -1,-1.0f,1.0f );

    vec4 rayCamera = inverse(projection) * rayClip;
    rayCamera.z = -1.0f,rayCamera.w = 0.0f;

    vec3 direction = normalize((inverse(view) * rayCamera).xyz);

    return Ray(position,direction);
}

我正在尝试按照Defocus Blur chapter中所述添加随机偏移。

我已经走了这么远:

float aperture = 0.1;
float lens_radius = aperture / 2;
vec3 rd = lens_radius * sampleUnitdisk(useed);

但是我不确定接下来如何处理rd,我是否只是将其添加到射线的位置?我还需要将其添加到射线方向吗?我会改变视图矩阵吗?任何帮助表示赞赏。

解决方法

在光线跟踪器中,我将(2D)随机偏移量添加到眼睛位置(确保运动在与虚拟视图平面平行的平面中),然后然后计算通过最初打算的投影点。

https://github.com/raybellis/RRT/blob/master/rrt/camera.cpp#L66