@@ -81,7 +81,8 @@ void main()
|
||||
vec3 Ng = transform_direction(ViewMatrixInverse, vNg);
|
||||
vec3 N = imageLoad(in_normal_img, ivec3(texel, in_normal_img_layer_index)).xyz;
|
||||
|
||||
OcclusionData data = ambient_occlusion_search(vP, hiz_tx, texel, uniform_buf.ao.distance, 0.0, 8.0);
|
||||
OcclusionData data = ambient_occlusion_search(
|
||||
vP, hiz_tx, texel, uniform_buf.ao.distance, 0.0, 8.0);
|
||||
|
||||
float visibility;
|
||||
float visibility_error_out;
|
||||
|
||||
@@ -92,11 +92,15 @@ void main()
|
||||
|
||||
/* Light passes. */
|
||||
if (uniform_buf.render_pass.diffuse_light_id >= 0) {
|
||||
imageStore(rp_color_img, ivec3(texel, uniform_buf.render_pass.diffuse_light_id), vec4(diffuse_light, 1.0));
|
||||
imageStore(rp_color_img,
|
||||
ivec3(texel, uniform_buf.render_pass.diffuse_light_id),
|
||||
vec4(diffuse_light, 1.0));
|
||||
}
|
||||
if (uniform_buf.render_pass.specular_light_id >= 0) {
|
||||
vec3 specular_light = reflection_light + refraction_light;
|
||||
imageStore(rp_color_img, ivec3(texel, uniform_buf.render_pass.specular_light_id), vec4(specular_light, 1.0));
|
||||
imageStore(rp_color_img,
|
||||
ivec3(texel, uniform_buf.render_pass.specular_light_id),
|
||||
vec4(specular_light, 1.0));
|
||||
}
|
||||
if (uniform_buf.render_pass.shadow_id >= 0) {
|
||||
imageStore(rp_value_img, ivec3(texel, uniform_buf.render_pass.shadow_id), vec4(shadow));
|
||||
|
||||
@@ -17,7 +17,8 @@ void main()
|
||||
out_color = texelFetch(in_combined_tx, texel_film, 0);
|
||||
}
|
||||
else if (uniform_buf.film.display_storage_type == PASS_STORAGE_VALUE) {
|
||||
out_color.rgb = imageLoad(value_accum_img, ivec3(texel_film, uniform_buf.film.display_id)).rrr;
|
||||
out_color.rgb =
|
||||
imageLoad(value_accum_img, ivec3(texel_film, uniform_buf.film.display_id)).rrr;
|
||||
out_color.a = 1.0;
|
||||
}
|
||||
else if (uniform_buf.film.display_storage_type == PASS_STORAGE_COLOR) {
|
||||
|
||||
@@ -68,7 +68,8 @@ FilmSample film_sample_get(int sample_n, ivec2 texel_film)
|
||||
# ifdef SCALED_RENDERING
|
||||
/* We need to compute the real distance and weight since a sample
|
||||
* can be used by many final pixel. */
|
||||
vec2 offset = uniform_buf.film.subpixel_offset - vec2(texel_film % uniform_buf.film.scaling_factor);
|
||||
vec2 offset = uniform_buf.film.subpixel_offset -
|
||||
vec2(texel_film % uniform_buf.film.scaling_factor);
|
||||
film_sample.weight = film_filter_weight(uniform_buf.film.filter_size, len_squared(offset));
|
||||
# endif
|
||||
|
||||
@@ -430,7 +431,8 @@ float film_history_blend_factor(float velocity,
|
||||
/* Linearly blend when history gets below to 25% of the bbox size. */
|
||||
blend *= saturate(distance_to_luma_clip * 4.0 + 0.1);
|
||||
/* Discard out of view history. */
|
||||
if (any(lessThan(texel, vec2(0))) || any(greaterThanEqual(texel, vec2(uniform_buf.film.extent)))) {
|
||||
if (any(lessThan(texel, vec2(0))) || any(greaterThanEqual(texel, vec2(uniform_buf.film.extent))))
|
||||
{
|
||||
blend = 1.0;
|
||||
}
|
||||
/* Discard history if invalid. */
|
||||
@@ -645,7 +647,8 @@ void film_process_data(ivec2 texel_film, out vec4 out_color, out float out_depth
|
||||
FilmSample film_sample = film_sample_get(0, texel_film);
|
||||
|
||||
if (uniform_buf.film.use_reprojection || film_sample.weight < film_distance) {
|
||||
vec4 normal = texelFetch(rp_color_tx, ivec3(film_sample.texel, uniform_buf.render_pass.normal_id), 0);
|
||||
vec4 normal = texelFetch(
|
||||
rp_color_tx, ivec3(film_sample.texel, uniform_buf.render_pass.normal_id), 0);
|
||||
float depth = texelFetch(depth_tx, film_sample.texel, 0).x;
|
||||
vec4 vector = velocity_resolve(vector_tx, film_sample.texel, depth);
|
||||
/* Transform to pixel space. */
|
||||
@@ -658,7 +661,8 @@ void film_process_data(ivec2 texel_film, out vec4 out_color, out float out_depth
|
||||
}
|
||||
else {
|
||||
out_depth = imageLoad(depth_img, texel_film).r;
|
||||
if (uniform_buf.film.display_id != -1 && uniform_buf.film.display_id == uniform_buf.film.normal_id) {
|
||||
if (uniform_buf.film.display_id != -1 &&
|
||||
uniform_buf.film.display_id == uniform_buf.film.normal_id) {
|
||||
out_color = imageLoad(color_accum_img, ivec3(texel_film, uniform_buf.film.display_id));
|
||||
}
|
||||
}
|
||||
@@ -682,10 +686,16 @@ void film_process_data(ivec2 texel_film, out vec4 out_color, out float out_depth
|
||||
uniform_buf.render_pass.specular_light_id,
|
||||
rp_color_tx,
|
||||
specular_light_accum);
|
||||
film_sample_accum(
|
||||
src, uniform_buf.film.volume_light_id, uniform_buf.render_pass.volume_light_id, rp_color_tx, volume_light_accum);
|
||||
film_sample_accum(
|
||||
src, uniform_buf.film.emission_id, uniform_buf.render_pass.emission_id, rp_color_tx, emission_accum);
|
||||
film_sample_accum(src,
|
||||
uniform_buf.film.volume_light_id,
|
||||
uniform_buf.render_pass.volume_light_id,
|
||||
rp_color_tx,
|
||||
volume_light_accum);
|
||||
film_sample_accum(src,
|
||||
uniform_buf.film.emission_id,
|
||||
uniform_buf.render_pass.emission_id,
|
||||
rp_color_tx,
|
||||
emission_accum);
|
||||
}
|
||||
film_store_color(dst, uniform_buf.film.diffuse_light_id, diffuse_light_accum, out_color);
|
||||
film_store_color(dst, uniform_buf.film.specular_light_id, specular_light_accum, out_color);
|
||||
@@ -713,18 +723,29 @@ void film_process_data(ivec2 texel_film, out vec4 out_color, out float out_depth
|
||||
uniform_buf.render_pass.specular_color_id,
|
||||
rp_color_tx,
|
||||
specular_color_accum);
|
||||
film_sample_accum(
|
||||
src, uniform_buf.film.environment_id, uniform_buf.render_pass.environment_id, rp_color_tx, environment_accum);
|
||||
film_sample_accum(src, uniform_buf.film.shadow_id, uniform_buf.render_pass.shadow_id, rp_value_tx, shadow_accum);
|
||||
film_sample_accum(
|
||||
src, uniform_buf.film.ambient_occlusion_id, uniform_buf.render_pass.ambient_occlusion_id, rp_value_tx, ao_accum);
|
||||
film_sample_accum(src,
|
||||
uniform_buf.film.environment_id,
|
||||
uniform_buf.render_pass.environment_id,
|
||||
rp_color_tx,
|
||||
environment_accum);
|
||||
film_sample_accum(src,
|
||||
uniform_buf.film.shadow_id,
|
||||
uniform_buf.render_pass.shadow_id,
|
||||
rp_value_tx,
|
||||
shadow_accum);
|
||||
film_sample_accum(src,
|
||||
uniform_buf.film.ambient_occlusion_id,
|
||||
uniform_buf.render_pass.ambient_occlusion_id,
|
||||
rp_value_tx,
|
||||
ao_accum);
|
||||
film_sample_accum_mist(src, mist_accum);
|
||||
}
|
||||
film_store_color(dst, uniform_buf.film.diffuse_color_id, diffuse_color_accum, out_color);
|
||||
film_store_color(dst, uniform_buf.film.specular_color_id, specular_color_accum, out_color);
|
||||
film_store_color(dst, uniform_buf.film.environment_id, environment_accum, out_color);
|
||||
film_store_color(dst, uniform_buf.film.shadow_id, vec4(vec3(shadow_accum), 1.0), out_color);
|
||||
film_store_color(dst, uniform_buf.film.ambient_occlusion_id, vec4(vec3(ao_accum), 1.0), out_color);
|
||||
film_store_color(
|
||||
dst, uniform_buf.film.ambient_occlusion_id, vec4(vec3(ao_accum), 1.0), out_color);
|
||||
film_store_value(dst, uniform_buf.film.mist_id, mist_accum, out_color);
|
||||
}
|
||||
|
||||
|
||||
@@ -392,13 +392,17 @@ void output_aov(vec4 color, float value, uint hash)
|
||||
#if defined(MAT_RENDER_PASS_SUPPORT) && defined(GPU_FRAGMENT_SHADER)
|
||||
for (int i = 0; i < AOV_MAX && i < uniform_buf.render_pass.aovs.color_len; i++) {
|
||||
if (uniform_buf.render_pass.aovs.hash_color[i].x == hash) {
|
||||
imageStore(rp_color_img, ivec3(ivec2(gl_FragCoord.xy), uniform_buf.render_pass.color_len + i), color);
|
||||
imageStore(rp_color_img,
|
||||
ivec3(ivec2(gl_FragCoord.xy), uniform_buf.render_pass.color_len + i),
|
||||
color);
|
||||
return;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < AOV_MAX && i < uniform_buf.render_pass.aovs.value_len; i++) {
|
||||
if (uniform_buf.render_pass.aovs.hash_value[i].x == hash) {
|
||||
imageStore(rp_value_img, ivec3(ivec2(gl_FragCoord.xy), uniform_buf.render_pass.value_len + i), vec4(value));
|
||||
imageStore(rp_value_img,
|
||||
ivec3(ivec2(gl_FragCoord.xy), uniform_buf.render_pass.value_len + i),
|
||||
vec4(value));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,7 +189,8 @@ void main()
|
||||
ivec2 sample_texel = texel + offset;
|
||||
|
||||
/* Reject samples outside of valid neighbor tiles. */
|
||||
ivec2 sample_tile = ivec2(sample_texel * uniform_buf.raytrace.resolution_scale) / int(tile_size);
|
||||
ivec2 sample_tile = ivec2(sample_texel * uniform_buf.raytrace.resolution_scale) /
|
||||
int(tile_size);
|
||||
ivec2 sample_tile_relative = sample_tile - ivec2(tile_coord);
|
||||
if (neighbor_tile_mask_bit_get(invalid_neighbor_tile_mask, sample_tile_relative)) {
|
||||
continue;
|
||||
|
||||
@@ -19,7 +19,8 @@ void main()
|
||||
uvec2 tile_coord = unpackUvec2x16(tiles_coord_buf[gl_WorkGroupID.x]);
|
||||
ivec2 texel = ivec2(gl_LocalInvocationID.xy + tile_coord * tile_size);
|
||||
|
||||
ivec2 texel_fullres = texel * uniform_buf.raytrace.resolution_scale + uniform_buf.raytrace.resolution_bias;
|
||||
ivec2 texel_fullres = texel * uniform_buf.raytrace.resolution_scale +
|
||||
uniform_buf.raytrace.resolution_bias;
|
||||
|
||||
bool valid_texel = in_texture_range(texel_fullres, stencil_tx);
|
||||
uint closure_bits = (!valid_texel) ? 0u : texelFetch(stencil_tx, texel_fullres, 0).r;
|
||||
|
||||
@@ -20,7 +20,8 @@ void main()
|
||||
uvec2 tile_coord = unpackUvec2x16(tiles_coord_buf[gl_WorkGroupID.x]);
|
||||
ivec2 texel = ivec2(gl_LocalInvocationID.xy + tile_coord * tile_size);
|
||||
|
||||
ivec2 texel_fullres = texel * uniform_buf.raytrace.resolution_scale + uniform_buf.raytrace.resolution_bias;
|
||||
ivec2 texel_fullres = texel * uniform_buf.raytrace.resolution_scale +
|
||||
uniform_buf.raytrace.resolution_bias;
|
||||
|
||||
float depth = texelFetch(hiz_tx, texel_fullres, 0).r;
|
||||
vec2 uv = (vec2(texel_fullres) + 0.5) * uniform_buf.raytrace.full_resolution_inv;
|
||||
|
||||
@@ -130,7 +130,8 @@ void main(void)
|
||||
accum /= accum_weight;
|
||||
|
||||
if (uniform_buf.render_pass.diffuse_light_id >= 0) {
|
||||
imageStore(rp_color_img, ivec3(texel, uniform_buf.render_pass.diffuse_light_id), vec4(accum, 1.0));
|
||||
imageStore(
|
||||
rp_color_img, ivec3(texel, uniform_buf.render_pass.diffuse_light_id), vec4(accum, 1.0));
|
||||
}
|
||||
|
||||
/* This pass uses additive blending.
|
||||
|
||||
@@ -77,7 +77,8 @@ void main()
|
||||
imageStore(rp_cryptomatte_img, out_texel, cryptomatte_output);
|
||||
}
|
||||
output_renderpass_color(uniform_buf.render_pass.normal_id, vec4(out_normal, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.diffuse_color_id, vec4(g_diffuse_data.color, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.diffuse_color_id,
|
||||
vec4(g_diffuse_data.color, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.specular_color_id, vec4(specular_color, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.emission_id, vec4(g_emission, 1.0));
|
||||
#endif
|
||||
|
||||
@@ -121,7 +121,8 @@ void main()
|
||||
imageStore(rp_cryptomatte_img, out_texel, cryptomatte_output);
|
||||
}
|
||||
output_renderpass_color(uniform_buf.render_pass.normal_id, vec4(out_normal, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.diffuse_color_id, vec4(g_diffuse_data.color, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.diffuse_color_id,
|
||||
vec4(g_diffuse_data.color, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.diffuse_light_id, vec4(diffuse_light, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.specular_color_id, vec4(specular_color, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.specular_light_id, vec4(specular_light, 1.0));
|
||||
|
||||
@@ -158,7 +158,8 @@ vec3 volume_shadow(LightData ld, vec3 ray_wpos, vec3 L, float l_dist, sampler3D
|
||||
/* TODO use shadow maps instead. */
|
||||
vec3 shadow = vec3(1.0);
|
||||
for (float s = 1.0; s < VOLUMETRIC_SHADOW_MAX_STEP && s <= uniform_buf.volumes.shadow_steps;
|
||||
s += 1.0) {
|
||||
s += 1.0)
|
||||
{
|
||||
vec3 pos = ray_wpos + L * s;
|
||||
|
||||
vec3 ndc = project_point(ProjectionMatrix, transform_point(ViewMatrix, pos));
|
||||
|
||||
Reference in New Issue
Block a user