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
This commit is contained in:
Clément Foucault
2024-04-19 12:12:28 +02:00
committed by Clément Foucault
parent ed9dea08b2
commit 2c19be2682
6 changed files with 271 additions and 207 deletions

View File

@@ -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

View File

@@ -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.

View File

@@ -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,
)

View File

@@ -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_;

View File

@@ -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,

View File

@@ -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 <algorithm>
@@ -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);