Cleaned up a few more scripts

master
Marc Gilleron 2020-05-07 21:08:21 +01:00
parent 2d609c08f6
commit dcc32eb030
2 changed files with 16 additions and 274 deletions

View File

@ -1,14 +1,10 @@
extends Node
onready var _head = get_parent().get_node("Camera")
onready var _terrain = get_parent().get_parent().get_node("VoxelTerrain")
var _action_place = false
var _action_remove = false
var _head = null
var _terrain = null
func _ready():
_head = get_parent().get_node("Camera")
_terrain = get_parent().get_parent().get_node("VoxelTerrain")
func _input(event):
@ -19,20 +15,8 @@ func _input(event):
elif event.button_index == BUTTON_RIGHT:
_action_remove = true
elif event is InputEventKey:
if event.pressed:
if event.scancode == KEY_P:
print_map_slice()
elif event.scancode == KEY_K:
var p = Spatial.new()
p.translation = get_parent().translation
print("Freezing viewer tracking at ", p.translation)
get_parent().get_parent().add_child(p)
_terrain.set_viewer_path(p.get_path())
func _process(delta):
var head_trans = _head.global_transform
var pointed_pos = head_trans.origin - 6.0 * head_trans.basis.z
@ -56,59 +40,3 @@ func do_sphere(center, fradius, add):
vt.mode = VoxelTool.MODE_REMOVE
vt.do_sphere(center, fradius)
func print_map_slice():
var storage = _terrain.get_storage()
var h = 8
var r = 16
var pos = _head.global_transform.origin
var buffer = VoxelBuffer.new()
buffer.create(2*r, h, 2*r)
var channel = VoxelBuffer.CHANNEL_ISOLEVEL
var minp = pos - Vector3(r, h/2, r)
#print("Printing ", minp, " ; ", buffer.get_size())
#storage.get_buffer_copy(minp, buffer, channel)
for rx in buffer.get_size_x():
for ry in buffer.get_size_y():
for rz in buffer.get_size_z():
var x = rx + int(minp.x)
var y = ry + int(minp.y)
var z = rz + int(minp.z)
var v = storage.get_voxel_f(x, y, z, channel)
buffer.set_voxel_f(v, rx, ry, rz, channel)
print("Going to print")
print_buffer_to_images(buffer, channel, "isolevel", 10)
static func print_buffer_to_images(voxels, channel, fname, upscale):
for y in voxels.get_size_y():
var im = Image.new()
im.create(voxels.get_size_x(), voxels.get_size_z(), false, Image.FORMAT_RGB8)
im.lock()
for z in voxels.get_size_z():
for x in voxels.get_size_x():
var r = 0.5 * voxels.get_voxel_f(x, y, z, channel) + 0.5
if r < 0.5:
im.set_pixel(x, z, Color(r, r, r*0.5 + 0.5))
else:
im.set_pixel(x, z, Color(r, r, r))
im.unlock()
if upscale > 1:
im.resize(im.get_width() * upscale, im.get_height() * upscale, Image.INTERPOLATE_NEAREST)
var fname_png = str(fname, "_", y, ".png")
print("Saved ", fname_png)
im.save_png(fname_png)
print("Printed")

View File

