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
|
var asd = Vector2.ZERO
|
||||||
if not_dead:
|
if not_dead:
|
||||||
if Input.is_action_just_pressed("shoot3"):
|
#if Input.is_action_just_pressed("shoot3"):
|
||||||
handle_dying()
|
#handle_dying()
|
||||||
|
|
||||||
asd = Input.get_vector("strafe_left", "strafe_right", "move_front", "move_back")*5
|
asd = Input.get_vector("strafe_left", "strafe_right", "move_front", "move_back")*5
|
||||||
rotation.y -= delta*Input.get_axis("turn_left","turn_right")*2
|
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