Skip to content

Commit ccd086e

Browse files
committed
Fix meshasset not saving card height offset, consolidate density
1 parent 0d730e3 commit ccd086e

File tree

5 files changed

+17
-30
lines changed

5 files changed

+17
-30
lines changed

doc/api/class_terrain3dmeshasset.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Properties
3636
+-------------------------------------------------+-------------------------------------------------------------------------------+-------------------+
3737
| GeometryInstance3D.ShadowCastingSetting | :ref:`cast_shadows<class_Terrain3DMeshAsset_property_cast_shadows>` | ``1`` |
3838
+-------------------------------------------------+-------------------------------------------------------------------------------+-------------------+
39-
| ``float`` | :ref:`density<class_Terrain3DMeshAsset_property_density>` | ``-1.0`` |
39+
| ``float`` | :ref:`density<class_Terrain3DMeshAsset_property_density>` | ``10.0`` |
4040
+-------------------------------------------------+-------------------------------------------------------------------------------+-------------------+
4141
| ``int`` | :ref:`generated_faces<class_Terrain3DMeshAsset_property_generated_faces>` | ``2`` |
4242
+-------------------------------------------------+-------------------------------------------------------------------------------+-------------------+
@@ -205,7 +205,7 @@ Tells the renderer how to cast shadows from this mesh asset onto the terrain and
205205

206206
.. rst-class:: classref-property
207207

208-
``float`` **density** = ``-1.0`` :ref:`🔗<class_Terrain3DMeshAsset_property_density>`
208+
``float`` **density** = ``10.0`` :ref:`🔗<class_Terrain3DMeshAsset_property_density>`
209209

210210
.. rst-class:: classref-property-setget
211211

doc/doc_classes/Terrain3DMeshAsset.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<member name="cast_shadows" type="int" setter="set_cast_shadows" getter="get_cast_shadows" enum="GeometryInstance3D.ShadowCastingSetting" default="1">
4242
Tells the renderer how to cast shadows from this mesh asset onto the terrain and other objects. This sets [code skip-lint]GeometryInstance3D.cast_shadow[/code] on all MultiMeshInstances used by this mesh.
4343
</member>
44-
<member name="density" type="float" setter="set_density" getter="get_density" default="-1.0">
44+
<member name="density" type="float" setter="set_density" getter="get_density" default="10.0">
4545
Density is used to set the approximate default spacing between instances based on the size of the mesh. When painting meshes on the terrain, mesh density is multiplied by brush strength.
4646
This value is not tied to any real world unit. It is calculated as [code skip-lint]10.f / mesh-&gt;get_aabb().get_volume()[/code], then clamped to a sane range. If the calculated amount is inappropriate, increase or decrease it here.
4747
</member>

project/addons/terrain_3d/src/asset_dock.gd

+1-1
Original file line numberDiff line numberDiff line change
@@ -792,8 +792,8 @@ class ListEntry extends VBoxContainer:
792792
var ma := Terrain3DMeshAsset.new()
793793
if resource is Terrain3DMeshAsset:
794794
ma.id = resource.id
795-
ma.set_scene_file(res)
796795
set_edited_resource(ma, false)
796+
ma.set_scene_file(res)
797797
resource = ma
798798
elif res is Terrain3DMeshAsset and type == Terrain3DAssets.TYPE_MESH:
799799
if resource is Terrain3DMeshAsset:

src/terrain_3d_mesh_asset.cpp

+11-23
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@ void Terrain3DMeshAsset::_set_generated_type(const GenType p_type) {
2626
LOG(DEBUG, "Generating card mesh");
2727
_meshes.push_back(_get_generated_mesh());
2828
_set_material_override(_get_material());
29-
_height_offset = 0.5f;
30-
_generated_faces = 2;
31-
_relative_density = 10.f;
32-
_calculated_density = 10.f;
3329
}
3430
}
3531

