Files
Blockline/tests/dust_prepare.gd
T

43 lines
1.6 KiB
GDScript

extends SceneTree
func _initialize() -> void:
call_deferred("run")
func run() -> void:
var scene := Node3D.new()
root.add_child(scene)
var source := NavigationMeshSourceGeometryData3D.new()
DustGeometry.build(scene, source)
for mesh: MeshInstance3D in scene.find_children("*", "MeshInstance3D", true, false):
for surface in mesh.mesh.get_surface_count():
var material := mesh.mesh.surface_get_material(surface).duplicate() as StandardMaterial3D
material.metallic = 0
material.roughness = 1
material.texture_filter = BaseMaterial3D.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC
ResourceSaver.save(material, "res://assets/scan/dust2/" + material.resource_name + ".tres")
var nav := NavigationMesh.new()
nav.cell_size = 0.2
nav.cell_height = 0.05
nav.agent_height = 1.8
nav.agent_radius = 0.4
nav.agent_max_climb = 0.25
nav.agent_max_slope = 46
nav.region_min_size = 2
nav.region_merge_size = 8
nav.edge_max_error = 1.0
NavigationServer3D.bake_from_source_geometry_data(nav, source)
var error := ResourceSaver.save(nav, "res://assets/scan/dust2/navigation.res")
print("DUST BAKE polygons=", nav.get_polygon_count(), " saved=", error)
var vertices := nav.get_vertices()
var rows: Array = []
for i in nav.get_polygon_count():
var poly: Array = []
for index in nav.get_polygon(i):
var v := vertices[index]
poly.append([v.x, v.y, v.z])
rows.append(poly)
var file := FileAccess.open("res://logs/dust-nav.json", FileAccess.WRITE)
file.store_string(JSON.stringify(rows))
scene.free()
quit(0 if nav.get_polygon_count() > 0 and error == OK else 1)