EEVEE-Next: Add tracing options for diffuse rays
Also fixes diffuse surface always tracing even when tracing is off.
This commit is contained in:
parent
3a4fc2c94e
commit
f966205022
@ -652,7 +652,7 @@ class RENDER_PT_eevee_next_raytracing_reflection(EeveeRaytracingOptionsPanel):
|
||||
def draw_header(self, context):
|
||||
layout = self.layout
|
||||
if context.scene.eevee.ray_split_settings == 'UNIFIED':
|
||||
layout.label(text="Reflection & Refraction")
|
||||
layout.label(text="Reflection & Refraction & Diffuse")
|
||||
else:
|
||||
layout.label(text="Reflection")
|
||||
|
||||
@ -706,6 +706,35 @@ class RENDER_PT_eevee_next_denoise_refraction(EeveeRaytracingDenoisePanel):
|
||||
self.draw_internal(context.scene.eevee.refraction_options)
|
||||
|
||||
|
||||
class RENDER_PT_eevee_next_raytracing_diffuse(EeveeRaytracingOptionsPanel):
|
||||
bl_label = "Diffuse"
|
||||
bl_parent_id = "RENDER_PT_eevee_next_raytracing"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
return (context.scene.eevee.ray_split_settings == 'SPLIT')
|
||||
|
||||
def draw(self, context):
|
||||
self.draw_internal(context, context.scene.eevee.diffuse_options)
|
||||
|
||||
|
||||
class RENDER_PT_eevee_next_screen_trace_diffuse(EeveeRaytracingScreenOption):
|
||||
bl_parent_id = "RENDER_PT_eevee_next_raytracing_diffuse"
|
||||
|
||||
def draw(self, context):
|
||||
self.draw_internal(context.scene.eevee.diffuse_options)
|
||||
|
||||
|
||||
class RENDER_PT_eevee_next_denoise_diffuse(EeveeRaytracingDenoisePanel):
|
||||
bl_parent_id = "RENDER_PT_eevee_next_raytracing_diffuse"
|
||||
|
||||
def draw_header(self, context):
|
||||
self.draw_header_internal(context.scene.eevee.diffuse_options)
|
||||
|
||||
def draw(self, context):
|
||||
self.draw_internal(context.scene.eevee.diffuse_options)
|
||||
|
||||
|
||||
class RENDER_PT_eevee_shadows(RenderButtonsPanel, Panel):
|
||||
bl_label = "Shadows"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
@ -1240,10 +1269,13 @@ classes = (
|
||||
RENDER_PT_eevee_next_raytracing,
|
||||
RENDER_PT_eevee_next_raytracing_reflection,
|
||||
RENDER_PT_eevee_next_raytracing_refraction,
|
||||
RENDER_PT_eevee_next_raytracing_diffuse,
|
||||
RENDER_PT_eevee_next_screen_trace_reflection,
|
||||
RENDER_PT_eevee_next_screen_trace_refraction,
|
||||
RENDER_PT_eevee_next_screen_trace_diffuse,
|
||||
RENDER_PT_eevee_next_denoise_reflection,
|
||||
RENDER_PT_eevee_next_denoise_refraction,
|
||||
RENDER_PT_eevee_next_denoise_diffuse,
|
||||
RENDER_PT_eevee_motion_blur,
|
||||
RENDER_PT_eevee_next_motion_blur,
|
||||
RENDER_PT_motion_blur_curve,
|
||||
|
@ -1510,5 +1510,12 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain)
|
||||
light->shadow_trace_distance = default_light.shadow_trace_distance;
|
||||
}
|
||||
}
|
||||
|
||||
if (!DNA_struct_member_exists(fd->filesdna, "SceneEEVEE", "RaytraceEEVEE", "diffuse_options"))
|
||||
{
|
||||
LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
|
||||
scene->eevee.diffuse_options = scene->eevee.reflection_options;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,12 @@ void RayTraceModule::init()
|
||||
|
||||
reflection_options_ = sce_eevee.reflection_options;
|
||||
refraction_options_ = sce_eevee.refraction_options;
|
||||
diffuse_options_ = sce_eevee.diffuse_options;
|
||||
tracing_method_ = RaytraceEEVEE_Method(sce_eevee.ray_tracing_method);
|
||||
|
||||
if (sce_eevee.ray_split_settings == 0) {
|
||||
refraction_options_ = reflection_options_;
|
||||
diffuse_options_ = reflection_options_;
|
||||
}
|
||||
}
|
||||
|
||||
@ -218,9 +220,9 @@ RayTraceResult RayTraceModule::trace(RayTraceBuffer &rt_buffer,
|
||||
RayTraceBuffer::DenoiseBuffer *denoise_buf = nullptr;
|
||||
|
||||
if (raytrace_closure == CLOSURE_DIFFUSE) {
|
||||
options = reflection_options_;
|
||||
options = diffuse_options_;
|
||||
generate_ray_ps = &generate_diffuse_ps_;
|
||||
trace_ray_ps = force_no_tracing ? &trace_diffuse_ps_ : &trace_diffuse_ps_;
|
||||
trace_ray_ps = force_no_tracing ? &trace_fallback_ps_ : &trace_diffuse_ps_;
|
||||
denoise_spatial_ps = &denoise_spatial_diffuse_ps_;
|
||||
denoise_bilateral_ps = &denoise_bilateral_diffuse_ps_;
|
||||
denoise_buf = &rt_buffer.diffuse;
|
||||
|
@ -164,6 +164,7 @@ class RayTraceModule {
|
||||
/** Copy of the scene options to avoid changing parameters during motion blur. */
|
||||
RaytraceEEVEE reflection_options_;
|
||||
RaytraceEEVEE refraction_options_;
|
||||
RaytraceEEVEE diffuse_options_;
|
||||
|
||||
RaytraceEEVEE_Method tracing_method_ = RAYTRACE_EEVEE_METHOD_NONE;
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
/* Could maybe become parameters. */
|
||||
#define RAY_BIAS_REFLECTION 0.02
|
||||
#define RAY_BIAS_REFRACTION 0.02
|
||||
#define RAY_BIAS_DIFFUSE 0.02
|
||||
#define RAY_BIAS_DIFFUSE 0.05
|
||||
|
||||
/* Returns view-space ray. */
|
||||
vec3 ray_generate_direction(vec2 noise, ClosureReflection reflection, vec3 V, out float pdf)
|
||||
@ -68,6 +68,5 @@ vec3 ray_generate_direction(vec2 noise, ClosureDiffuse diffuse, vec3 V, out floa
|
||||
|
||||
vec3 T, B, N = diffuse.N;
|
||||
make_orthonormal_basis(N, T, B);
|
||||
|
||||
return sample_cosine_hemisphere(Xi, N, T, B, pdf);
|
||||
}
|
||||
|
@ -238,6 +238,7 @@
|
||||
\
|
||||
.reflection_options = _DNA_DEFAULT_RaytraceEEVEE, \
|
||||
.refraction_options = _DNA_DEFAULT_RaytraceEEVEE, \
|
||||
.diffuse_options = _DNA_DEFAULT_RaytraceEEVEE, \
|
||||
\
|
||||
.light_cache_data = NULL, \
|
||||
.light_threshold = 0.01f, \
|
||||
|
@ -1895,6 +1895,7 @@ typedef struct SceneEEVEE {
|
||||
|
||||
struct RaytraceEEVEE reflection_options;
|
||||
struct RaytraceEEVEE refraction_options;
|
||||
struct RaytraceEEVEE diffuse_options;
|
||||
|
||||
struct LightCache *light_cache DNA_DEPRECATED;
|
||||
struct LightCache *light_cache_data;
|
||||
|
@ -8120,6 +8120,11 @@ static void rna_def_scene_eevee(BlenderRNA *brna)
|
||||
RNA_def_property_struct_type(prop, "RaytraceEEVEE");
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Refraction Trace Options", "EEVEE settings for tracing refractions");
|
||||
|
||||
prop = RNA_def_property(srna, "diffuse_options", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_struct_type(prop, "RaytraceEEVEE");
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Diffuse Trace Options", "EEVEE settings for tracing diffuse reflections");
|
||||
}
|
||||
|
||||
static void rna_def_scene_gpencil(BlenderRNA *brna)
|
||||
|
Loading…
Reference in New Issue
Block a user