OverviewFilesCommitsIssuesDocsReleasesPeers

dc-terrain / demo / procnodes_eval_probe.gd

40 lines · gd ref:
## Dumps ProcNodesBridge::evaluate over a fixed grid, as raw float bits.
## The only instrument that can see that function: it is a method on a
## godot_cpp class, so nothing outside the engine reaches it.
extends SceneTree
func _init() -> void:
	var args := OS.get_cmdline_user_args()
	var out_path: String = args[0] if args.size() > 0 else "/tmp/pn_eval.bin"
	var gen := DCTerrainGeneratorProcNodes.new()
	var g := ProcNodeGraph.new()
	var noise := g.add_node(GradientNoiseNode.new())
	g.get_node(noise).set_input_default(1, 3.0)
	g.get_node(noise).set_input_default(2, 3)
	g.get_node(noise).set_input_default(3, 0.1)
	var ero := g.add_node(ErosionNoiseNode.new())
	g.get_node(ero).set_input_default(1, 5.0)
	g.get_node(ero).set_input_default(2, 0.15)
	g.get_node(ero).set_input_default(3, 0.6)
	g.get_node(ero).set_input_default(4, 0.7)
	g.get_node(ero).set_input_default(5, 7)
	g.get_node(ero).set_input_default(6, 0.5)
	g.connect_sockets(noise, 0, ero, 7)
	g.connect_sockets(noise, 1, ero, 8)
	gen.set_graph(g)
	gen.set_terrain_height(21000.0)
	gen.set_floor_y(-10900.0)
	gen.set_ceiling_y(10900.0)
	var t := DCTerrain.new()
	t.set_generator(gen)
	var f := FileAccess.open(out_path, FileAccess.WRITE)
	var n := 0
	for ix in range(-8, 9):
		for iz in range(-8, 9):
			for iy in range(-4, 5):
				var p := Vector3(ix * 137.0, iy * 900.0, iz * 211.0)
				f.store_float(t.sample_density(p))
				n += 1
	f.close()
	print("PN_EVAL_PROBE wrote ", n, " samples -> ", out_path)
	quit()