Files
test/source/blender/makesrna/intern/rna_lightprobe.cc
Miguel Pozo 1ba16edaf0 EEVEE-Next: Rename light probes
Update to the new naming convention for `Light Probes`:

`Reflection Cubemap` -> `Sphere`
`Reflection Plane` -> `Plane`
`Irradiance Grid` -> `Volume`

Note that this breaks the Python API (`bpy.types.LightProbe.type`).

Pull Request: https://projects.blender.org/blender/blender/pulls/113452
2023-10-11 19:38:42 +02:00

334 lines
16 KiB
C++

/* SPDX-FileCopyrightText: 2023 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup RNA
*/
#include <cstdlib>
#include "RNA_define.hh"
#include "RNA_enum_types.hh"
#include "rna_internal.h"
#include "DNA_lightprobe_types.h"
#include "WM_types.hh"
#ifdef RNA_RUNTIME
# include "MEM_guardedalloc.h"
# include "BKE_main.h"
# include "DEG_depsgraph.hh"
# include "DNA_collection_types.h"
# include "DNA_object_types.h"
# include "WM_api.hh"
static void rna_LightProbe_recalc(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
{
DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
}
#else
static EnumPropertyItem parallax_type_items[] = {
{LIGHTPROBE_SHAPE_ELIPSOID, "ELIPSOID", ICON_NONE, "Sphere", ""},
{LIGHTPROBE_SHAPE_BOX, "BOX", ICON_NONE, "Box", ""},
{0, nullptr, 0, nullptr, nullptr},
};
static EnumPropertyItem lightprobe_type_items[] = {
{LIGHTPROBE_TYPE_SPHERE,
"SPHERE",
ICON_LIGHTPROBE_SPHERE,
"Sphere",
"Light probe that captures precise lighting from all directions at a single point in space"},
{LIGHTPROBE_TYPE_PLANE,
"PLANE",
ICON_LIGHTPROBE_PLANE,
"Plane",
"Light probe that captures incoming light from a single direction on a plane"},
{LIGHTPROBE_TYPE_VOLUME,
"VOLUME",
ICON_LIGHTPROBE_VOLUME,
"Volume",
"Light probe that captures low frequency lighting inside a volume"},
{0, nullptr, 0, nullptr, nullptr},
};
static void rna_def_lightprobe(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
srna = RNA_def_struct(brna, "LightProbe", "ID");
RNA_def_struct_ui_text(
srna, "LightProbe", "Light Probe data-block for lighting capture objects");
RNA_def_struct_ui_icon(srna, ICON_OUTLINER_DATA_LIGHTPROBE);
prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, lightprobe_type_items);
RNA_def_property_ui_text(prop, "Type", "Type of light probe");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, nullptr, "clipsta");
RNA_def_property_range(prop, 1e-6f, FLT_MAX);
RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
RNA_def_property_ui_text(
prop, "Clip Start", "Probe clip start, below which objects will not appear in reflections");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, nullptr, "clipend");
RNA_def_property_range(prop, 1e-6f, FLT_MAX);
RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
RNA_def_property_ui_text(
prop, "Clip End", "Probe clip end, beyond which objects will not appear in reflections");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "show_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "flag", LIGHTPROBE_FLAG_SHOW_CLIP_DIST);
RNA_def_property_ui_text(prop, "Clipping", "Show the clipping distances in the 3D view");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "influence_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, nullptr, "attenuation_type");
RNA_def_property_enum_items(prop, parallax_type_items);
RNA_def_property_ui_text(prop, "Type", "Type of influence volume");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "show_influence", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "flag", LIGHTPROBE_FLAG_SHOW_INFLUENCE);
RNA_def_property_ui_text(prop, "Influence", "Show the influence volume in the 3D view");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "influence_distance", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, nullptr, "distinf");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_text(prop, "Influence Distance", "Influence distance of the probe");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Falloff", "Control how fast the probe influence decreases");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "use_custom_parallax", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "flag", LIGHTPROBE_FLAG_CUSTOM_PARALLAX);
RNA_def_property_ui_text(
prop, "Use Custom Parallax", "Enable custom settings for the parallax correction volume");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "show_parallax", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "flag", LIGHTPROBE_FLAG_SHOW_PARALLAX);
RNA_def_property_ui_text(prop, "Parallax", "Show the parallax correction volume in the 3D view");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "parallax_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, parallax_type_items);
RNA_def_property_ui_text(prop, "Type", "Type of parallax volume");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "parallax_distance", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, nullptr, "distpar");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_text(prop, "Parallax Radius", "Lowest corner of the parallax bounding box");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
/* irradiance grid */
prop = RNA_def_property(srna, "grid_resolution_x", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, 1, 256);
RNA_def_property_ui_text(
prop, "Resolution X", "Number of samples along the x axis of the volume");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_resolution_y", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, 1, 256);
RNA_def_property_ui_text(
prop, "Resolution Y", "Number of samples along the y axis of the volume");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_resolution_z", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, 1, 256);
RNA_def_property_ui_text(
prop, "Resolution Z", "Number of samples along the z axis of the volume");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_normal_bias", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_ui_text(prop,
"Normal Bias",
"Offset sampling of the irradiance grid in "
"the surface normal direction to reduce light bleeding");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0f, 1.0f, 1, 3);
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_view_bias", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_ui_text(prop,
"View Bias",
"Offset sampling of the irradiance grid in "
"the viewing direction to reduce light bleeding");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0f, 1.0f, 1, 3);
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_irradiance_smoothing", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, nullptr, "grid_facing_bias");
RNA_def_property_ui_text(
prop, "Facing Bias", "Smoother irradiance interpolation but introduce light bleeding");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0f, 1.0f, 1, 3);
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_bake_samples", PROP_INT, PROP_NONE);
RNA_def_property_ui_text(
prop, "Bake Samples", "Number of ray directions to evaluate when baking");
RNA_def_property_range(prop, 1, INT_MAX);
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_surface_bias", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_ui_text(prop,
"Capture Surface Bias",
"Moves capture points position away from surfaces to avoid artifacts");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_escape_bias", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_ui_text(prop, "Capture Escape Bias", "Moves capture points outside objects");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "surfel_density", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_text(prop,
"Surfel Density",
"Number of surfels per unit distance (higher values improve quality)");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_validity_threshold", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_ui_text(prop,
"Validity Threshold",
"Ratio of front-facing surface hits under which a grid sample will "
"not be considered for lighting");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_dilation_threshold", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_ui_text(prop,
"Dilation Threshold",
"Ratio of front-facing surface hits under which a grid sample will "
"reuse neighbors grid sample lighting");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_dilation_radius", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_ui_text(
prop,
"Dilation Radius",
"Radius in grid sample to search valid grid samples to copy into invalid grid samples");
RNA_def_property_range(prop, 1.0f, 5.0f);
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_capture_world", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "grid_flag", LIGHTPROBE_GRID_CAPTURE_WORLD);
RNA_def_property_ui_text(
prop,
"Capture World",
"Bake incoming light from the world, instead of just the visibility, "
"for more accurate lighting, but lose correct blending to surrounding irradiance volumes");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "grid_capture_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "grid_flag", LIGHTPROBE_GRID_CAPTURE_INDIRECT);
RNA_def_property_ui_text(prop,
"Capture Indirect",
"Bake light bounces from light sources for more accurate lighting");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "grid_capture_emission", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "grid_flag", LIGHTPROBE_GRID_CAPTURE_EMISSION);
RNA_def_property_ui_text(
prop, "Capture Emission", "Bake emissive surfaces for more accurate lighting");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "grid_clamp_direct", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_text(
prop, "Clamp Direct", "Clamp the direct lighting intensity to reduce noise (0 to disable)");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "grid_clamp_indirect", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_text(prop,
"Clamp Indirect",
"Clamp the indirect lighting intensity to reduce noise (0 to disable)");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "visibility_buffer_bias", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, nullptr, "vis_bias");
RNA_def_property_range(prop, 0.001f, 9999.0f);
RNA_def_property_ui_range(prop, 0.001f, 5.0f, 1.0, 3);
RNA_def_property_ui_text(prop, "Visibility Bias", "Bias for reducing self shadowing");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "visibility_bleed_bias", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, nullptr, "vis_bleedbias");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(
prop, "Visibility Bleed Bias", "Bias for reducing light-bleed on variance shadow maps");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
prop = RNA_def_property(srna, "visibility_blur", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, nullptr, "vis_blur");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Visibility Blur", "Filter size of the visibility blur");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, nullptr, "intensity");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0f, 3.0f, 1.0, 3);
RNA_def_property_ui_text(
prop, "Intensity", "Modify the intensity of the lighting captured by this probe");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "visibility_collection", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Collection");
RNA_def_property_pointer_sdna(prop, nullptr, "visibility_grp");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Visibility Collection", "Restrict objects visible for this probe");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
prop = RNA_def_property(srna, "invert_visibility_collection", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "flag", LIGHTPROBE_FLAG_INVERT_GROUP);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Invert Collection", "Invert visibility collection");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
/* Data preview */
prop = RNA_def_property(srna, "show_data", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "flag", LIGHTPROBE_FLAG_SHOW_DATA);
RNA_def_property_ui_text(prop,
"Show Preview Plane",
"Show captured lighting data into the 3D view for debugging purpose");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr);
/* common */
rna_def_animdata_common(srna);
}
void RNA_def_lightprobe(BlenderRNA *brna)
{
rna_def_lightprobe(brna);
}
#endif