@ -1,19 +1,12 @@
extends Node
const Util = preload("res://common/util.gd")
onready var _terrain = get_node("VoxelTerrain")
onready var _avatar = get_node("SpectatorAvatar")
onready var _camera = get_node("SpectatorAvatar/Camera")
onready var _light = get_node("DirectionalLight")
onready var _terrain = $VoxelTerrain
onready var _avatar = $SpectatorAvatar
onready var _light = $DirectionalLight
var _process_stats = {}
var _displayed_process_stats = {}
var _time_before_display_process_stats = 1.0
var _block_highlights = []
var _first_process_time = -1.0
var _first_time_no_blocked_lods = -1.0
var _process_count = 0
const _process_stat_names = [
"time_detect_required_blocks",
@ -25,33 +18,7 @@ const _process_stat_names = [
]
func _ready():
#test_downscale()
pass
static func test_downscale():
var vb = VoxelBuffer.new()
vb.create(16, 16, 16)
var vb2 = VoxelBuffer.new()
vb2.create(16, 16, 16)
for z in 16:
for x in 16:
for y in 16:
vb.set_voxel_f(2.0 * randf() - 0.1, x, y, z, VoxelBuffer.CHANNEL_SDF)
var d = Vector3(x, y, z).distance_to(Vector3(8,8,8)) - 7
vb2.set_voxel_f(d, x, y, z, VoxelBuffer.CHANNEL_SDF)
vb2.downscale_to(vb, Vector3(), vb2.get_size(), Vector3(0,8,0))
var im = vb.debug_print_sdf_top_down()
im.save_png("downscale_test.png")
im = vb2.debug_print_sdf_top_down()
im.save_png("downscale_test_src.png")
func _process(delta):
if _first_process_time < 0:
_first_process_time = OS.get_ticks_msec()
var stats = _terrain.get_statistics()
for i in len(stats.stream.remaining_blocks_per_thread):
@ -71,13 +38,6 @@ func _process(delta):
DDD.set_text("Mesh sort time", stats.updater.sorting_time)
DDD.set_text("Position", _avatar.translation)
if _first_time_no_blocked_lods < 0 and stats.blocked_lods == 0 and _process_count > 200:
_first_time_no_blocked_lods = OS.get_ticks_msec()
var load_time = _first_time_no_blocked_lods - _first_process_time
print("Time to reach full load: ", float(load_time) / 1000.0, " seconds")
print("First process time: ", _first_process_time)
print(stats)
for k in _process_stat_names:
var v = stats[k]
if k in _process_stats:
@ -94,63 +54,6 @@ func _process(delta):
for k in _displayed_process_stats:
DDD.set_text(k, _displayed_process_stats[k])
#debug_pointed_block()
#if Input.is_key_pressed(KEY_SPACE):
#debug_show_octrees()
_process_count += 1
func debug_show_octrees():
var octrees = _terrain.debug_get_octrees()
var octree_side = _terrain.get_block_size() << (_terrain.get_lod_count() - 1)
var octree_size = Vector3(1,1,1) * octree_side
var r = octree_side * 2
var pad = Vector3(1,1,1)
var ppos = _camera.global_transform.origin #_avatar.translation
for pos in octrees:
var wpos = pos * octree_size
if ppos.distance_to(wpos) < r:
DDD.draw_box(wpos + pad, octree_size - 2 * pad, Color(0,1,0))
func debug_pointed_block():
var ray_origin = _camera.global_transform.origin
var ray_dir = -_camera.global_transform.basis.z
var hits = _terrain.debug_raycast_block(ray_origin, ray_dir)
if len(hits) > 0:
var d = hits[0]
for k in d:
DDD.set_text(str("Pointed block ", k), d[k])
for mi in _block_highlights:
mi.hide()
for i in len(hits):
var d = hits[i]
var mi
if i < len(_block_highlights):
mi = _block_highlights[i]
else:
mi = MeshInstance.new()
var mesh = Util.create_wirecube_mesh()
mi.mesh = mesh
var mat = SpatialMaterial.new()
mat.flags_unshaded = true
mat.vertex_color_use_as_albedo = true
mi.material_override = mat
add_child(mi)
_block_highlights.append(mi)
var pad = 0.1 * d.lod
var scale = (16 << d.lod)
mi.translation = d.position * scale - Vector3(pad, pad, pad)
mi.scale = Vector3(scale, scale, scale) + pad * Vector3(2, 2, 2)
mi.show()
static func _format_memory(m):
var mb = m / 1000000
@ -161,105 +64,16 @@ static func _format_memory(m):
func _input(event):
if event is InputEventKey:
if event.pressed:
match event.scancode:
KEY_O:
var vp = get_viewport()
if vp.debug_draw == Viewport.DEBUG_DRAW_DISABLED:
vp.debug_draw = Viewport.DEBUG_DRAW_OVERDRAW
else:
vp.debug_draw = Viewport.DEBUG_DRAW_DISABLED
if event.scancode == KEY_M:
print("Printing map state")
_print_map_state(_terrain, _avatar.global_transform.origin)
elif event.scancode == KEY_N:
pretty_print(_terrain.get_statistics())
elif event.scancode == KEY_P:
get_tree().get_root().print_tree_pretty()
elif event.scancode == KEY_O:
var vp = get_viewport()
if vp.debug_draw == Viewport.DEBUG_DRAW_DISABLED:
vp.debug_draw = Viewport.DEBUG_DRAW_OVERDRAW
else:
vp.debug_draw = Viewport.DEBUG_DRAW_DISABLED
elif event.scancode == KEY_L:
_light.shadow_enabled = not _light.shadow_enabled
static func pretty_print(d, depth=0):
var indent = ""
for i in depth:
indent += " "
for k in d:
var v = d[k]
if typeof(v) == TYPE_DICTIONARY:
print(indent, k, ": ")
pretty_print(v, depth + 1)
else:
print(indent, k, ": ", d[k])
static func _print_map_state(terrain, avatar_pos):
var r = terrain.get_block_region_extent()
var im_w = 2 * r
var im_h = im_w
for lod_index in terrain.get_lod_count():
var avatar_block_pos = terrain.voxel_to_block_position(avatar_pos, lod_index)
for y in im_h:
var by = avatar_block_pos.y + y - r
var im = Image.new()
im.create(im_w, im_h, false, Image.FORMAT_RGB8)
im.fill(Color(0, 0, 0))
im.lock()
for z in im_w:
for x in im_h:
var bx = avatar_block_pos.x + x - r
var bz = avatar_block_pos.z + z - r
var info = terrain.get_block_info(Vector3(bx, by, bz), lod_index)
var col = Color(0.1, 0.1, 0.1)
if info.loading == 1:
col = Color(0, 0, 0.5)
elif info.loading == 2:
if info.visible:
if info.meshed:
col = Color(1, 1, 1)
else:
col = Color(1, 0, 0)
else:
if info.meshed:
col = Color(0.5, 0.5, 0.5)
else:
col = Color(0.5, 0.0, 0)
im.set_pixel(x, z, col)
im.unlock()
im.resize(im.get_width() * 16, im.get_height() * 16, Image.INTERPOLATE_NEAREST)
var fname = str("debug_data/lod", lod_index, "_y", y, ".png")
print("Saving ", fname)
im.save_png(fname)
if terrain.has_method("dump_block_history"):
var history = terrain.dump_block_history()
var json = JSON.print(history)
var f = File.new()
var fname = "debug_data/block_history.json"
print("Saving ", fname)
f.open(fname, File.WRITE)
f.store_string(json)
f.close()
print("Done")
KEY_L:
# Toggle shadows
_light.shadow_enabled = not _light.shadow_enabled