43 lines
1.6 KiB
GDScript
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)
|