heightmap terrain for experiment
This commit is contained in:
parent
07df01ea5b
commit
6cdd817cad
BIN
experimente/felox/Photoreal_Grass_06-512x512.png
Normal file
BIN
experimente/felox/Photoreal_Grass_06-512x512.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
35
experimente/felox/Photoreal_Grass_06-512x512.png.import
Normal file
35
experimente/felox/Photoreal_Grass_06-512x512.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://gtwqo5oclbvx"
|
||||
path.s3tc="res://.godot/imported/Photoreal_Grass_06-512x512.png-eacac434657df19f4c9ca4f63722dbe5.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://experimente/felox/Photoreal_Grass_06-512x512.png"
|
||||
dest_files=["res://.godot/imported/Photoreal_Grass_06-512x512.png-eacac434657df19f4c9ca4f63722dbe5.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
experimente/felox/Photoreal_Stone_04-512x512.png
Normal file
BIN
experimente/felox/Photoreal_Stone_04-512x512.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
35
experimente/felox/Photoreal_Stone_04-512x512.png.import
Normal file
35
experimente/felox/Photoreal_Stone_04-512x512.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dyo2qsfjeva8k"
|
||||
path.s3tc="res://.godot/imported/Photoreal_Stone_04-512x512.png-8b2724f2aeb7c1f0c7e952c9aeac99d3.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://experimente/felox/Photoreal_Stone_04-512x512.png"
|
||||
dest_files=["res://.godot/imported/Photoreal_Stone_04-512x512.png-8b2724f2aeb7c1f0c7e952c9aeac99d3.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
51
experimente/felox/heightmap.gd
Normal file
51
experimente/felox/heightmap.gd
Normal file
@ -0,0 +1,51 @@
|
||||
@tool
|
||||
extends StaticBody3D
|
||||
|
||||
@export var generate_mesh : bool = false : set = generate
|
||||
@export var noise: NoiseTexture2D
|
||||
|
||||
signal clicked_on_move(position: Vector3)
|
||||
signal clicked_on_look(position: Vector3)
|
||||
|
||||
|
||||
func _on_input_event(camera: Node, event: InputEvent, position: Vector3, normal: Vector3, shape_idx: int) -> void:
|
||||
if event.is_action_pressed("mouse_move_to"):
|
||||
clicked_on_move.emit(position)
|
||||
if event.is_action_pressed("mouse_look_at"):
|
||||
clicked_on_look.emit(position)
|
||||
|
||||
|
||||
func generate(__):
|
||||
var plane_mesh = PlaneMesh.new()
|
||||
plane_mesh.size = Vector2(500,500)
|
||||
plane_mesh.subdivide_depth = 249
|
||||
plane_mesh.subdivide_width = 249
|
||||
|
||||
var surface_tool = SurfaceTool.new()
|
||||
surface_tool.create_from(plane_mesh,0)
|
||||
var data = surface_tool.commit_to_arrays()
|
||||
var vertices = data[ArrayMesh.ARRAY_VERTEX]
|
||||
|
||||
var image = noise.get_image()
|
||||
for i in vertices.size():
|
||||
var vertex : Vector3 = vertices[i]
|
||||
var noise_value : float
|
||||
if vertex.distance_to(Vector3.ZERO) > 180:
|
||||
noise_value = 15
|
||||
else:
|
||||
noise_value = image.get_pixel((vertex.x*1.2)+250,(vertex.z*1.2)+250).v*15
|
||||
noise_value += randf_range(-.1,.1)
|
||||
vertices[i].y = noise_value
|
||||
#var random_offset = Vector2(randf_range(-.2,.2),randf_range(-.2,.2))
|
||||
#vertices[i].x += random_offset.x
|
||||
#vertices[i].z += random_offset.y
|
||||
data[ArrayMesh.ARRAY_VERTEX] = vertices
|
||||
|
||||
var array_mesh = ArrayMesh.new()
|
||||
array_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, data)
|
||||
|
||||
surface_tool.create_from(array_mesh,0)
|
||||
surface_tool.generate_normals()
|
||||
|
||||
$MeshInstance3D.mesh = surface_tool.commit()
|
||||
$CollisionShape3D.shape = array_mesh.create_trimesh_shape()
|
||||
@ -56,8 +56,8 @@ func _physics_process(delta: float) -> void:
|
||||
|
||||
var asd = Vector2.ZERO
|
||||
if not_dead:
|
||||
if Input.is_action_just_pressed("shoot3"):
|
||||
handle_dying()
|
||||
#if Input.is_action_just_pressed("shoot3"):
|
||||
#handle_dying()
|
||||
|
||||
asd = Input.get_vector("strafe_left", "strafe_right", "move_front", "move_back")*5
|
||||
rotation.y -= delta*Input.get_axis("turn_left","turn_right")*2
|
||||
|
||||
60
experimente/felox/terrainshader.gdshader
Normal file
60
experimente/felox/terrainshader.gdshader
Normal file
@ -0,0 +1,60 @@
|
||||
// NOTE: Shader automatically converted from Godot Engine 4.2.2.stable's StandardMaterial3D.
|
||||
|
||||
shader_type spatial;
|
||||
render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_burley,specular_schlick_ggx;
|
||||
uniform vec4 albedo : source_color;
|
||||
uniform sampler2D texture_albedo : source_color,filter_nearest_mipmap_anisotropic,repeat_enable;
|
||||
uniform sampler2D texture_albedo2 : source_color,filter_nearest_mipmap_anisotropic,repeat_enable;
|
||||
uniform float point_size : hint_range(0,128);
|
||||
uniform float roughness : hint_range(0,1);
|
||||
varying vec3 uv1_triplanar_pos;
|
||||
uniform float uv1_blend_sharpness;
|
||||
varying vec3 uv1_power_normal;
|
||||
uniform vec3 uv1_scale;
|
||||
uniform vec3 uv1_offset;
|
||||
uniform vec3 uv2_scale;
|
||||
uniform vec3 uv2_offset;
|
||||
|
||||
varying float normal_y;
|
||||
uniform float min_rock_slope:hint_range(0.0, 1.0, 0.1);
|
||||
uniform float max_ice_slope:hint_range(0.0, 1.0, 0.1);
|
||||
|
||||
void vertex() {
|
||||
vec3 normal = NORMAL;
|
||||
TANGENT = vec3(0.0,0.0,-1.0) * abs(normal.x);
|
||||
TANGENT+= vec3(1.0,0.0,0.0) * abs(normal.y);
|
||||
TANGENT+= vec3(1.0,0.0,0.0) * abs(normal.z);
|
||||
TANGENT = normalize(TANGENT);
|
||||
BINORMAL = vec3(0.0,1.0,0.0) * abs(normal.x);
|
||||
BINORMAL+= vec3(0.0,0.0,-1.0) * abs(normal.y);
|
||||
BINORMAL+= vec3(0.0,1.0,0.0) * abs(normal.z);
|
||||
BINORMAL = normalize(BINORMAL);
|
||||
uv1_power_normal=pow(abs(NORMAL),vec3(uv1_blend_sharpness));
|
||||
uv1_triplanar_pos = VERTEX * uv1_scale + uv1_offset;
|
||||
uv1_power_normal/=dot(uv1_power_normal,vec3(1.0));
|
||||
uv1_triplanar_pos *= vec3(1.0,-1.0, 1.0);
|
||||
normal_y = normal.y;
|
||||
}
|
||||
|
||||
|
||||
vec4 triplanar_texture(sampler2D p_sampler,vec3 p_weights,vec3 p_triplanar_pos) {
|
||||
vec4 samp=vec4(0.0);
|
||||
samp+= texture(p_sampler,p_triplanar_pos.xy) * p_weights.z;
|
||||
samp+= texture(p_sampler,p_triplanar_pos.xz) * p_weights.y;
|
||||
samp+= texture(p_sampler,p_triplanar_pos.zy * vec2(-1.0,1.0)) * p_weights.x;
|
||||
return samp;
|
||||
}
|
||||
|
||||
|
||||
void fragment() {
|
||||
float rock_ice_weight = normal_y;
|
||||
rock_ice_weight = max(min_rock_slope, rock_ice_weight);
|
||||
rock_ice_weight = min(max_ice_slope, rock_ice_weight);
|
||||
rock_ice_weight -= min_rock_slope;
|
||||
rock_ice_weight /= max_ice_slope - min_rock_slope;
|
||||
|
||||
vec4 albedo_tex = triplanar_texture(texture_albedo,uv1_power_normal,uv1_triplanar_pos);
|
||||
vec4 albedo_tex2 = triplanar_texture(texture_albedo2,uv1_power_normal,uv1_triplanar_pos);
|
||||
|
||||
ALBEDO = albedo.rgb * mix(albedo_tex2.rgb, albedo_tex.rgb, rock_ice_weight);
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user