mirror of
https://github.com/TheRedShip/RT_GPU.git
synced 2025-09-27 18:48:36 +02:00
+ | focal distance
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
/* By: ycontre <ycontre@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/09/27 14:52:10 by TheRed #+# #+# */
|
||||
/* Updated: 2024/12/23 19:04:53 by ycontre ### ########.fr */
|
||||
/* Updated: 2025/01/08 17:44:56 by ycontre ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -29,6 +29,7 @@
|
||||
# include <iostream>
|
||||
# include <fstream>
|
||||
# include <sstream>
|
||||
# include <vector>
|
||||
# include <string>
|
||||
# include <memory>
|
||||
# include <map>
|
||||
|
@ -71,7 +71,7 @@ MAT 255 255 255 0.0 1.0 1.0
|
||||
|
||||
sp 0 5 -4 3 30
|
||||
sp -4 4 0 3 31
|
||||
cu 4 6 2 5 8 5 32
|
||||
cu 4 7 2 5 8 5 32
|
||||
cu -20 4 0 5 8 5 32
|
||||
|
||||
MAT 30 30 30 0.0 0.0 0.0
|
||||
|
@ -135,7 +135,7 @@ vec3 pathtrace(Ray ray, inout uint rng_state)
|
||||
hitInfo hit = traceRay(ray);
|
||||
if (hit.obj_index == -1)
|
||||
{
|
||||
light += GetEnvironmentLight(ray);
|
||||
// light += GetEnvironmentLight(ray);
|
||||
// light += vec3(135 / 255.0f, 206 / 255.0f, 235 / 255.0f); //ambient color
|
||||
break;
|
||||
}
|
||||
@ -145,7 +145,7 @@ vec3 pathtrace(Ray ray, inout uint rng_state)
|
||||
|
||||
// RR
|
||||
float p = max(color.r, max(color.g, color.b));
|
||||
if (randomValue(rng_state) > p)
|
||||
if (randomValue(rng_state) > p && i > 1)
|
||||
break;
|
||||
color /= p;
|
||||
//
|
||||
@ -161,6 +161,33 @@ vec3 pathtrace(Ray ray, inout uint rng_state)
|
||||
return (color * light);
|
||||
}
|
||||
|
||||
Ray initRay(vec2 uv, inout uint rng_state)
|
||||
{
|
||||
float fov = 90.0;
|
||||
float focal_length = 1.0 / tan(radians(fov) / 2.0);
|
||||
|
||||
vec3 origin = u_cameraPosition;
|
||||
vec3 view_space_ray = normalize(vec3(uv.x, uv.y, -focal_length));
|
||||
vec3 ray_direction = normalize((inverse(u_viewMatrix) * vec4(view_space_ray, 0.0)).xyz);
|
||||
|
||||
float focus_distance = 4.5;
|
||||
float aperture = 0.25;
|
||||
|
||||
vec3 right = vec3(u_viewMatrix[0][0], u_viewMatrix[1][0], u_viewMatrix[2][0]);
|
||||
vec3 up = vec3(u_viewMatrix[0][1], u_viewMatrix[1][1], u_viewMatrix[2][1]);
|
||||
|
||||
vec3 focal_point = u_cameraPosition + ray_direction * focus_distance;
|
||||
|
||||
float r = sqrt(randomValue(rng_state));
|
||||
float theta = 2.0 * M_PI * randomValue(rng_state);
|
||||
vec2 lens_point = aperture * r * vec2(cos(theta), sin(theta));
|
||||
|
||||
origin += right * lens_point.x + up * lens_point.y;
|
||||
ray_direction = normalize(focal_point - origin);
|
||||
|
||||
return (Ray(origin, ray_direction));
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
ivec2 pixel_coords = ivec2(gl_GlobalInvocationID.xy);
|
||||
@ -175,22 +202,7 @@ void main()
|
||||
vec2 uv = ((vec2(pixel_coords) + jitter) / u_resolution) * 2.0 - 1.0;;
|
||||
uv.x *= u_resolution.x / u_resolution.y;
|
||||
|
||||
float fov = 90.0;
|
||||
float focal_length = 1.0 / tan(radians(fov) / 2.0);
|
||||
vec3 view_space_ray = normalize(vec3(uv.x, uv.y, -focal_length));
|
||||
|
||||
vec3 ray_direction = normalize((inverse(u_viewMatrix) * vec4(view_space_ray, 0.0)).xyz);
|
||||
|
||||
float focal_distance = 0.0;
|
||||
float aperture_size = 0.0;
|
||||
|
||||
float theta = randomValue(rng_state) * 2.0 * M_PI;
|
||||
float radius = sqrt(randomValue(rng_state)) * aperture_size;
|
||||
vec2 aperture_point = vec2(cos(theta) * radius, sin(theta) * radius);
|
||||
|
||||
vec3 ray_origin = u_cameraPosition + vec3(aperture_point, 0.0);
|
||||
|
||||
Ray ray = Ray(ray_origin, ray_direction);
|
||||
Ray ray = initRay(uv, rng_state);
|
||||
vec3 color = pathtrace(ray, rng_state);
|
||||
|
||||
float blend = 1.0 / float(u_frameCount + 1);
|
||||
|
@ -36,21 +36,21 @@ vec3 randomHemisphereDirection(vec3 normal, inout uint rng_state)
|
||||
return (direction * sign(dot(normal, direction)));
|
||||
}
|
||||
|
||||
vec3 GetEnvironmentLight(Ray ray)
|
||||
{
|
||||
vec3 sun_pos = vec3(-0.5, 0.5, 0.5);
|
||||
float SunFocus = 1.5;
|
||||
float SunIntensity = 1;
|
||||
// vec3 GetEnvironmentLight(Ray ray)
|
||||
// {
|
||||
// vec3 sun_pos = vec3(-0.5, 0.5, 0.5);
|
||||
// float SunFocus = 1.5;
|
||||
// float SunIntensity = 1;
|
||||
|
||||
vec3 GroundColour = vec3(0.5, 0.5, 0.5);
|
||||
vec3 SkyColourHorizon = vec3(135 / 255.0f, 206 / 255.0f, 235 / 255.0f);
|
||||
vec3 SkyColourZenith = SkyColourHorizon / 2.0;
|
||||
// vec3 GroundColour = vec3(0.5, 0.5, 0.5);
|
||||
// vec3 SkyColourHorizon = vec3(135 / 255.0f, 206 / 255.0f, 235 / 255.0f);
|
||||
// vec3 SkyColourZenith = SkyColourHorizon / 2.0;
|
||||
|
||||
float skyGradientT = pow(smoothstep(0, 0.4, ray.direction.y), 0.35);
|
||||
float groundToSkyT = smoothstep(-0.01, 0, ray.direction.y);
|
||||
vec3 skyGradient = mix(SkyColourHorizon, SkyColourZenith, skyGradientT);
|
||||
float sun = pow(max(0, dot(ray.direction, sun_pos.xyz)), SunFocus) * SunIntensity;
|
||||
// Combine ground, sky, and sun
|
||||
vec3 composite = mix(GroundColour, skyGradient, groundToSkyT) + sun * int(groundToSkyT >= 1);
|
||||
return composite;
|
||||
}
|
||||
// float skyGradientT = pow(smoothstep(0, 0.4, ray.direction.y), 0.35);
|
||||
// float groundToSkyT = smoothstep(-0.01, 0, ray.direction.y);
|
||||
// vec3 skyGradient = mix(SkyColourHorizon, SkyColourZenith, skyGradientT);
|
||||
// float sun = pow(max(0, dot(ray.direction, sun_pos.xyz)), SunFocus) * SunIntensity;
|
||||
// // Combine ground, sky, and sun
|
||||
// vec3 composite = mix(GroundColour, skyGradient, groundToSkyT) + sun * int(groundToSkyT >= 1);
|
||||
// return composite;
|
||||
// }
|
Reference in New Issue
Block a user