diff --git a/doc/classes/GeometryInstance3D.xml b/doc/classes/GeometryInstance3D.xml index 6b0d2e4a62be..dc813a7be2f6 100644 --- a/doc/classes/GeometryInstance3D.xml +++ b/doc/classes/GeometryInstance3D.xml @@ -39,7 +39,7 @@ The extra distance added to the GeometryInstance3D's bounding box ([AABB]) to increase its cull box. - + The texel density to use for lightmapping in [LightmapGI]. Greater scale values provide higher resolution in the lightmap, which can result in sharper shadows for lights that have both direct and indirect light baked. However, greater scale values will also increase the space taken by the mesh in the lightmap texture, which increases the memory, storage, and bake time requirements. When using a single mesh at different scales, consider adjusting this value to keep the lightmap texel density consistent across meshes. @@ -110,21 +110,6 @@ Dynamic global illumination mode. Use for dynamic objects that contribute to global illumination. This GI mode is only effective when using [VoxelGI], but it has a higher performance impact than [constant GI_MODE_STATIC]. When using other GI methods, this will act the same as [constant GI_MODE_DISABLED]. - - The standard texel density for lightmapping with [LightmapGI]. - - - Multiplies texel density by 2× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor between 1.5 and 3.0. - - - Multiplies texel density by 4× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor between 3.0 and 6.0. - - - Multiplies texel density by 8× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor greater than 6.0. - - - Represents the size of the [enum LightmapScale] enum. - Will not fade itself nor its visibility dependencies, hysteresis will be used instead. This is the fastest approach to manual LOD, but it can result in noticeable LOD transitions depending on how the LOD meshes are authored. See [member visibility_range_begin] and [member Node3D.visibility_parent] for more information. diff --git a/scene/3d/lightmap_gi.cpp b/scene/3d/lightmap_gi.cpp index 86ff6d15dd9d..7c003ceb5e51 100644 --- a/scene/3d/lightmap_gi.cpp +++ b/scene/3d/lightmap_gi.cpp @@ -321,9 +321,7 @@ void LightmapGI::_find_meshes_and_lights(Node *p_at_node, Vector &m mf.node_path = get_path_to(mi); mf.subindex = -1; mf.mesh = mesh; - - static const int lightmap_scale[GeometryInstance3D::LIGHTMAP_SCALE_MAX] = { 1, 2, 4, 8 }; - mf.lightmap_scale = lightmap_scale[mi->get_lightmap_scale()]; + mf.lightmap_scale = mi->get_lightmap_scale(); Ref all_override = mi->get_material_override(); for (int i = 0; i < mesh->get_surface_count(); i++) { @@ -357,7 +355,7 @@ void LightmapGI::_find_meshes_and_lights(Node *p_at_node, Vector &m mf.xform = xf * mesh_xf; mf.node_path = get_path_to(s); mf.subindex = i / 2; - mf.lightmap_scale = 1; + mf.lightmap_scale = 1.0; mf.mesh = mesh; meshes.push_back(mf); diff --git a/scene/3d/lightmap_gi.h b/scene/3d/lightmap_gi.h index 765e4a731dd2..554fab96df55 100644 --- a/scene/3d/lightmap_gi.h +++ b/scene/3d/lightmap_gi.h @@ -183,7 +183,7 @@ class LightmapGI : public VisualInstance3D { NodePath node_path; int32_t subindex = 0; Ref mesh; - int32_t lightmap_scale = 0; + float lightmap_scale = 0.0; Vector> overrides; }; diff --git a/scene/3d/visual_instance_3d.cpp b/scene/3d/visual_instance_3d.cpp index 503c39ae3e96..e36da562392a 100644 --- a/scene/3d/visual_instance_3d.cpp +++ b/scene/3d/visual_instance_3d.cpp @@ -383,12 +383,11 @@ AABB GeometryInstance3D::get_custom_aabb() const { return custom_aabb; } -void GeometryInstance3D::set_lightmap_scale(LightmapScale p_scale) { - ERR_FAIL_INDEX(p_scale, LIGHTMAP_SCALE_MAX); +void GeometryInstance3D::set_lightmap_scale(float p_scale) { lightmap_scale = p_scale; } -GeometryInstance3D::LightmapScale GeometryInstance3D::get_lightmap_scale() const { +float GeometryInstance3D::get_lightmap_scale() const { return lightmap_scale; } @@ -512,7 +511,7 @@ void GeometryInstance3D::_bind_methods() { ADD_GROUP("Global Illumination", "gi_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "gi_mode", PROPERTY_HINT_ENUM, "Disabled,Static,Dynamic"), "set_gi_mode", "get_gi_mode"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "gi_lightmap_scale", PROPERTY_HINT_ENUM, String::utf8("1×,2×,4×,8×")), "set_lightmap_scale", "get_lightmap_scale"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gi_lightmap_scale", PROPERTY_HINT_RANGE, "0.01,10,0.0001,or_greater"), "set_lightmap_scale", "get_lightmap_scale"); ADD_GROUP("Visibility Range", "visibility_range_"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_visibility_range_begin", "get_visibility_range_begin"); @@ -530,12 +529,6 @@ void GeometryInstance3D::_bind_methods() { BIND_ENUM_CONSTANT(GI_MODE_STATIC); BIND_ENUM_CONSTANT(GI_MODE_DYNAMIC); - BIND_ENUM_CONSTANT(LIGHTMAP_SCALE_1X); - BIND_ENUM_CONSTANT(LIGHTMAP_SCALE_2X); - BIND_ENUM_CONSTANT(LIGHTMAP_SCALE_4X); - BIND_ENUM_CONSTANT(LIGHTMAP_SCALE_8X); - BIND_ENUM_CONSTANT(LIGHTMAP_SCALE_MAX); - BIND_ENUM_CONSTANT(VISIBILITY_RANGE_FADE_DISABLED); BIND_ENUM_CONSTANT(VISIBILITY_RANGE_FADE_SELF); BIND_ENUM_CONSTANT(VISIBILITY_RANGE_FADE_DEPENDENCIES); diff --git a/scene/3d/visual_instance_3d.h b/scene/3d/visual_instance_3d.h index 59ede26ac1b1..e663b1d8cbd1 100644 --- a/scene/3d/visual_instance_3d.h +++ b/scene/3d/visual_instance_3d.h @@ -97,14 +97,6 @@ class GeometryInstance3D : public VisualInstance3D { GI_MODE_DYNAMIC }; - enum LightmapScale { - LIGHTMAP_SCALE_1X, - LIGHTMAP_SCALE_2X, - LIGHTMAP_SCALE_4X, - LIGHTMAP_SCALE_8X, - LIGHTMAP_SCALE_MAX, - }; - enum VisibilityRangeFadeMode { VISIBILITY_RANGE_FADE_DISABLED = RS::VISIBILITY_RANGE_FADE_DISABLED, VISIBILITY_RANGE_FADE_SELF = RS::VISIBILITY_RANGE_FADE_SELF, @@ -131,7 +123,7 @@ class GeometryInstance3D : public VisualInstance3D { float extra_cull_margin = 0.0; AABB custom_aabb; - LightmapScale lightmap_scale = LIGHTMAP_SCALE_1X; + float lightmap_scale = 1.0; GIMode gi_mode = GI_MODE_STATIC; bool ignore_occlusion_culling = false; @@ -182,8 +174,8 @@ class GeometryInstance3D : public VisualInstance3D { void set_gi_mode(GIMode p_mode); GIMode get_gi_mode() const; - void set_lightmap_scale(LightmapScale p_scale); - LightmapScale get_lightmap_scale() const; + void set_lightmap_scale(float p_scale); + float get_lightmap_scale() const; void set_instance_shader_parameter(const StringName &p_name, const Variant &p_value); Variant get_instance_shader_parameter(const StringName &p_name) const; @@ -200,7 +192,6 @@ class GeometryInstance3D : public VisualInstance3D { }; VARIANT_ENUM_CAST(GeometryInstance3D::ShadowCastingSetting); -VARIANT_ENUM_CAST(GeometryInstance3D::LightmapScale); VARIANT_ENUM_CAST(GeometryInstance3D::GIMode); VARIANT_ENUM_CAST(GeometryInstance3D::VisibilityRangeFadeMode);