mirror of
https://github.com/TheRedShip/RT_GPU.git
synced 2025-09-27 18:48:36 +02:00
~ | Small fix
This commit is contained in:
@ -34,7 +34,6 @@ void main()
|
||||
float totalWeight = 0.;
|
||||
vec4 light = vec4(vec3(0.), 1.0);
|
||||
|
||||
|
||||
for (int x = -2; x <= 2; x++)
|
||||
{
|
||||
for (int y = -2; y <= 2; y++)
|
||||
@ -72,7 +71,7 @@ void main()
|
||||
if (u_pass == u_pass_count - 1)
|
||||
{
|
||||
vec4 color = light * imageLoad(color_texture, pixel_coords);
|
||||
imageStore(output_texture, pixel_coords, color);
|
||||
imageStore(output_texture, pixel_coords, sqrt(color));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -77,7 +77,7 @@ bool intersectTriangle(Ray ray, GPUTriangle obj, out hitInfo hit)
|
||||
vec3 pvec = cross(ray.direction, vertex2);
|
||||
float det = dot(vertex1, pvec);
|
||||
|
||||
if (abs(det) < 1e-8)
|
||||
if (abs(det) < 1e-10)
|
||||
return (false);
|
||||
|
||||
vec3 tvec = ray.origin - obj.position;
|
||||
|
@ -68,24 +68,18 @@ vec3 sampleQuadLight(vec3 position, GPUObject obj, int light_index, GPUMaterial
|
||||
return mat.emission * mat.color / (light_dist * light_dist) * pdf;
|
||||
}
|
||||
|
||||
vec3 sampleLights(vec3 position, inout uint rng_state)
|
||||
vec3 sampleLights(in vec3 position, inout uint rng_state)
|
||||
{
|
||||
vec3 light = vec3(0.0);
|
||||
int light_list_index = int(floor(randomValue(rng_state) * float(u_lightsNum)));
|
||||
int light_index = lightsIndex[light_list_index];
|
||||
|
||||
GPUObject light_obj = objects[light_index];
|
||||
GPUMaterial lightMat = materials[light_obj.mat_index];
|
||||
|
||||
for (int i = 0; i < u_lightsNum; i++)
|
||||
{
|
||||
int light_index = lightsIndex[i];
|
||||
|
||||
GPUObject obj = objects[light_index];
|
||||
GPUMaterial mat = materials[obj.mat_index];
|
||||
|
||||
if (obj.type == 0)
|
||||
light += sampleSphereLight(position, obj, light_index, mat, rng_state);
|
||||
else if (obj.type == 2)
|
||||
light += sampleQuadLight(position, obj, light_index, mat, rng_state);
|
||||
}
|
||||
|
||||
return (light);
|
||||
if (light_obj.type == 0)
|
||||
return float(u_lightsNum) * sampleSphereLight(position, light_obj, light_index, lightMat, rng_state);
|
||||
else if (light_obj.type == 2)
|
||||
return float(u_lightsNum) * sampleQuadLight(position, light_obj, light_index, lightMat, rng_state);
|
||||
}
|
||||
|
||||
vec2 getSphereUV(vec3 surfacePoint)
|
||||
@ -134,6 +128,7 @@ void calculateLightColor(GPUMaterial mat, hitInfo hit, inout vec3 color, inou
|
||||
{
|
||||
color *= mat.color;
|
||||
light += mat.emission * mat.color;
|
||||
// light += sampleLights(hit.position, rng_state);
|
||||
// if (mat.emission == 0.0)
|
||||
// light += sampleLights(hit.position, rng_state);
|
||||
}
|
||||
}
|
@ -204,6 +204,8 @@ vec3[2] pathtrace(Ray ray, inout uint rng_state)
|
||||
{
|
||||
imageStore(normal_texture, ivec2(gl_GlobalInvocationID.xy), vec4(normalize(hit.normal), 1.0));
|
||||
imageStore(position_texture, ivec2(gl_GlobalInvocationID.xy), vec4(normalize(hit.position), 1.0));
|
||||
// vec4 accum_normal = accumulate(normal_texture, accum_normal, normalize(hit.normal));
|
||||
// vec4 accum_position = accumulate(position_texture, accum_position, normalize(hit.position));
|
||||
}
|
||||
|
||||
float p = max(color.r, max(color.g, color.b));
|
||||
@ -269,11 +271,10 @@ void main()
|
||||
vec3[2] color_light = pathtrace(ray, rng_state);
|
||||
vec3 color = color_light[0] * color_light[1];
|
||||
|
||||
vec4 accum_color = accumulate(color_texture, accum_color, sqrt(color_light[0]));
|
||||
|
||||
vec4 accum_color = accumulate(color_texture, accum_color, (color_light[0]));
|
||||
vec4 accum_light = accumulate(light_accum_texture, accum_light, color_light[1]);
|
||||
vec4 final_light = sqrt(accum_light);
|
||||
imageStore(light_texture, pixel_coords, final_light);
|
||||
|
||||
imageStore(light_texture, pixel_coords, accum_light);
|
||||
|
||||
vec4 accum = accumulate(output_accum_texture, accum, color);
|
||||
vec4 final_output_color = sqrt(accum);
|
||||
|
Reference in New Issue
Block a user