From 2c19be2682fb47b62ac4b205366ac657567a8267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Fri, 19 Apr 2024 12:12:28 +0200 Subject: [PATCH] EEVEE-Next: UI: Render Panel - Reorder panels to match Cycles (and rendering pipeline order) `Sampling > Objects > Motion Blur / Dof > Film > Performance` - General reordering of properties to avoid too many panels. - Make sure panels a disabled if their checkbox is. - Enabled Freestyle panel for EEVEE-Next. - Merge some panels into sub-panels. - Add `Clamping` panel. - Split Lighprobe panel into `Performance` and `Scene`. - Move shadow panel to Sampling. - Generally improve consistency with Cycles. Pull Request: https://projects.blender.org/blender/blender/pulls/120691 --- scripts/startup/bl_ui/properties_freestyle.py | 2 +- scripts/startup/bl_ui/properties_render.py | 373 ++++++++++-------- scripts/startup/bl_ui/properties_scene.py | 28 ++ .../draw/engines/eevee_next/eevee_raytrace.hh | 2 +- source/blender/makesdna/DNA_scene_types.h | 3 +- source/blender/makesrna/intern/rna_scene.cc | 70 ++-- 6 files changed, 271 insertions(+), 207 deletions(-) diff --git a/scripts/startup/bl_ui/properties_freestyle.py b/scripts/startup/bl_ui/properties_freestyle.py index a3c7fffe744..93b92a1e0b7 100644 --- a/scripts/startup/bl_ui/properties_freestyle.py +++ b/scripts/startup/bl_ui/properties_freestyle.py @@ -24,7 +24,7 @@ class RENDER_PT_freestyle(RenderFreestyleButtonsPanel, Panel): bl_label = "Freestyle" bl_options = {'DEFAULT_CLOSED'} bl_order = 10 - COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} def draw_header(self, context): rd = context.scene.render diff --git a/scripts/startup/bl_ui/properties_render.py b/scripts/startup/bl_ui/properties_render.py index af38e5323bd..d0af105ab57 100644 --- a/scripts/startup/bl_ui/properties_render.py +++ b/scripts/startup/bl_ui/properties_render.py @@ -179,28 +179,6 @@ class RENDER_PT_eevee_ambient_occlusion(RenderButtonsPanel, Panel): col.prop(props, "use_gtao_bounce") -class RENDER_PT_eevee_next_horizon_scan(RenderButtonsPanel, Panel): - bl_label = "Horizon Scan" - bl_options = {'DEFAULT_CLOSED'} - COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} - - @classmethod - def poll(cls, context): - return (context.engine in cls.COMPAT_ENGINES) - - def draw(self, context): - layout = self.layout - layout.use_property_split = True - scene = context.scene - props = scene.eevee - - col = layout.column() - col.prop(props, "horizon_quality", text="Precision") - col.prop(props, "horizon_thickness", text="Thickness") - col.prop(props, "horizon_bias", text="Bias") - col.prop(props, "horizon_resolution", text="Resolution") - - class RENDER_PT_eevee_motion_blur(RenderButtonsPanel, Panel): bl_label = "Motion Blur" bl_options = {'DEFAULT_CLOSED'} @@ -332,6 +310,7 @@ class RENDER_PT_eevee_next_depth_of_field(RenderButtonsPanel, Panel): def draw(self, context): layout = self.layout layout.use_property_split = True + layout.use_property_decorate = False scene = context.scene props = scene.eevee @@ -339,11 +318,14 @@ class RENDER_PT_eevee_next_depth_of_field(RenderButtonsPanel, Panel): col.prop(props, "bokeh_max_size") col.prop(props, "bokeh_threshold") col.prop(props, "bokeh_neighbor_max") - col.prop(props, "use_bokeh_jittered") - col = layout.column() - col.active = props.use_bokeh_jittered - col.prop(props, "bokeh_overblur") + col = layout.column(align=False, heading="Jitter Camera") + row = col.row(align=True) + sub = row.row(align=True) + sub.prop(props, "use_bokeh_jittered", text="") + sub = sub.row(align=True) + sub.active = props.use_bokeh_jittered + sub.prop(props, "bokeh_overblur") class RENDER_PT_eevee_bloom(RenderButtonsPanel, Panel): @@ -457,6 +439,34 @@ class RENDER_PT_eevee_next_volumes(RenderButtonsPanel, Panel): def draw(self, context): layout = self.layout layout.use_property_split = True + layout.use_property_decorate = False + + scene = context.scene + props = scene.eevee + + col = layout.column(align=True) + col.prop(props, "volumetric_tile_size", text="Resolution") + col.prop(props, "volumetric_samples", text="Steps") + col.prop(props, "volumetric_sample_distribution", text="Distribution") + + col = layout.column() + col.prop(props, "volumetric_ray_depth", text="Max Depth") + + +class RENDER_PT_eevee_next_volumes_range(RenderButtonsPanel, Panel): + bl_label = "Custom Range" + bl_options = {'DEFAULT_CLOSED'} + bl_parent_id = "RENDER_PT_eevee_next_volumes" + COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} + + @classmethod + def poll(cls, context): + return (context.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False scene = context.scene props = scene.eevee @@ -465,48 +475,6 @@ class RENDER_PT_eevee_next_volumes(RenderButtonsPanel, Panel): col.prop(props, "volumetric_start") col.prop(props, "volumetric_end") - col = layout.column() - col.prop(props, "volumetric_tile_size") - col.prop(props, "volumetric_samples") - col.prop(props, "volumetric_sample_distribution", text="Distribution") - col.prop(props, "volumetric_ray_depth", text="Max Depth") - - -class RENDER_PT_eevee_next_volumes_lighting(RenderButtonsPanel, Panel): - bl_label = "Volume Lighting" - bl_parent_id = "RENDER_PT_eevee_next_volumes" - COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} - - def draw(self, context): - layout = self.layout - layout.use_property_split = True - - scene = context.scene - props = scene.eevee - - layout.prop(props, "volumetric_light_clamp", text="Light Clamping") - - -class RENDER_PT_eevee_next_volumes_shadows(RenderButtonsPanel, Panel): - bl_label = "Volume Shadows" - bl_parent_id = "RENDER_PT_eevee_next_volumes" - COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} - - def draw_header(self, context): - scene = context.scene - props = scene.eevee - self.layout.prop(props, "use_volumetric_shadows", text="") - - def draw(self, context): - layout = self.layout - layout.use_property_split = True - - scene = context.scene - props = scene.eevee - - layout.active = props.use_volumetric_shadows - layout.prop(props, "volumetric_shadow_samples", text="Samples") - class RENDER_PT_eevee_subsurface_scattering(RenderButtonsPanel, Panel): bl_label = "Subsurface Scattering" @@ -585,18 +553,23 @@ class RENDER_PT_eevee_next_raytracing(RenderButtonsPanel, Panel): RENDER_PT_eevee_next_raytracing_presets.draw_panel_header(self.layout) def draw(self, context): - layout = self.layout - layout.use_property_split = True - scene = context.scene props = scene.eevee - layout.prop(props, "ray_tracing_method", text="Method") + layout = self.layout + layout.active = props.use_raytracing + layout.use_property_split = True + layout.use_property_decorate = False + + col = layout.column() + col.prop(props, "ray_tracing_method", text="Method") options = context.scene.eevee.ray_tracing_options - layout.prop(options, "resolution_scale") - layout.prop(options, "sample_clamp") + col.prop(options, "resolution_scale") + col.prop(options, "screen_trace_max_roughness", text="Max Roughness") + # TODO Move it to raytracing options + col.prop(props, "horizon_bias", text="Bias") class RENDER_PT_eevee_next_screen_trace(RenderButtonsPanel, Panel): @@ -611,13 +584,44 @@ class RENDER_PT_eevee_next_screen_trace(RenderButtonsPanel, Panel): return (context.engine in cls.COMPAT_ENGINES) and use_screen_trace def draw(self, context): + scene = context.scene + props = scene.eevee + layout = self.layout + layout.active = props.use_raytracing layout.use_property_split = True + layout.use_property_decorate = False + props = context.scene.eevee.ray_tracing_options - layout.prop(props, "screen_trace_quality", text="Precision") - layout.prop(props, "screen_trace_thickness", text="Thickness") - layout.prop(props, "screen_trace_max_roughness", text="Max Roughness") + col = layout.column() + col.prop(props, "screen_trace_quality", text="Precision") + col.prop(props, "screen_trace_thickness", text="Thickness") + + +class RENDER_PT_eevee_next_horizon_scan(RenderButtonsPanel, Panel): + bl_label = "Horizon Scan" + bl_options = {'DEFAULT_CLOSED'} + bl_parent_id = "RENDER_PT_eevee_next_raytracing" + COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} + + @classmethod + def poll(cls, context): + return (context.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + scene = context.scene + props = scene.eevee + + layout = self.layout + layout.active = props.use_raytracing + layout.use_property_split = True + layout.use_property_decorate = False + + col = layout.column() + col.prop(props, "horizon_quality", text="Precision") + col.prop(props, "horizon_thickness", text="Thickness") + col.prop(props, "horizon_resolution", text="Resolution") class RENDER_PT_eevee_next_denoise(RenderButtonsPanel, Panel): @@ -631,12 +635,18 @@ class RENDER_PT_eevee_next_denoise(RenderButtonsPanel, Panel): return (context.engine in cls.COMPAT_ENGINES) def draw_header(self, context): + self.layout.active = context.scene.eevee.use_raytracing props = context.scene.eevee.ray_tracing_options self.layout.prop(props, "use_denoise", text="") def draw(self, context): + scene = context.scene + props = scene.eevee + layout = self.layout + layout.active = props.use_raytracing layout.use_property_split = True + layout.use_property_decorate = False props = context.scene.eevee.ray_tracing_options col = layout.column() @@ -676,11 +686,24 @@ class RENDER_PT_eevee_shadows(RenderButtonsPanel, Panel): col.prop(props, "light_threshold") -class RENDER_PT_eevee_next_lights(RenderButtonsPanel, Panel): - bl_label = "Lights" +class RENDER_PT_eevee_next_clamping(RenderButtonsPanel, Panel): + bl_label = "Clamping" bl_options = {'DEFAULT_CLOSED'} COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} + @classmethod + def poll(cls, context): + return (context.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + pass + + +class RENDER_PT_eevee_next_clamping_surface(RenderButtonsPanel, Panel): + bl_label = "Surface" + bl_parent_id = "RENDER_PT_eevee_next_clamping" + COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} + @classmethod def poll(cls, context): return (context.engine in cls.COMPAT_ENGINES) @@ -688,16 +711,40 @@ class RENDER_PT_eevee_next_lights(RenderButtonsPanel, Panel): def draw(self, context): layout = self.layout layout.use_property_split = True - + layout.use_property_decorate = False scene = context.scene props = scene.eevee - col = layout.column() - col.prop(props, "light_threshold") + # TODO(fclem): Add clamp properties + options = props.ray_tracing_options + layout.prop(options, "sample_clamp", text="Indirect Light") + # layout.prop(props, "clamp_surface_direct", text="Direct Light") + # layout.prop(props, "clamp_surface_indirect", text="Indirect Light") -class RENDER_PT_eevee_next_shadows(RenderButtonsPanel, Panel): +class RENDER_PT_eevee_next_clamping_volume(RenderButtonsPanel, Panel): + bl_label = "Volume" + bl_parent_id = "RENDER_PT_eevee_next_clamping" + COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} + + @classmethod + def poll(cls, context): + return (context.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + scene = context.scene + props = scene.eevee + layout.prop(props, "volumetric_light_clamp", text="Direct Light") + # layout.prop(props, "clamp_volumetric_direct", text="Direct Light") + # layout.prop(props, "clamp_volumetric_indirect", text="Indirect Light") + + +class RENDER_PT_eevee_next_sampling_shadows(RenderButtonsPanel, Panel): bl_label = "Shadows" + bl_parent_id = "RENDER_PT_eevee_next_sampling" bl_options = {'DEFAULT_CLOSED'} COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} @@ -711,14 +758,13 @@ class RENDER_PT_eevee_next_shadows(RenderButtonsPanel, Panel): self.layout.prop(props, "use_shadows", text="") def draw(self, context): - layout = self.layout - layout.use_property_split = True - scene = context.scene props = scene.eevee - col = layout.column() - col.prop(props, "shadow_pool_size", text="Pool Size") + layout = self.layout + layout.active = props.use_shadows + layout.use_property_split = True + layout.use_property_decorate = False col = layout.column(heading="Tracing", align=True) col.prop(props, "shadow_ray_count", text="Rays") @@ -727,8 +773,13 @@ class RENDER_PT_eevee_next_shadows(RenderButtonsPanel, Panel): col = layout.column() col.prop(props, "shadow_normal_bias", text="Normal Bias") - col = layout.column() - col.prop(props, "use_shadow_jittered_viewport", text="Jittered Transparency (Viewport)") + col = layout.column(align=False, heading="Volume Shadows") + row = col.row(align=True) + sub = row.row(align=True) + sub.prop(props, "use_volumetric_shadows", text="") + sub = sub.row(align=True) + sub.active = props.use_volumetric_shadows + sub.prop(props, "volumetric_shadow_samples", text="Steps") class RENDER_PT_eevee_sampling(RenderButtonsPanel, Panel): @@ -779,7 +830,7 @@ class RENDER_PT_eevee_next_sampling_viewport(RenderButtonsPanel, Panel): def draw(self, context): layout = self.layout layout.use_property_split = True - layout.use_property_decorate = False # No animation. + layout.use_property_decorate = False scene = context.scene props = scene.eevee @@ -787,6 +838,7 @@ class RENDER_PT_eevee_next_sampling_viewport(RenderButtonsPanel, Panel): col = layout.column() col.prop(props, "taa_samples", text="Samples") col.prop(props, "use_taa_reprojection", text="Temporal Reprojection") + col.prop(props, "use_shadow_jittered_viewport", text="Jittered Shadows") # Add SSS sample count here. @@ -803,7 +855,7 @@ class RENDER_PT_eevee_next_sampling_render(RenderButtonsPanel, Panel): def draw(self, context): layout = self.layout layout.use_property_split = True - layout.use_property_decorate = False # No animation. + layout.use_property_decorate = False scene = context.scene props = scene.eevee @@ -814,6 +866,28 @@ class RENDER_PT_eevee_next_sampling_render(RenderButtonsPanel, Panel): # Add SSS sample count here. +class RENDER_PT_eevee_next_sampling_advanced(RenderButtonsPanel, Panel): + bl_label = "Advanced" + bl_parent_id = "RENDER_PT_eevee_next_sampling" + bl_options = {'DEFAULT_CLOSED'} + COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} + + @classmethod + def poll(cls, context): + return (context.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + scene = context.scene + props = scene.eevee + + col = layout.column() + col.prop(props, "light_threshold") + + class RENDER_PT_eevee_indirect_lighting(RenderButtonsPanel, Panel): bl_label = "Indirect Lighting" bl_options = {'DEFAULT_CLOSED'} @@ -850,65 +924,6 @@ class RENDER_PT_eevee_indirect_lighting(RenderButtonsPanel, Panel): col.prop(props, "gi_filter_quality") -class RENDER_PT_eevee_next_light_probes(RenderButtonsPanel, Panel): - bl_label = "Light Probes" - bl_options = {'DEFAULT_CLOSED'} - COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} - - @classmethod - def poll(cls, context): - return (context.engine in cls.COMPAT_ENGINES) - - def draw(self, context): - pass - - -class RENDER_PT_eevee_next_light_probes_sphere(RenderButtonsPanel, Panel): - bl_label = "Sphere" - bl_parent_id = "RENDER_PT_eevee_next_light_probes" - COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} - - @classmethod - def poll(cls, context): - return (context.engine in cls.COMPAT_ENGINES) - - def draw(self, context): - layout = self.layout - layout.use_property_split = True - layout.use_property_decorate = False # No animation. - - scene = context.scene - props = scene.eevee - - col = layout.column() - col.prop(props, "gi_cubemap_resolution", text="Resolution") - - -class RENDER_PT_eevee_next_light_probes_volume(RenderButtonsPanel, Panel): - bl_label = "Volume" - bl_parent_id = "RENDER_PT_eevee_next_light_probes" - COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} - - @classmethod - def poll(cls, context): - return (context.engine in cls.COMPAT_ENGINES) - - def draw(self, context): - layout = self.layout - layout.use_property_split = True - layout.use_property_decorate = False # No animation. - - scene = context.scene - props = scene.eevee - - col = layout.column() - col.prop(props, "gi_irradiance_pool_size", text="Pool Size") - - row = col.row(align=True) - row.operator("object.lightprobe_cache_bake", text="Bake Volumes").subset = 'ALL' - row.operator("object.lightprobe_cache_free", text="", icon='TRASH').subset = 'ALL' - - class RENDER_PT_eevee_indirect_lighting_display(RenderButtonsPanel, Panel): bl_label = "Display" bl_parent_id = "RENDER_PT_eevee_indirect_lighting" @@ -1040,6 +1055,28 @@ class RENDER_PT_eevee_performance(RenderButtonsPanel, Panel): layout.prop(rd, "use_high_quality_normals") +class RENDER_PT_eevee_performance_memory(RenderButtonsPanel, Panel): + bl_label = "Memory" + bl_parent_id = "RENDER_PT_eevee_performance" + bl_options = {'DEFAULT_CLOSED'} + COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} + + @classmethod + def poll(cls, context): + return (context.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + scene = context.scene + props = scene.eevee + + layout.prop(props, "shadow_pool_size", text="Shadow Pool") + layout.prop(props, "gi_irradiance_pool_size", text="Light Probes Volume Pool") + + class RENDER_PT_eevee_performance_viewport(RenderButtonsPanel, Panel): bl_label = "Viewport" bl_parent_id = "RENDER_PT_eevee_performance" @@ -1281,39 +1318,43 @@ classes = ( RENDER_PT_eevee_next_sampling, RENDER_PT_eevee_next_sampling_viewport, RENDER_PT_eevee_next_sampling_render, + RENDER_PT_eevee_next_sampling_shadows, + RENDER_PT_eevee_next_sampling_advanced, + RENDER_PT_eevee_next_clamping, + RENDER_PT_eevee_next_clamping_surface, + RENDER_PT_eevee_next_clamping_volume, RENDER_PT_eevee_ambient_occlusion, RENDER_PT_eevee_bloom, - RENDER_PT_eevee_depth_of_field, - RENDER_PT_eevee_next_depth_of_field, RENDER_PT_eevee_subsurface_scattering, RENDER_PT_eevee_screen_space_reflections, - RENDER_PT_eevee_next_horizon_scan, RENDER_PT_eevee_next_raytracing_presets, RENDER_PT_eevee_next_raytracing, RENDER_PT_eevee_next_screen_trace, + RENDER_PT_eevee_next_horizon_scan, RENDER_PT_eevee_next_denoise, + RENDER_PT_simplify, + RENDER_PT_simplify_viewport, + RENDER_PT_simplify_render, + RENDER_PT_simplify_greasepencil, RENDER_PT_eevee_motion_blur, RENDER_PT_eevee_volumetric, RENDER_PT_eevee_volumetric_lighting, RENDER_PT_eevee_volumetric_shadows, RENDER_PT_eevee_next_volumes, - RENDER_PT_eevee_next_volumes_lighting, - RENDER_PT_eevee_next_volumes_shadows, - RENDER_PT_eevee_performance, - RENDER_PT_eevee_performance_viewport, + RENDER_PT_eevee_next_volumes_range, RENDER_PT_eevee_hair, RENDER_PT_eevee_shadows, - RENDER_PT_eevee_next_lights, - RENDER_PT_eevee_next_shadows, RENDER_PT_eevee_indirect_lighting, RENDER_PT_eevee_indirect_lighting_display, - RENDER_PT_eevee_next_light_probes, - RENDER_PT_eevee_next_light_probes_sphere, - RENDER_PT_eevee_next_light_probes_volume, - RENDER_PT_eevee_film, + RENDER_PT_eevee_depth_of_field, + RENDER_PT_eevee_next_depth_of_field, RENDER_PT_eevee_next_motion_blur, RENDER_PT_eevee_next_motion_blur_curve, + RENDER_PT_eevee_film, RENDER_PT_eevee_next_film, + RENDER_PT_eevee_performance, + RENDER_PT_eevee_performance_memory, + RENDER_PT_eevee_performance_viewport, RENDER_PT_gpencil, @@ -1326,10 +1367,6 @@ classes = ( RENDER_PT_color_management, RENDER_PT_color_management_display_settings, RENDER_PT_color_management_curves, - RENDER_PT_simplify, - RENDER_PT_simplify_viewport, - RENDER_PT_simplify_render, - RENDER_PT_simplify_greasepencil, ) if __name__ == "__main__": # only for live edit. diff --git a/scripts/startup/bl_ui/properties_scene.py b/scripts/startup/bl_ui/properties_scene.py index 01c4a8cd20d..bd0dac2825f 100644 --- a/scripts/startup/bl_ui/properties_scene.py +++ b/scripts/startup/bl_ui/properties_scene.py @@ -413,6 +413,33 @@ class SCENE_PT_rigid_body_field_weights(RigidBodySubPanel, Panel): effector_weights_ui(self, rbw.effector_weights, 'RIGID_BODY') +class SCENE_PT_eevee_next_light_probes(SceneButtonsPanel, Panel): + bl_label = "Light Probes" + bl_options = {'DEFAULT_CLOSED'} + COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'} + + @classmethod + def poll(cls, context): + return (context.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False # No animation. + + scene = context.scene + props = scene.eevee + + col = layout.column() + + # TODO(fclem): Move to probe + col.prop(props, "gi_cubemap_resolution", text="Spheres Resolution") + + row = col.row(align=True) + row.operator("object.lightprobe_cache_bake", text="Bake All Light Probe Volumes").subset = 'ALL' + row.operator("object.lightprobe_cache_free", text="", icon='TRASH').subset = 'ALL' + + class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel, Panel): _context_path = "scene" _property_type = bpy.types.Scene @@ -432,6 +459,7 @@ classes = ( SCENE_PT_rigid_body_world_settings, SCENE_PT_rigid_body_cache, SCENE_PT_rigid_body_field_weights, + SCENE_PT_eevee_next_light_probes, SCENE_PT_custom_props, ) diff --git a/source/blender/draw/engines/eevee_next/eevee_raytrace.hh b/source/blender/draw/engines/eevee_next/eevee_raytrace.hh index a181aba2c77..d7345b5bb4b 100644 --- a/source/blender/draw/engines/eevee_next/eevee_raytrace.hh +++ b/source/blender/draw/engines/eevee_next/eevee_raytrace.hh @@ -194,7 +194,7 @@ class RayTraceModule { /** Copy of the scene options to avoid changing parameters during motion blur. */ RaytraceEEVEE ray_tracing_options_; - RaytraceEEVEE_Method tracing_method_ = RAYTRACE_EEVEE_METHOD_NONE; + RaytraceEEVEE_Method tracing_method_ = RAYTRACE_EEVEE_METHOD_PROBE; RayTraceData &data_; diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index bcccfba374c..11ee2b54f11 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -2857,7 +2857,8 @@ typedef enum RaytraceEEVEE_DenoiseStages { } RaytraceEEVEE_DenoiseStages; typedef enum RaytraceEEVEE_Method { - RAYTRACE_EEVEE_METHOD_NONE = 0, + /* NOTE: Each method contains the previos one. */ + RAYTRACE_EEVEE_METHOD_PROBE = 0, RAYTRACE_EEVEE_METHOD_SCREEN = 1, /* TODO(fclem): Hardware ray-tracing. */ // RAYTRACE_EEVEE_METHOD_HARDWARE = 2, diff --git a/source/blender/makesrna/intern/rna_scene.cc b/source/blender/makesrna/intern/rna_scene.cc index 7d325ccafa3..d2d9484744d 100644 --- a/source/blender/makesrna/intern/rna_scene.cc +++ b/source/blender/makesrna/intern/rna_scene.cc @@ -697,6 +697,15 @@ const EnumPropertyItem rna_enum_grease_pencil_selectmode_items[] = { {0, nullptr, 0, nullptr, nullptr}, }; +static const EnumPropertyItem eevee_resolution_scale_items[] = { + {1, "1", 0, "1:1", "Full resolution"}, + {2, "2", 0, "1:2", "Render this effect at 50% render resolution"}, + {4, "4", 0, "1:4", "Render this effect at 25% render resolution"}, + {8, "8", 0, "1:8", "Render this effect at 12.5% render resolution"}, + {16, "16", 0, "1:16", "Render this effect at 6.25% render resolution"}, + {0, nullptr, 0, nullptr, nullptr}, +}; + #ifdef RNA_RUNTIME # include @@ -7692,21 +7701,17 @@ static void rna_def_raytrace_eevee(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static const EnumPropertyItem pixel_rate_items[] = { - {1, "1", 0, "1 rpp", "1 ray per pixel"}, - {2, "2", 0, "1/4 rpp", "1 ray for every 4 pixels"}, - {4, "4", 0, "1/16 rpp", "1 ray for every 16 pixels"}, - {0, nullptr, 0, nullptr, nullptr}, - }; - srna = RNA_def_struct(brna, "RaytraceEEVEE", nullptr); RNA_def_struct_path_func(srna, "rna_RaytraceEEVEE_path"); RNA_def_struct_ui_text( srna, "EEVEE Raytrace Options", "Quality options for the raytracing pipeline"); prop = RNA_def_property(srna, "resolution_scale", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, pixel_rate_items); - RNA_def_property_ui_text(prop, "Resolution", "Number of rays per pixel"); + RNA_def_property_enum_items(prop, eevee_resolution_scale_items); + RNA_def_property_ui_text(prop, + "Resolution", + "Determines the number of rays per pixel. " + "Higher resolution uses more memory"); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); @@ -7806,28 +7811,17 @@ static void rna_def_scene_eevee(BlenderRNA *brna) {0, nullptr, 0, nullptr, nullptr}, }; - static const EnumPropertyItem eevee_volumetric_tile_size_items[] = { - {2, "2", 0, "2 px", ""}, - {4, "4", 0, "4 px", ""}, - {8, "8", 0, "8 px", ""}, - {16, "16", 0, "16 px", ""}, - {0, nullptr, 0, nullptr, nullptr}, - }; - - static const EnumPropertyItem eevee_horizon_pixel_rate_items[] = { - {1, "1", 0, "1 px", ""}, - {2, "2", 0, "4 px", ""}, - {4, "4", 0, "16 px", ""}, - {0, nullptr, 0, nullptr, nullptr}, - }; - static const EnumPropertyItem ray_tracing_method_items[] = { - {RAYTRACE_EEVEE_METHOD_NONE, "NONE", 0, "None", "No intersection with scene geometry"}, + {RAYTRACE_EEVEE_METHOD_PROBE, + "PROBE", + 0, + "Light Probe", + "Use light probes to find scene intersection"}, {RAYTRACE_EEVEE_METHOD_SCREEN, "SCREEN", 0, "Screen-Trace", - "Raytrace against the depth buffer"}, + "Raytrace against the depth buffer. Fallback to light probes for invalid rays"}, {0, nullptr, 0, nullptr, nullptr}, }; @@ -8054,16 +8048,19 @@ static void rna_def_scene_eevee(BlenderRNA *brna) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); prop = RNA_def_property(srna, "volumetric_tile_size", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, eevee_volumetric_tile_size_items); + RNA_def_property_enum_items(prop, eevee_resolution_scale_items); RNA_def_property_ui_text(prop, - "Tile Size", - "Control the quality of the volumetric effects " - "(lower size increase vram usage and quality)"); + "Resolution", + "Control the quality of the volumetric effects. " + "Higher resolution uses more memory"); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); prop = RNA_def_property(srna, "volumetric_samples", PROP_INT, PROP_NONE); - RNA_def_property_ui_text(prop, "Samples", "Number of samples to compute volumetric effects"); + RNA_def_property_ui_text(prop, + "Steps", + "Number of steps to compute volumetric effects. " + "Higher step count increase VRAM usage and quality"); RNA_def_property_range(prop, 1, 256); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); @@ -8078,7 +8075,8 @@ static void rna_def_scene_eevee(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Volume Max Ray Depth", "Maximum surface intersection count used by the accurate volume " - "intersection method. Will create artifact if it is exceeded"); + "intersection method. Will create artifact if it is exceeded. " + "Higher count increases VRAM usage"); RNA_def_property_range(prop, 1, 16); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); @@ -8186,11 +8184,11 @@ static void rna_def_scene_eevee(BlenderRNA *brna) prop = RNA_def_property(srna, "horizon_resolution", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, nullptr, "gtao_resolution"); - RNA_def_property_enum_items(prop, eevee_horizon_pixel_rate_items); + RNA_def_property_enum_items(prop, eevee_resolution_scale_items); RNA_def_property_ui_text(prop, "Resolution", - "Control the quality of the horizon scan lighting " - "(lower size increase vram usage and quality)"); + "Control the quality of the horizon scan lighting. " + "Higher resolution uses more memory"); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); @@ -8306,7 +8304,7 @@ static void rna_def_scene_eevee(BlenderRNA *brna) /* Motion blur */ prop = RNA_def_property(srna, "motion_blur_depth_scale", PROP_FLOAT, PROP_NONE); RNA_def_property_ui_text(prop, - "Background Separation", + "Bleeding Bias", "Lower values will reduce background" " bleeding onto foreground elements"); RNA_def_property_range(prop, 0.0f, FLT_MAX);