refonte du material du terrain

pull/41/head
Valentin Stark 3 years ago
parent c1d0a422fb
commit 04321706ab
  1. 35
      utils/world_generation/WorldGeneration.gd
  2. 22
      world/World3d.gd
  3. 5
      world/game.tscn
  4. BIN
      world/materials/colors.png
  5. 35
      world/materials/colors.png.import
  6. BIN
      world/world.material
  7. 1
      world/world.tres

@ -4,13 +4,13 @@ class_name WorldGeneration
export(int) var width = 2048 export(int) var width = 2048
export(int) var height = 2048 export(int) var height = 2048
export(int) var spacing = 20 export(int) var spacing = 5
export(int, 1, 9) var octaves = 5 export(int, 1, 9) var octaves = 5
export(int, 1, 30) var wavelength = 8 export(int, 1, 30) var wavelength = 8
export(int) var border_width = 200 export(int) var border_width = 200
export(int) var terraces = 100 export(int) var terraces = 100
export(int) var terrace_height = 5 export(int) var terrace_height = 5
export(float) var mountain_height = 6.0 / 24.0 export(float) var mountain_height = 10.0 / 24.0
export(int) var river_proba = 200 export(int) var river_proba = 200
var rng = RandomNumberGenerator.new() var rng = RandomNumberGenerator.new()
@ -60,10 +60,12 @@ func init_data():
center.set_elevation(find_elevation(center.point2d())) center.set_elevation(find_elevation(center.point2d()))
if center.get_elevation() <= 0.0: if center.get_elevation() <= 0.0:
center.set_data("water", true) center.set_data("water", true)
if center.get_elevation() >= mountain_height:
center.set_data("mountain", true)
Global.loading.increment_step() Global.loading.increment_step()
fill_oceans() fill_oceans()
remove_holes() # remove_holes()
for center in Global.terrain.get_centers(): for center in Global.terrain.get_centers():
center.set_data("coast", is_coast(center.to_point())) center.set_data("coast", is_coast(center.to_point()))
@ -202,17 +204,6 @@ func edge_is_river(edge):
return true return true
return false return false
# func add_trees():
# rng.randomize()
# var treescene = load("res://entities/environment/birchtree/birchtree.tscn")
# for triangle in Global.terrain.get_triangles():
# if not triangle.get_data("water"):
# var num = rng.randi_range(0, 5)
# if num == 1:
# var tree = treescene.instance()
# tree.translation = Vector3(triangle.center3d() * Vector3(1, 12*10, 1))
# add_child(tree)
@ -231,7 +222,7 @@ func find_elevation(point):
var nx = 2 * point.x / width - 1 var nx = 2 * point.x / width - 1
var ny = 2 * point.y / height - 1 var ny = 2 * point.y / height - 1
var radius = range_lerp(elevation, -1, 1, 0.8, 1.0) var radius = range_lerp(elevation, -1, 1, 0.8, 0.9)
var distance = 1 - (1-pow(nx, 2)) * (1-pow(ny,2)) var distance = 1 - (1-pow(nx, 2)) * (1-pow(ny,2))
distance = sqrt(pow(nx, 2) + pow(ny, 2)) distance = sqrt(pow(nx, 2) + pow(ny, 2))
@ -289,6 +280,15 @@ func create_mesh():
var factor = Vector3(1, 120, 1) var factor = Vector3(1, 120, 1)
for center in Global.terrain.get_centers(): for center in Global.terrain.get_centers():
if not center.get_data("water"): if not center.get_data("water"):
var top_uv = Vector2(0, 0)
var border_uv = Vector2(1, 0)
if center.get_data("mountain"):
top_uv = Vector2(1, 0.5)
border_uv = Vector2(1, 0.5)
if center.get_data("coast"):
top_uv = Vector2(1, 1)
border_uv = Vector2(1, 1)
for edge in center.borders(): for edge in center.borders():
if edge.end_center().get_elevation() < edge.start_center().get_elevation(): if edge.end_center().get_elevation() < edge.start_center().get_elevation():
var top = edge.start_center().get_elevation() var top = edge.start_center().get_elevation()
@ -297,7 +297,7 @@ func create_mesh():
var bottom = edge.end_center().get_elevation() var bottom = edge.end_center().get_elevation()
if edge.end_center().get_data("ocean"): if edge.end_center().get_data("ocean"):
bottom = 0.0 bottom = 0.0
st.add_uv(border_uv)
st.add_vertex(Vector3(edge.start_corner().point3d().x, bottom, edge.start_corner().point3d().z) * factor) st.add_vertex(Vector3(edge.start_corner().point3d().x, bottom, edge.start_corner().point3d().z) * factor)
st.add_vertex(Vector3(edge.end_corner().point3d().x, top, edge.end_corner().point3d().z) * factor) st.add_vertex(Vector3(edge.end_corner().point3d().x, top, edge.end_corner().point3d().z) * factor)
st.add_vertex(Vector3(edge.start_corner().point3d().x, top, edge.start_corner().point3d().z) * factor) st.add_vertex(Vector3(edge.start_corner().point3d().x, top, edge.start_corner().point3d().z) * factor)
@ -305,7 +305,7 @@ func create_mesh():
st.add_vertex(Vector3(edge.start_corner().point3d().x, bottom, edge.start_corner().point3d().z) * factor) st.add_vertex(Vector3(edge.start_corner().point3d().x, bottom, edge.start_corner().point3d().z) * factor)
st.add_vertex(Vector3(edge.end_corner().point3d().x, bottom, edge.end_corner().point3d().z) * factor) st.add_vertex(Vector3(edge.end_corner().point3d().x, bottom, edge.end_corner().point3d().z) * factor)
st.add_vertex(Vector3(edge.end_corner().point3d().x, top, edge.end_corner().point3d().z) * factor) st.add_vertex(Vector3(edge.end_corner().point3d().x, top, edge.end_corner().point3d().z) * factor)
for corner_count in center.corners().size(): for corner_count in center.corners().size():
var current_corner = center.corners()[corner_count] var current_corner = center.corners()[corner_count]
var next_corner var next_corner
@ -314,6 +314,7 @@ func create_mesh():
else: else:
next_corner = center.corners()[0] next_corner = center.corners()[0]
st.add_uv(Vector2(top_uv))
st.add_vertex(Vector3(current_corner.point2d().x, center.get_elevation(), current_corner.point2d().y) * factor) st.add_vertex(Vector3(current_corner.point2d().x, center.get_elevation(), current_corner.point2d().y) * factor)
st.add_vertex(Vector3(next_corner.point2d().x, center.get_elevation(), next_corner.point2d().y) * factor) st.add_vertex(Vector3(next_corner.point2d().x, center.get_elevation(), next_corner.point2d().y) * factor)
st.add_vertex(Vector3(center.point2d().x, center.get_elevation(), center.point2d().y) * factor) st.add_vertex(Vector3(center.point2d().x, center.get_elevation(), center.point2d().y) * factor)

