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)