Vulkan: Render graph textures #120821

Merged
Jeroen Bakker merged 53 commits from Jeroen-Bakker/blender:vulkan/render-graph-textures into main 2024-04-19 14:55:49 +02:00
7 changed files with 283 additions and 209 deletions
Showing only changes of commit 648514038f - Show all commits

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

@ -250,9 +250,13 @@ const EnumPropertyItem rna_enum_property_string_search_flag_items[] = {
# include "BKE_idprop.hh"
# include "BKE_lib_override.hh"
# include "RNA_path.hh"
# include <optional>
# include <string>
# include <fmt/format.h>
static CLG_LogRef LOG_COMPARE_OVERRIDE = {"rna.rna_compare_override"};
/* Struct */
@ -2550,15 +2554,21 @@ bool rna_property_override_apply_default(Main *bmain,
if (prop_src_type != prop_dst_type ||
(prop_storage && prop_src_type != RNA_property_type(prop_storage)))
{
std::optional<std::string> prop_rna_path = rnaapply_ctx.liboverride_property ?
rnaapply_ctx.liboverride_property->rna_path :
RNA_path_from_ID_to_property(ptr_dst, prop_dst);
CLOG_WARN(&LOG_COMPARE_OVERRIDE,
"%s.%s: Inconsistency between stored property type (%d) and linked reference one "
"(%d), skipping liboverride apply",
ptr_dst->owner_id->name,
rnaapply_ctx.liboverride_property->rna_path,
prop_rna_path ? prop_rna_path->c_str() :
fmt::format(" ... .{}", prop_dst->name).c_str(),
prop_src_type,
prop_dst_type);
/* Keep the liboverride property, update its type to the new actual one. */
rnaapply_ctx.liboverride_property->rna_prop_type = prop_dst_type;
if (rnaapply_ctx.liboverride_property) {
rnaapply_ctx.liboverride_property->rna_prop_type = prop_dst_type;
}
return false;
}

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