@ -1,5 +1,27 @@
extends Spatial extends Spatial
var rng = RandomNumberGenerator.new()
func _ready(): func _ready():
var mi = Global.terrain.get_data("mesh") var mi = Global.terrain.get_data("mesh")
add_child(mi) add_child(mi)
add_trees()
func add_trees():
rng.randomize()
var treescene = load("res://entities/environment/birchtree/birchtree.tscn")
var poisson_disc_sampling: PoissonDiscSampling = PoissonDiscSampling.new()
for center in Global.terrain.get_centers():
if not center.get_data("water") and not center.get_data("coast") and not center.get_data("mountain"):
var num = rng.randi_range(0,10)
if num == 1:
var points2d = poisson_disc_sampling.generate_points(3, center.polygon(), 2)
for point in points2d:
# print(point)
var tree = treescene.instance()
var scaling = rng.randi_range(0.8, 1.2)
tree.scale = Vector3(scaling, scaling, scaling)
tree.rotate_y(rng.randi_range(0, 2*PI))
tree.translation = Vector3(point.x, center.get_elevation() * 120, point.y)
add_child(tree)

@ -1,7 +1,6 @@
[gd_scene load_steps=12 format=2] [gd_scene load_steps=11 format=2]
[ext_resource path="res://ui/ui.tscn" type="PackedScene" id=1] [ext_resource path="res://ui/ui.tscn" type="PackedScene" id=1]
[ext_resource path="res://world/default_env.tres" type="Environment" id=3]
[ext_resource path="res://world/World3d.gd" type="Script" id=4] [ext_resource path="res://world/World3d.gd" type="Script" id=4]
[ext_resource path="res://utils/camera/CamBase.tscn" type="PackedScene" id=5] [ext_resource path="res://utils/camera/CamBase.tscn" type="PackedScene" id=5]
@ -167,7 +166,6 @@ mesh = SubResource( 1 )
material/0 = SubResource( 3 ) material/0 = SubResource( 3 )
[node name="WorldEnvironment" type="WorldEnvironment" parent="World3d"] [node name="WorldEnvironment" type="WorldEnvironment" parent="World3d"]
environment = ExtResource( 3 )
[node name="CamBase" parent="World3d" instance=ExtResource( 5 )] [node name="CamBase" parent="World3d" instance=ExtResource( 5 )]
@ -178,6 +176,7 @@ fov = 55.0
depth_threshold = 0.001 depth_threshold = 0.001
depth_multiplier = 999.0 depth_multiplier = 999.0
zoom_sensibility = 1.436 zoom_sensibility = 1.436
height = 6.596
[node name="DirectionalLight" type="DirectionalLight" parent="World3d"] [node name="DirectionalLight" type="DirectionalLight" parent="World3d"]
transform = Transform( 0.971628, 0.168947, -0.16552, 0, 0.699825, 0.714314, 0.236516, -0.694047, 0.67997, 0, 1.41623, 14.8745 ) transform = Transform( 0.971628, 0.168947, -0.16552, 0, 0.699825, 0.714314, 0.236516, -0.694047, 0.67997, 0, 1.41623, 14.8745 )

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/colors.png-904d72771a067b8e29c211e8b0822e27.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://world/materials/colors.png"
dest_files=[ "res://.import/colors.png-904d72771a067b8e29c211e8b0822e27.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

Binary file not shown.

@ -1,4 +1,5 @@
[gd_resource type="SpatialMaterial" format=2] [gd_resource type="SpatialMaterial" format=2]
[resource] [resource]
params_diffuse_mode = 1
albedo_color = Color( 0.125, 0.5, 0.275, 1 ) albedo_color = Color( 0.125, 0.5, 0.275, 1 )

Loading…
Cancel
Save