EEVEE-Next: World: Add shadow options
This adds jitter option and filter option.
This commit is contained in:
parent
fb85ea535f
commit
b96b87a75c
@ -207,11 +207,23 @@ class EEVEE_WORLD_PT_sun_shadow(WorldButtonsPanel, Panel):
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
|
||||
world = context.world
|
||||
|
||||
layout.use_property_split = True
|
||||
layout.prop(world, "sun_shadow_maximum_resolution", text="Resolution Limit")
|
||||
col = layout.column(align=False, heading="Jitter")
|
||||
row = col.row(align=True)
|
||||
sub = row.row(align=True)
|
||||
sub.prop(world, "use_sun_shadow_jitter", text="")
|
||||
sub = sub.row(align=True)
|
||||
sub.active = world.use_sun_shadow_jitter
|
||||
sub.prop(world, "sun_shadow_jitter_overblur", text="Overblur")
|
||||
|
||||
col.separator()
|
||||
|
||||
col = layout.column()
|
||||
col.prop(world, "sun_shadow_filter_radius", text="Filter")
|
||||
col.prop(world, "sun_shadow_maximum_resolution", text="Resolution Limit")
|
||||
|
||||
|
||||
class WORLD_PT_viewport_display(WorldButtonsPanel, Panel):
|
||||
|
@ -29,7 +29,7 @@ extern "C" {
|
||||
|
||||
/* Blender file format version. */
|
||||
#define BLENDER_FILE_VERSION BLENDER_VERSION
|
||||
#define BLENDER_FILE_SUBVERSION 42
|
||||
#define BLENDER_FILE_SUBVERSION 43
|
||||
|
||||
/* Minimum Blender version that supports reading file written with the current
|
||||
* version. Older Blender versions will test this and cancel loading the file, showing a warning to
|
||||
|
@ -3640,6 +3640,14 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain)
|
||||
}
|
||||
}
|
||||
|
||||
if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 43)) {
|
||||
const World *default_world = DNA_struct_default_get(World);
|
||||
LISTBASE_FOREACH (World *, world, &bmain->worlds) {
|
||||
world->sun_shadow_maximum_resolution = default_world->sun_shadow_maximum_resolution;
|
||||
world->sun_shadow_filter_radius = default_world->sun_shadow_filter_radius;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Always bump subversion in BKE_blender_version.h when adding versioning
|
||||
* code here, and wrap it inside a MAIN_VERSION_FILE_ATLEAST check.
|
||||
|
@ -353,8 +353,11 @@ void LightModule::begin_sync()
|
||||
la.r = la.g = la.b = -1.0f; /* Tag as world sun light. */
|
||||
la.energy = 1.0f;
|
||||
la.sun_angle = inst_.world.sun_angle();
|
||||
la.shadow_filter_radius = inst_.world.sun_shadow_filter_radius();
|
||||
la.shadow_jitter_overblur = inst_.world.sun_shadow_jitter_overblur();
|
||||
la.shadow_maximum_resolution = inst_.world.sun_shadow_max_resolution();
|
||||
SET_FLAG_FROM_TEST(la.mode, inst_.world.use_sun_shadow(), LA_SHADOW);
|
||||
SET_FLAG_FROM_TEST(la.mode, inst_.world.use_sun_shadow_jitter(), LA_SHADOW_JITTER);
|
||||
|
||||
Light &light = light_map_.lookup_or_add_default(world_sunlight_key);
|
||||
light.used = true;
|
||||
|
@ -106,11 +106,26 @@ class World {
|
||||
return scene_world_get()->sun_shadow_maximum_resolution;
|
||||
}
|
||||
|
||||
float sun_shadow_filter_radius()
|
||||
{
|
||||
return scene_world_get()->sun_shadow_filter_radius;
|
||||
}
|
||||
|
||||
float sun_shadow_jitter_overblur()
|
||||
{
|
||||
return scene_world_get()->sun_shadow_jitter_overblur;
|
||||
}
|
||||
|
||||
bool use_sun_shadow()
|
||||
{
|
||||
return scene_world_get()->flag & WO_USE_SUN_SHADOW;
|
||||
}
|
||||
|
||||
bool use_sun_shadow_jitter()
|
||||
{
|
||||
return scene_world_get()->flag & WO_USE_SUN_SHADOW_JITTER;
|
||||
}
|
||||
|
||||
private:
|
||||
void sync_volume();
|
||||
|
||||
|
@ -32,7 +32,10 @@
|
||||
.probe_resolution = LIGHT_PROBE_RESOLUTION_1024, \
|
||||
.sun_threshold = 10.0f, \
|
||||
.sun_angle = DEG2RADF(0.526f), \
|
||||
\
|
||||
.sun_shadow_filter_radius = 1.0f, \
|
||||
.sun_shadow_maximum_resolution = 0.001f, \
|
||||
.sun_shadow_jitter_overblur = 10.0f, \
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
@ -71,8 +71,10 @@ typedef struct World {
|
||||
float sun_threshold;
|
||||
/** Angle for sun extraction. */
|
||||
float sun_angle;
|
||||
/** Maximum resolution for extracted sun shadow. */
|
||||
/** Shadow properties for sun extraction. */
|
||||
float sun_shadow_maximum_resolution;
|
||||
float sun_shadow_jitter_overblur;
|
||||
float sun_shadow_filter_radius;
|
||||
char _pad4[4];
|
||||
|
||||
/** Old animation system, deprecated for 2.5. */
|
||||
@ -131,6 +133,7 @@ enum {
|
||||
* Use shadowing from the extracted sun light.
|
||||
*/
|
||||
WO_USE_SUN_SHADOW = 1 << 4,
|
||||
WO_USE_SUN_SHADOW_JITTER = 1 << 5,
|
||||
};
|
||||
|
||||
/** #World::probe_resolution. */
|
||||
|
@ -310,7 +310,7 @@ static void rna_def_light_shadow(StructRNA *srna, bool sun)
|
||||
RNA_def_property_ui_range(prop, 0.0001f, 0.020f, 0.05f, 4);
|
||||
RNA_def_property_ui_text(prop,
|
||||
"Shadows Resolution Limit",
|
||||
"Maximum size of a shadow map pixel. Higher values use less memory at "
|
||||
"Minimum size of a shadow map pixel. Higher values use less memory at "
|
||||
"the cost of shadow quality");
|
||||
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
|
||||
RNA_def_property_update(prop, 0, "rna_Light_update");
|
||||
|
@ -315,6 +315,34 @@ void RNA_def_world(BlenderRNA *brna)
|
||||
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
|
||||
RNA_def_property_update(prop, 0, "rna_World_draw_update");
|
||||
|
||||
prop = RNA_def_property(srna, "sun_shadow_filter_radius", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_range(prop, 0.0f, FLT_MAX);
|
||||
RNA_def_property_ui_range(prop, 0.0f, 5.0f, 1.0f, 2);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Shadow Filter Radius", "Blur shadow aliasing using Percentage Closer Filtering");
|
||||
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
|
||||
RNA_def_property_update(prop, 0, "rna_World_draw_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_sun_shadow_jitter", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, nullptr, "flag", WO_USE_SUN_SHADOW_JITTER);
|
||||
RNA_def_property_ui_text(
|
||||
prop,
|
||||
"Shadow Jitter",
|
||||
"Enable jittered soft shadows to increase shadow precision (disabled in viewport unless "
|
||||
"enabled in the render settings). Has a high performance impact");
|
||||
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
|
||||
RNA_def_property_update(prop, 0, "rna_World_draw_update");
|
||||
|
||||
prop = RNA_def_property(srna, "sun_shadow_jitter_overblur", PROP_FLOAT, PROP_PERCENTAGE);
|
||||
RNA_def_property_range(prop, 0.0f, 100.0f);
|
||||
RNA_def_property_ui_range(prop, 0.0f, 20.0f, 10.0f, 0);
|
||||
RNA_def_property_ui_text(
|
||||
prop,
|
||||
"Shadow Jitter Overblur",
|
||||
"Apply shadow tracing to each jittered sample to reduce under-sampling artifacts");
|
||||
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
|
||||
RNA_def_property_update(prop, 0, "rna_World_draw_update");
|
||||
|
||||
rna_def_lighting(brna);
|
||||
rna_def_world_mist(brna);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user