Added automatic procedural level of detail to planets

This commit is contained in:
2024-02-29 09:00:00 -05:00
parent c2399094c4
commit ec869732ba
14 changed files with 326 additions and 237 deletions

View File

@ -0,0 +1,39 @@
@tool
extends Node3D
class_name Planet
@export var planet_data : Resource = PlanetData.new():
get:
return planet_data
set(value):
planet_data = value
on_data_changed()
if planet_data != null and not planet_data.is_connected("changed", on_data_changed):
planet_data.connect("changed", on_data_changed)
func _ready():
planet_data = PlanetData.new()
planet_data.noise_map = FastNoiseLite.new()
planet_data.noise_map.set_noise_type(FastNoiseLite.NoiseType.TYPE_SIMPLEX)
planet_data.noise_map.frequency = 1
planet_data.noise_map.fractal_octaves = 10
planet_data.planet_color = load("res://Earth-LikeGradient.tres")
on_data_changed()
func on_data_changed():
var i : int = 0
for child in get_children():
if i < 6:
(child as PlanetMeshFace).regenerate_mesh(planet_data)
else:
(child as CSGSphere3D).radius = planet_data.radius
i += 1
func _process(delta):
var i : int = 0
for child in get_children():
if i < 6:
var face := child as PlanetMeshFace
face.update_from_camera_pos(planet_data)
i += 1