Нужна помощь по добавлению глубины резкости в движок Path tracing
Возможно вопрос глупый, но... Захотел я как-то со скуки сделать ray casting, а затем на нём path tracing используя фрагментный шейдер. Теперь я пробую добавить depth of field. Я пускаю луч по текущему пикселю, затем добавляю к его точке назначения случайное значение в зависимости от апертуры, а затем к перед выпусканием луча из камеры -> в сдвинутый пиксель меняю направление луча так, чтобы он добрался до заданной точки дальше от камеры или ближе к камере, в зависимости от focalDistance. Но из-за этого и fov картинки начинает зависеть от фокусного расстояния. Можно ли не изменяя fov это реализовать?
Вот и функции:
vec2 randomPointOnCircle(in float R) {
float r = R * sqrt(random());
float theta = random() * 2 * 3.14159265;
return vec2(r * cos(theta), r * sin(theta));
}
vec3 depth_of_field(in vec2 fragPos, out vec2 randomizedPos) {
randomizedPos = fragPos + randomPointOnCircle(u_cameraAperture / 100);
vec3 rayDir = normalize(vec3(u_focalDist, randomizedPos));
return rayDir;
}