@@ -158,8 +154,7 @@ void Terrain3DMeshAsset::clear() {
158154
_cast_shadows = GeometryInstance3D::SHADOW_CASTING_SETTING_ON;
159155
_generated_faces = 2.f;
160156
_generated_size = Vector2(1.f, 1.f);
161-
_relative_density = -1.f;
162-
_calculated_density = -1.f;
157+
_density = 10.f;
163158
_packed_scene.unref();
164159
_material_override.unref();
165160
_set_generated_type(TYPE_TEXTURE_CARD);
@@ -187,19 +182,7 @@ void Terrain3DMeshAsset::set_height_offset(const real_t p_offset) {
187182

188183
void Terrain3DMeshAsset::set_density(const real_t p_density) {
189184
LOG(INFO, "Setting mesh density: ", p_density);
190-
if (p_density < 0) {
191-
_relative_density = _calculated_density;
192-
} else {
193-
_relative_density = CLAMP(p_density, 0.01f, 10.f);
194-
}
195-
}
196-
197-
real_t Terrain3DMeshAsset::get_density() const {
198-
if (_relative_density > 0) {
199-
return _relative_density;
200-
} else {
201-
return _calculated_density;
202-
}
185+
_density = CLAMP(p_density, 0.01f, 10.f);
203186
}
204187

205188
void Terrain3DMeshAsset::set_visibility_range(const real_t p_visibility_range) {
@@ -260,30 +243,33 @@ void Terrain3DMeshAsset::set_scene_file(const Ref<PackedScene> &p_scene_file) {
260243
}
261244
if (_meshes.size() > 0) {
262245
Ref<Mesh> mesh = _meshes[0];
263-
_calculated_density = CLAMP(10.f / mesh->get_aabb().get_volume(), 0.01f, 10.0f);
264-
_relative_density = _calculated_density;
265-
LOG(DEBUG, "Emitting file_changed");
266-
emit_signal("file_changed");
246+
_density = CLAMP(10.f / mesh->get_aabb().get_volume(), 0.01f, 10.0f);
267247
} else {
268248
LOG(ERROR, "No MeshInstance3D found in scene file");
269249
}
270250
notify_property_list_changed();
271251
} else {
272252
set_generated_type(TYPE_TEXTURE_CARD);
253+
_density = 10.f;
273254
}
255+
LOG(DEBUG, "Emitting file_changed");
256+
emit_signal("file_changed");
257+
emit_signal("instancer_setting_changed");
274258
}
275259

276260
void Terrain3DMeshAsset::set_material_override(const Ref<Material> &p_material) {
277261
_set_material_override(p_material);
278262
LOG(DEBUG, "Emitting setting_changed");
279263
emit_signal("setting_changed");
264+
emit_signal("instancer_setting_changed");
280265
}
281266

282267
void Terrain3DMeshAsset::set_generated_type(const GenType p_type) {
283268
_set_generated_type(p_type);
284269
LOG(DEBUG, "Emitting file_changed");
285270
notify_property_list_changed();
286271
emit_signal("file_changed");
272+
emit_signal("instancer_setting_changed");
287273
}
288274

289275
void Terrain3DMeshAsset::set_generated_faces(const int p_count) {
@@ -295,6 +281,7 @@ void Terrain3DMeshAsset::set_generated_faces(const int p_count) {
295281
_set_material_override(_get_material());
296282
LOG(DEBUG, "Emitting setting_changed");
297283
emit_signal("setting_changed");
284+
emit_signal("instancer_setting_changed");
298285
}
299286
}
300287
}
@@ -308,6 +295,7 @@ void Terrain3DMeshAsset::set_generated_size(const Vector2 &p_size) {
308295
_set_material_override(_get_material());
309296
LOG(DEBUG, "Emitting setting_changed");
310297
emit_signal("setting_changed");
298+
emit_signal("instancer_setting_changed");
311299
}
312300
}
313301
}

src/terrain_3d_mesh_asset.h

+2-3
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ class Terrain3DMeshAsset : public Terrain3DAssetResource {
3737
Vector2 _generated_size = Vector2(1.f, 1.f);
3838
Ref<PackedScene> _packed_scene;
3939
Ref<Material> _material_override;
40-
real_t _relative_density = -1.f;
41-
real_t _calculated_density = -1.f;
40+
real_t _density = 10.f;
4241

4342
// Working data
4443
TypedArray<Mesh> _meshes;
@@ -65,7 +64,7 @@ class Terrain3DMeshAsset : public Terrain3DAssetResource {
6564
void set_height_offset(const real_t p_offset);
6665
real_t get_height_offset() const { return _height_offset; }
6766
void set_density(const real_t p_density);
68-
real_t get_density() const;
67+
real_t get_density() const { return _density; }
6968

7069
void set_visibility_range(const real_t p_visibility_range);
7170
real_t get_visibility_range() const { return _visibility_range; };

0 commit comments

Comments
 (0)