ocean and fish placeholders
@ -0,0 +1,71 @@
|
|||||||
|
// NOTE: Shader automatically converted from Godot Engine 4.1.1.stable's StandardMaterial3D.
|
||||||
|
// Drops distant fragments to keep the object in the opaque part of the render pipeline.
|
||||||
|
|
||||||
|
shader_type spatial;
|
||||||
|
render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_burley,specular_schlick_ggx, world_vertex_coords;
|
||||||
|
uniform vec4 albedo : source_color;
|
||||||
|
uniform sampler2D texture_albedo : source_color,filter_linear_mipmap,repeat_enable;
|
||||||
|
uniform float point_size : hint_range(0,128);
|
||||||
|
uniform float roughness : hint_range(0,1);
|
||||||
|
uniform sampler2D texture_metallic : hint_default_white,filter_linear_mipmap,repeat_enable;
|
||||||
|
uniform vec4 metallic_texture_channel;
|
||||||
|
uniform sampler2D texture_roughness : hint_roughness_r,filter_linear_mipmap,repeat_enable;
|
||||||
|
uniform float specular;
|
||||||
|
uniform float metallic;
|
||||||
|
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;
|
||||||
|
|
||||||
|
uniform float drop_far;
|
||||||
|
|
||||||
|
varying vec3 world_coordinates;
|
||||||
|
|
||||||
|
void vertex() {
|
||||||
|
world_coordinates = VERTEX;
|
||||||
|
|
||||||
|
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(mat3(MODEL_MATRIX) * NORMAL),vec3(uv1_blend_sharpness));
|
||||||
|
uv1_triplanar_pos = world_coordinates * uv1_scale + uv1_offset;
|
||||||
|
uv1_power_normal/=dot(uv1_power_normal,vec3(1.0));
|
||||||
|
uv1_triplanar_pos *= vec3(1.0,-1.0, 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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() {
|
||||||
|
vec4 albedo_tex = triplanar_texture(texture_albedo,uv1_power_normal,uv1_triplanar_pos);
|
||||||
|
ALBEDO = albedo.rgb * albedo_tex.rgb;
|
||||||
|
float metallic_tex = dot(triplanar_texture(texture_metallic,uv1_power_normal,uv1_triplanar_pos),metallic_texture_channel);
|
||||||
|
METALLIC = metallic_tex * metallic;
|
||||||
|
vec4 roughness_texture_channel = vec4(1.0,0.0,0.0,0.0);
|
||||||
|
float roughness_tex = dot(triplanar_texture(texture_roughness,uv1_power_normal,uv1_triplanar_pos),roughness_texture_channel);
|
||||||
|
ROUGHNESS = roughness_tex * roughness;
|
||||||
|
SPECULAR = specular;
|
||||||
|
|
||||||
|
float distance_from_camera = distance(world_coordinates, CAMERA_POSITION_WORLD);
|
||||||
|
|
||||||
|
if (distance_from_camera > drop_far) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
uid://tcf27ddqlolc
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
[gd_resource type="Environment" load_steps=3 format=3 uid="uid://kw5c7bat248e"]
|
||||||
|
|
||||||
|
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_x78fb"]
|
||||||
|
sky_top_color = Color(0.0470588, 0.454902, 0.976471, 1)
|
||||||
|
sky_horizon_color = Color(0.556863, 0.823529, 0.909804, 1)
|
||||||
|
sky_curve = 0.251337
|
||||||
|
ground_bottom_color = Color(0.188235, 0.517647, 0.92549, 1)
|
||||||
|
ground_horizon_color = Color(0.513726, 0.85098, 1, 1)
|
||||||
|
ground_curve = 0.0743257
|
||||||
|
|
||||||
|
[sub_resource type="Sky" id="Sky_grlw4"]
|
||||||
|
sky_material = SubResource("ProceduralSkyMaterial_x78fb")
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
background_mode = 2
|
||||||
|
sky = SubResource("Sky_grlw4")
|
||||||
|
ambient_light_source = 3
|
||||||
|
ambient_light_color = Color(0.505882, 0.505882, 0.505882, 1)
|
||||||
|
ambient_light_sky_contribution = 0.49
|
||||||
|
reflected_light_source = 2
|
||||||
|
tonemap_mode = 2
|
||||||
|
fog_sun_scatter = 0.06
|
||||||
|
fog_density = 0.0005
|
||||||
|
fog_aerial_perspective = 1.0
|
||||||
|
volumetric_fog_enabled = true
|
||||||
|
volumetric_fog_density = 0.0
|
||||||
|
volumetric_fog_length = 500.39
|
||||||
|
After Width: | Height: | Size: 90 KiB |
@ -0,0 +1,42 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dwsniss71hd03"
|
||||||
|
path.s3tc="res://.godot/imported/Sand.png-85ed17ac5b6334e2f77e493ffa3f725e.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/Sand.png-85ed17ac5b6334e2f77e493ffa3f725e.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/Sand.png"
|
||||||
|
dest_files=["res://.godot/imported/Sand.png-85ed17ac5b6334e2f77e493ffa3f725e.s3tc.ctex", "res://.godot/imported/Sand.png-85ed17ac5b6334e2f77e493ffa3f725e.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
|
After Width: | Height: | Size: 439 KiB |
@ -0,0 +1,42 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bqxoxedatdab3"
|
||||||
|
path.s3tc="res://.godot/imported/UV_checker_grid_dark.png-87fbdfe910052eaa76309e869c41533e.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/UV_checker_grid_dark.png-87fbdfe910052eaa76309e869c41533e.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/UV_checker_grid_dark.png"
|
||||||
|
dest_files=["res://.godot/imported/UV_checker_grid_dark.png-87fbdfe910052eaa76309e869c41533e.s3tc.ctex", "res://.godot/imported/UV_checker_grid_dark.png-87fbdfe910052eaa76309e869c41533e.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
# Copyright © 2017 Hugo Locurcio and contributors - MIT license
|
||||||
|
# See LICENSE.md included in the source distribution for more information.
|
||||||
|
|
||||||
|
extends Camera3D
|
||||||
|
|
||||||
|
const MOVE_SPEED = 8
|
||||||
|
const MOUSE_SENSITIVITY = 0.002
|
||||||
|
const CAMERA_FAR_STEP = 200
|
||||||
|
var rot_target := Vector3(0, 0, 0)
|
||||||
|
@onready var speed := 1
|
||||||
|
@onready var velocity := Vector3()
|
||||||
|
@onready var initial_rotation: float = PI / 2.0
|
||||||
|
|
||||||
|
|
||||||
|
func _enter_tree():
|
||||||
|
# Capture the mouse (can be toggled by pressing F10)
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
|
|
||||||
|
|
||||||
|
func _input(event):
|
||||||
|
# Horizontal mouse look
|
||||||
|
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||||||
|
rot_target.y -= event.relative.x * MOUSE_SENSITIVITY
|
||||||
|
|
||||||
|
# wrap horizontal mouselook
|
||||||
|
if rot_target.y > PI:
|
||||||
|
rot_target.y -= 2 * PI
|
||||||
|
if rot_target.y < -PI:
|
||||||
|
rot_target.y += 2 * PI
|
||||||
|
|
||||||
|
# Vertical mouse look, clamped to -90..90 degrees
|
||||||
|
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||||||
|
rot_target.x = clamp(
|
||||||
|
rot_target.x - event.relative.y * MOUSE_SENSITIVITY, deg_to_rad(-90), deg_to_rad(90)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Toggle mouse capture
|
||||||
|
if event.is_action_pressed("ui_accept"):
|
||||||
|
if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||||
|
else:
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
|
|
||||||
|
if Input.is_action_just_pressed("ui_cancel"):
|
||||||
|
get_tree().quit()
|
||||||
|
|
||||||
|
|
||||||
|
func _physics_process(delta):
|
||||||
|
# Apply rotation
|
||||||
|
rotation = slerp_euler_no_z(rotation, rot_target, 20 * delta)
|
||||||
|
|
||||||
|
# Movement
|
||||||
|
speed = MOVE_SPEED
|
||||||
|
if Input.is_action_pressed("ui_up"):
|
||||||
|
velocity.x -= speed * delta
|
||||||
|
|
||||||
|
if Input.is_action_pressed("ui_down"):
|
||||||
|
velocity.x += speed * delta
|
||||||
|
|
||||||
|
if Input.is_action_pressed("ui_left"):
|
||||||
|
velocity.z += speed * delta
|
||||||
|
|
||||||
|
if Input.is_action_pressed("ui_right"):
|
||||||
|
velocity.z -= speed * delta
|
||||||
|
|
||||||
|
if Input.is_action_just_pressed("ui_page_up"):
|
||||||
|
far += CAMERA_FAR_STEP
|
||||||
|
|
||||||
|
if Input.is_action_just_pressed("ui_page_down"):
|
||||||
|
far -= CAMERA_FAR_STEP
|
||||||
|
|
||||||
|
# Friction
|
||||||
|
velocity *= 0.875
|
||||||
|
|
||||||
|
# Apply velocity
|
||||||
|
position += (
|
||||||
|
velocity
|
||||||
|
. rotated(Vector3(0, 1, 0), rotation.y - initial_rotation)
|
||||||
|
. rotated(Vector3(1, 0, 0), cos(rotation.y) * rotation.x)
|
||||||
|
. rotated(Vector3(0, 0, 1), -sin(rotation.y) * rotation.x)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
func _exit_tree():
|
||||||
|
# Restore the mouse cursor upon quitting
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||||
|
|
||||||
|
|
||||||
|
## Spherical linear interpolate between two rotations, removing any Z rotation
|
||||||
|
## Useful for lerping camera rotation with mouse movement
|
||||||
|
func slerp_euler_no_z(initial_rot, target_rot, weight):
|
||||||
|
var i_b = Basis.from_euler(initial_rot)
|
||||||
|
var t_b = Basis.from_euler(target_rot)
|
||||||
|
var init_trans = Transform3D(i_b, Vector3(0, 0, 0))
|
||||||
|
var target_trans = Transform3D(t_b, Vector3(0, 0, 0))
|
||||||
|
|
||||||
|
var final_trans = init_trans.interpolate_with(target_trans, weight)
|
||||||
|
var final_rot = final_trans.basis.get_euler()
|
||||||
|
final_rot.z = 0
|
||||||
|
return final_rot
|
||||||
@ -0,0 +1 @@
|
|||||||
|
uid://b0kynwddu3sas
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://bf2pvto4lly3o"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_6j64u"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_6j64u")
|
||||||
|
steepness = 0.7
|
||||||
|
amplitude = 1.0
|
||||||
|
direction_degrees = 25.0
|
||||||
|
frequency = 0.005
|
||||||
|
speed = 1.0
|
||||||
|
phase_degrees = 0.0
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://1wsbw638p6o2"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_c2h7g"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_c2h7g")
|
||||||
|
steepness = 0.45
|
||||||
|
amplitude = 0.7
|
||||||
|
direction_degrees = 315.0
|
||||||
|
frequency = 0.06
|
||||||
|
speed = 3.0
|
||||||
|
phase_degrees = 0.0
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://byfaqt1j16ysr"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_bf80m"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_bf80m")
|
||||||
|
steepness = 0.8
|
||||||
|
amplitude = 1.5
|
||||||
|
direction_degrees = 77.0
|
||||||
|
frequency = 0.001
|
||||||
|
speed = 0.05
|
||||||
|
phase_degrees = 0.0
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://c5j78g2giv011"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_c7k22"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_c7k22")
|
||||||
|
steepness = 1.5
|
||||||
|
amplitude = 1.0
|
||||||
|
direction_degrees = 144.0
|
||||||
|
frequency = 0.007
|
||||||
|
speed = 0.05
|
||||||
|
phase_degrees = 0.0
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
extends Label
|
||||||
|
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
text = "FPS: " + str(Performance.get_monitor(Performance.TIME_FPS))
|
||||||
@ -0,0 +1 @@
|
|||||||
|
uid://bu3vqvb7gebbv
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://bavxgduu5sv2c"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_2nfjo"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_2nfjo")
|
||||||
|
steepness = 4.0
|
||||||
|
amplitude = 1.0
|
||||||
|
direction_degrees = 0.0
|
||||||
|
frequency = 0.02
|
||||||
|
speed = 1.0
|
||||||
|
phase_degrees = 0.0
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://c33noe5oxh41i"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_upopg"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_upopg")
|
||||||
|
steepness = 0.9
|
||||||
|
amplitude = 0.7
|
||||||
|
direction_degrees = 315.0
|
||||||
|
frequency = 0.06
|
||||||
|
speed = 3.0
|
||||||
|
phase_degrees = 0.0
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://0hol4u8hadr8"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_1ksos"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_1ksos")
|
||||||
|
steepness = 0.8
|
||||||
|
amplitude = 0.5
|
||||||
|
direction_degrees = 90.0
|
||||||
|
frequency = 0.04
|
||||||
|
speed = 1.5
|
||||||
|
phase_degrees = 0.0
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://cxeeuqlnw0v08"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_h1pxf"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_h1pxf")
|
||||||
|
steepness = 2.0
|
||||||
|
amplitude = 1.0
|
||||||
|
direction_degrees = 150.0
|
||||||
|
frequency = 0.06
|
||||||
|
speed = 1.6
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://d4jrd7iuain81"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_5gjhf"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_5gjhf")
|
||||||
|
steepness = 1.0
|
||||||
|
amplitude = 0.4
|
||||||
|
direction_degrees = 225.0
|
||||||
|
frequency = 0.05
|
||||||
|
speed = 1.0
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://drnqso0evwmyq"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_5nrnl"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_5nrnl")
|
||||||
|
steepness = 1.5
|
||||||
|
amplitude = 1.5
|
||||||
|
direction_degrees = 15.0
|
||||||
|
frequency = 0.02
|
||||||
|
speed = 1.0
|
||||||
|
phase_degrees = 0.0
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
extends Label
|
||||||
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
uid://diqskposu78gy
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
|
func _input(event):
|
||||||
|
if event.is_action_pressed("ui_focus_next"):
|
||||||
|
visible = !visible
|
||||||
@ -0,0 +1 @@
|
|||||||
|
uid://bixia31bh40fb
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://c7phyredymkgu"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://3kpp1l04oqfu" path="res://example/boujie_water_shader/obelisk/StoneFloorTexture.png" id="1_3rfq7"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
albedo_texture = ExtResource("1_3rfq7")
|
||||||
|
uv1_scale = Vector3(0.01, 0.01, 0.01)
|
||||||
|
uv1_triplanar = true
|
||||||
|
uv1_world_triplanar = true
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wavefront_obj"
|
||||||
|
importer_version=1
|
||||||
|
type="Mesh"
|
||||||
|
uid="uid://f85dvooifh0c"
|
||||||
|
path="res://.godot/imported/mountains.obj-b635f0bf390e5658745323d1681944e7.mesh"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
files=["res://.godot/imported/mountains.obj-b635f0bf390e5658745323d1681944e7.mesh"]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/mountains.obj"
|
||||||
|
dest_files=["res://.godot/imported/mountains.obj-b635f0bf390e5658745323d1681944e7.mesh", "res://.godot/imported/mountains.obj-b635f0bf390e5658745323d1681944e7.mesh"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
generate_tangents=true
|
||||||
|
generate_lods=true
|
||||||
|
generate_shadow_mesh=true
|
||||||
|
generate_lightmap_uv2=false
|
||||||
|
generate_lightmap_uv2_texel_size=0.2
|
||||||
|
scale_mesh=Vector3(1, 1, 1)
|
||||||
|
offset_mesh=Vector3(0, 0, 0)
|
||||||
|
force_disable_mesh_compression=false
|
||||||
|
After Width: | Height: | Size: 448 KiB |
@ -0,0 +1,42 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://3kpp1l04oqfu"
|
||||||
|
path.s3tc="res://.godot/imported/StoneFloorTexture.png-0b66480fabae869923318464acc26ce4.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/StoneFloorTexture.png-0b66480fabae869923318464acc26ce4.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/obelisk/StoneFloorTexture.png"
|
||||||
|
dest_files=["res://.godot/imported/StoneFloorTexture.png-0b66480fabae869923318464acc26ce4.s3tc.ctex", "res://.godot/imported/StoneFloorTexture.png-0b66480fabae869923318464acc26ce4.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
|
After Width: | Height: | Size: 12 MiB |
@ -0,0 +1,42 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://5nlv65oy8011"
|
||||||
|
path.s3tc="res://.godot/imported/diffuse.tga-3b468a6844fdaae3b2e1169d98549e73.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/diffuse.tga-3b468a6844fdaae3b2e1169d98549e73.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/obelisk/diffuse.tga"
|
||||||
|
dest_files=["res://.godot/imported/diffuse.tga-3b468a6844fdaae3b2e1169d98549e73.s3tc.ctex", "res://.godot/imported/diffuse.tga-3b468a6844fdaae3b2e1169d98549e73.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
|
After Width: | Height: | Size: 16 MiB |
@ -0,0 +1,42 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cwb2uvrheh7b5"
|
||||||
|
path.s3tc="res://.godot/imported/normal.tga-3b5ab8c91e9d8bca47aa38c7d6bd0419.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/normal.tga-3b5ab8c91e9d8bca47aa38c7d6bd0419.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/obelisk/normal.tga"
|
||||||
|
dest_files=["res://.godot/imported/normal.tga-3b5ab8c91e9d8bca47aa38c7d6bd0419.s3tc.ctex", "res://.godot/imported/normal.tga-3b5ab8c91e9d8bca47aa38c7d6bd0419.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=1
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=1
|
||||||
|
roughness/src_normal="res://example/ck_water_shader/obelisk/normal.tga"
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://dn0ukrkqrpmne"]
|
||||||
|
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://cj0csa11nva20" path="res://example/boujie_water_shader/obelisk/pyramid_pillar.obj" id="1_wsgbn"]
|
||||||
|
[ext_resource type="Material" uid="uid://b5yp2r2ccy8cj" path="res://example/boujie_water_shader/obelisk/obelisk_material.tres" id="2_j4ere"]
|
||||||
|
[ext_resource type="Material" uid="uid://dm15sg1uklilb" path="res://example/boujie_water_shader/pedestal/pedestal_material.tres" id="3_pje54"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_pq17w"]
|
||||||
|
size = Vector3(5, 40, 5)
|
||||||
|
|
||||||
|
[node name="Obelisk" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="Capstone" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0)
|
||||||
|
mesh = ExtResource("1_wsgbn")
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
surface_material_override/0 = ExtResource("2_j4ere")
|
||||||
|
|
||||||
|
[node name="Foundation" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -20, 0)
|
||||||
|
mesh = SubResource("BoxMesh_pq17w")
|
||||||
|
surface_material_override/0 = ExtResource("3_pje54")
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[gd_resource type="StandardMaterial3D" load_steps=4 format=3 uid="uid://b5yp2r2ccy8cj"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://5nlv65oy8011" path="res://example/boujie_water_shader/obelisk/diffuse.tga" id="1_mxakg"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bwo57ja5h8p0r" path="res://example/boujie_water_shader/obelisk/specular.tga" id="2_v426m"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cwb2uvrheh7b5" path="res://example/boujie_water_shader/obelisk/normal.tga" id="3_aqvlg"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
albedo_texture = ExtResource("1_mxakg")
|
||||||
|
metallic = 1.0
|
||||||
|
metallic_texture = ExtResource("2_v426m")
|
||||||
|
normal_enabled = true
|
||||||
|
normal_texture = ExtResource("3_aqvlg")
|
||||||
@ -0,0 +1,239 @@
|
|||||||
|
# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
|
||||||
|
# File Created: 09.11.2011 17:39:33
|
||||||
|
|
||||||
|
#
|
||||||
|
# object pillar_pyramid
|
||||||
|
#
|
||||||
|
|
||||||
|
v -23.5000 0.0000 -25.0000
|
||||||
|
v 23.5000 0.0000 -25.0000
|
||||||
|
v 23.5000 0.0000 25.0000
|
||||||
|
v -23.5000 0.0000 25.0000
|
||||||
|
v 23.5000 10.0000 25.0000
|
||||||
|
v -23.5000 10.0000 25.0000
|
||||||
|
v 25.0000 0.0000 23.5000
|
||||||
|
v 25.0000 0.0000 -23.5000
|
||||||
|
v 25.0000 10.0000 -23.5000
|
||||||
|
v 25.0000 10.0000 23.5000
|
||||||
|
v -23.5000 10.0000 -25.0000
|
||||||
|
v 23.5000 10.0000 -25.0000
|
||||||
|
v -25.0000 0.0000 -23.5000
|
||||||
|
v -25.0000 0.0000 23.5000
|
||||||
|
v -25.0000 10.0000 23.5000
|
||||||
|
v -25.0000 10.0000 -23.5000
|
||||||
|
v 8.5000 25.0000 10.0000
|
||||||
|
v -8.5000 25.0000 10.0000
|
||||||
|
v 10.0000 25.0000 -8.5000
|
||||||
|
v 10.0000 25.0000 8.5000
|
||||||
|
v -8.5000 25.0000 -10.0000
|
||||||
|
v 8.5000 25.0000 -10.0000
|
||||||
|
v -10.0000 25.0000 8.5000
|
||||||
|
v -10.0000 25.0000 -8.5000
|
||||||
|
v 16.9710 40.0000 18.4710
|
||||||
|
v -16.9710 40.0000 18.4710
|
||||||
|
v 18.4710 40.0000 -16.9710
|
||||||
|
v 18.4710 40.0000 16.9710
|
||||||
|
v -16.9710 40.0000 -18.4710
|
||||||
|
v 16.9710 40.0000 -18.4710
|
||||||
|
v -18.4710 40.0000 16.9710
|
||||||
|
v -18.4710 40.0000 -16.9710
|
||||||
|
v 8.4330 250.0000 9.9330
|
||||||
|
v -8.4330 250.0000 9.9330
|
||||||
|
v 9.9330 250.0000 -8.4330
|
||||||
|
v 9.9330 250.0000 8.4330
|
||||||
|
v -8.4330 250.0000 -9.9330
|
||||||
|
v 8.4330 250.0000 -9.9330
|
||||||
|
v -9.9330 250.0000 8.4330
|
||||||
|
v -9.9330 250.0000 -8.4330
|
||||||
|
v 0.0000 270.9756 -0.0000
|
||||||
|
# 41 vertices
|
||||||
|
|
||||||
|
vn -0.2971 -0.6303 -0.7173
|
||||||
|
vn 0.2971 -0.6303 -0.7173
|
||||||
|
vn 0.2971 -0.6303 0.7173
|
||||||
|
vn -0.2971 -0.6303 0.7173
|
||||||
|
vn 0.3662 0.4093 0.8357
|
||||||
|
vn -0.3662 0.4093 0.8357
|
||||||
|
vn 0.7173 -0.6303 0.2971
|
||||||
|
vn 0.7173 -0.6303 -0.2971
|
||||||
|
vn 0.8357 0.4093 -0.3662
|
||||||
|
vn 0.8357 0.4093 0.3662
|
||||||
|
vn -0.3662 0.4093 -0.8357
|
||||||
|
vn 0.3662 0.4093 -0.8357
|
||||||
|
vn -0.7173 -0.6303 -0.2971
|
||||||
|
vn -0.7173 -0.6303 0.2971
|
||||||
|
vn -0.8357 0.4093 0.3662
|
||||||
|
vn -0.8357 0.4093 -0.3662
|
||||||
|
vn 0.2946 0.1661 0.9411
|
||||||
|
vn -0.2946 0.1661 0.9411
|
||||||
|
vn 0.9411 0.1661 -0.2946
|
||||||
|
vn 0.9411 0.1661 0.2946
|
||||||
|
vn -0.2946 0.1661 -0.9411
|
||||||
|
vn 0.2946 0.1661 -0.9411
|
||||||
|
vn -0.9411 0.1661 0.2946
|
||||||
|
vn -0.9411 0.1661 -0.2946
|
||||||
|
vn 0.3890 -0.2707 0.8806
|
||||||
|
vn -0.3890 -0.2707 0.8806
|
||||||
|
vn 0.8806 -0.2707 -0.3890
|
||||||
|
vn 0.8806 -0.2707 0.3890
|
||||||
|
vn -0.3890 -0.2707 -0.8806
|
||||||
|
vn 0.3890 -0.2707 -0.8806
|
||||||
|
vn -0.8806 -0.2707 0.3890
|
||||||
|
vn -0.8806 -0.2707 -0.3890
|
||||||
|
vn 0.3778 0.2764 0.8837
|
||||||
|
vn -0.3778 0.2764 0.8837
|
||||||
|
vn 0.8837 0.2764 -0.3778
|
||||||
|
vn 0.8837 0.2764 0.3778
|
||||||
|
vn -0.3778 0.2764 -0.8837
|
||||||
|
vn 0.3778 0.2764 -0.8837
|
||||||
|
vn -0.8837 0.2764 0.3778
|
||||||
|
vn -0.8837 0.2764 -0.3778
|
||||||
|
vn 0.0000 0.4280 0.9038
|
||||||
|
vn 0.9038 0.4280 -0.0000
|
||||||
|
vn 0.0000 0.4280 -0.9038
|
||||||
|
vn -0.9038 0.4280 -0.0000
|
||||||
|
vn -0.6012 0.5264 0.6012
|
||||||
|
vn 0.6012 0.5264 0.6012
|
||||||
|
vn 0.6012 0.5264 -0.6012
|
||||||
|
vn -0.6012 0.5264 -0.6012
|
||||||
|
# 48 vertex normals
|
||||||
|
|
||||||
|
vt 0.7860 0.0000 0.0000
|
||||||
|
vt 0.9507 0.0007 0.0000
|
||||||
|
vt 0.9500 0.1759 0.0000
|
||||||
|
vt 0.7853 0.1752 0.0000
|
||||||
|
vt 0.8279 0.7736 0.0000
|
||||||
|
vt 0.6631 0.7736 0.0000
|
||||||
|
vt 0.6631 0.7385 0.0000
|
||||||
|
vt 0.8279 0.7385 0.0000
|
||||||
|
vt 0.6557 0.7736 0.0000
|
||||||
|
vt 0.4910 0.7735 0.0000
|
||||||
|
vt 0.4910 0.7385 0.0000
|
||||||
|
vt 0.6557 0.7385 0.0000
|
||||||
|
vt 0.4836 0.7735 0.0000
|
||||||
|
vt 0.3189 0.7735 0.0000
|
||||||
|
vt 0.3189 0.7385 0.0000
|
||||||
|
vt 0.4836 0.7385 0.0000
|
||||||
|
vt 1.0000 0.7736 0.0000
|
||||||
|
vt 0.8353 0.7736 0.0000
|
||||||
|
vt 0.8353 0.7385 0.0000
|
||||||
|
vt 1.0000 0.7385 0.0000
|
||||||
|
vt 0.0022 0.6341 0.0000
|
||||||
|
vt 0.1330 0.5339 0.0000
|
||||||
|
vt 0.1364 0.6249 0.0000
|
||||||
|
vt 0.0891 0.6612 0.0000
|
||||||
|
vt 0.1404 0.5337 0.0000
|
||||||
|
vt 0.2784 0.6236 0.0000
|
||||||
|
vt 0.1938 0.6572 0.0000
|
||||||
|
vt 0.1439 0.6246 0.0000
|
||||||
|
vt 0.2812 0.6305 0.0000
|
||||||
|
vt 0.2424 0.7906 0.0000
|
||||||
|
vt 0.1825 0.7220 0.0000
|
||||||
|
vt 0.1965 0.6641 0.0000
|
||||||
|
vt 0.0508 0.7979 0.0000
|
||||||
|
vt 0.0000 0.6412 0.0000
|
||||||
|
vt 0.0869 0.6683 0.0000
|
||||||
|
vt 0.1053 0.7249 0.0000
|
||||||
|
vt 0.5111 0.6303 0.0000
|
||||||
|
vt 0.4591 0.6012 0.0000
|
||||||
|
vt 0.4626 0.5340 0.0000
|
||||||
|
vt 0.5665 0.5920 0.0000
|
||||||
|
vt 0.4517 0.6008 0.0000
|
||||||
|
vt 0.3969 0.6243 0.0000
|
||||||
|
vt 0.3459 0.5806 0.0000
|
||||||
|
vt 0.4552 0.5337 0.0000
|
||||||
|
vt 0.3921 0.6300 0.0000
|
||||||
|
vt 0.3773 0.6877 0.0000
|
||||||
|
vt 0.3114 0.7014 0.0000
|
||||||
|
vt 0.3410 0.5862 0.0000
|
||||||
|
vt 0.5241 0.6953 0.0000
|
||||||
|
vt 0.5154 0.6364 0.0000
|
||||||
|
vt 0.5707 0.5981 0.0000
|
||||||
|
vt 0.5882 0.7158 0.0000
|
||||||
|
vt 0.0038 0.3778 0.0000
|
||||||
|
vt 0.0000 0.2589 0.0000
|
||||||
|
vt 0.7371 0.2655 0.0000
|
||||||
|
vt 0.7390 0.3246 0.0000
|
||||||
|
vt 0.0001 0.2515 0.0000
|
||||||
|
vt 0.0060 0.1327 0.0000
|
||||||
|
vt 0.7401 0.1991 0.0000
|
||||||
|
vt 0.7372 0.2581 0.0000
|
||||||
|
vt 0.0066 0.1253 0.0000
|
||||||
|
vt 0.0222 0.0073 0.0000
|
||||||
|
vt 0.7485 0.1331 0.0000
|
||||||
|
vt 0.7408 0.1917 0.0000
|
||||||
|
vt 0.0177 0.5034 0.0000
|
||||||
|
vt 0.0043 0.3852 0.0000
|
||||||
|
vt 0.7395 0.3320 0.0000
|
||||||
|
vt 0.7462 0.3908 0.0000
|
||||||
|
vt 0.1496 0.8899 0.0000
|
||||||
|
vt 0.0968 0.9166 0.0000
|
||||||
|
vt 0.0865 0.8307 0.0000
|
||||||
|
vt 0.0894 0.9171 0.0000
|
||||||
|
vt 0.0332 0.8988 0.0000
|
||||||
|
vt 0.0275 0.8940 0.0000
|
||||||
|
vt 0.0006 0.8414 0.0000
|
||||||
|
vt 0.1730 0.8281 0.0000
|
||||||
|
vt 0.1544 0.8843 0.0000
|
||||||
|
vt 0.3114 0.7735 0.0000
|
||||||
|
vt 0.3114 0.7385 0.0000
|
||||||
|
vt 0.2368 0.7955 0.0000
|
||||||
|
vt 0.1769 0.7269 0.0000
|
||||||
|
vt 0.3788 0.6950 0.0000
|
||||||
|
vt 0.3129 0.7087 0.0000
|
||||||
|
vt 0.0234 0.0000 0.0000
|
||||||
|
vt 0.7498 0.1257 0.0000
|
||||||
|
vt 0.0000 0.8340 0.0000
|
||||||
|
vt 0.7800 0.1699 0.0000
|
||||||
|
vt 0.7807 0.0052 0.0000
|
||||||
|
vt 0.9559 0.0060 0.0000
|
||||||
|
vt 0.9553 0.1707 0.0000
|
||||||
|
# 90 texture coords
|
||||||
|
|
||||||
|
g pillar_pyramid
|
||||||
|
s 1
|
||||||
|
f 1/1/1 2/2/2 3/3/3 4/4/4
|
||||||
|
f 4/5/4 3/6/3 5/7/5 6/8/6
|
||||||
|
f 7/9/7 8/10/8 9/11/9 10/12/10
|
||||||
|
f 2/13/2 1/14/1 11/15/11 12/16/12
|
||||||
|
f 13/17/13 14/18/14 15/19/15 16/20/16
|
||||||
|
f 6/21/6 5/22/5 17/23/17 18/24/18
|
||||||
|
f 10/25/10 9/26/9 19/27/19 20/28/20
|
||||||
|
f 12/29/12 11/30/11 21/31/21 22/32/22
|
||||||
|
f 16/33/16 15/34/15 23/35/23 24/36/24
|
||||||
|
f 18/37/18 17/38/17 25/39/25 26/40/26
|
||||||
|
f 20/41/20 19/42/19 27/43/27 28/44/28
|
||||||
|
f 22/45/22 21/46/21 29/47/29 30/48/30
|
||||||
|
f 24/49/24 23/50/23 31/51/31 32/52/32
|
||||||
|
f 26/53/26 25/54/25 33/55/33 34/56/34
|
||||||
|
f 28/57/28 27/58/27 35/59/35 36/60/36
|
||||||
|
f 30/61/30 29/62/29 37/63/37 38/64/38
|
||||||
|
f 32/65/32 31/66/31 39/67/39 40/68/40
|
||||||
|
f 34/69/34 33/70/33 41/71/41
|
||||||
|
f 36/72/36 35/73/35 41/71/42
|
||||||
|
f 38/74/38 37/75/37 41/71/43
|
||||||
|
f 40/76/40 39/77/39 41/71/44
|
||||||
|
f 3/6/3 7/9/7 10/12/10 5/7/5
|
||||||
|
f 6/8/6 15/19/15 14/18/14 4/5/4
|
||||||
|
f 8/10/8 2/13/2 12/16/12 9/11/9
|
||||||
|
f 1/14/1 13/78/13 16/79/16 11/15/11
|
||||||
|
f 15/34/15 6/21/6 18/24/18 23/35/23
|
||||||
|
f 5/22/5 10/25/10 20/28/20 17/23/17
|
||||||
|
f 9/26/9 12/29/12 22/32/22 19/27/19
|
||||||
|
f 11/30/11 16/80/16 24/81/24 21/31/21
|
||||||
|
f 23/50/23 18/37/18 26/40/26 31/51/31
|
||||||
|
f 17/38/17 20/41/20 28/44/28 25/39/25
|
||||||
|
f 19/42/19 22/45/22 30/48/30 27/43/27
|
||||||
|
f 21/46/21 24/82/24 32/83/32 29/47/29
|
||||||
|
f 31/66/31 26/53/26 34/56/34 39/67/39
|
||||||
|
f 25/54/25 28/57/28 36/60/36 33/55/33
|
||||||
|
f 27/58/27 30/61/30 38/64/38 35/59/35
|
||||||
|
f 29/62/29 32/84/32 40/85/40 37/63/37
|
||||||
|
f 39/77/39 34/69/34 41/71/45
|
||||||
|
f 33/70/33 36/72/36 41/71/46
|
||||||
|
f 35/73/35 38/74/38 41/71/47
|
||||||
|
f 37/75/37 40/86/40 41/71/48
|
||||||
|
f 14/87/14 13/88/13 1/1/1 4/4/4
|
||||||
|
f 8/89/8 7/90/7 3/3/3 2/2/2
|
||||||
|
# 35 polygons - 8 triangles
|
||||||
|
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wavefront_obj"
|
||||||
|
importer_version=1
|
||||||
|
type="Mesh"
|
||||||
|
uid="uid://cj0csa11nva20"
|
||||||
|
path="res://.godot/imported/pyramid_pillar.obj-5fea3b09eae43d640ddc41beb371c9de.mesh"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
files=["res://.godot/imported/pyramid_pillar.obj-5fea3b09eae43d640ddc41beb371c9de.mesh"]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/obelisk/pyramid_pillar.obj"
|
||||||
|
dest_files=["res://.godot/imported/pyramid_pillar.obj-5fea3b09eae43d640ddc41beb371c9de.mesh", "res://.godot/imported/pyramid_pillar.obj-5fea3b09eae43d640ddc41beb371c9de.mesh"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
generate_tangents=true
|
||||||
|
generate_lods=true
|
||||||
|
generate_shadow_mesh=true
|
||||||
|
generate_lightmap_uv2=false
|
||||||
|
generate_lightmap_uv2_texel_size=0.2
|
||||||
|
scale_mesh=Vector3(1, 1, 1)
|
||||||
|
offset_mesh=Vector3(0, 0, 0)
|
||||||
|
force_disable_mesh_compression=false
|
||||||
|
After Width: | Height: | Size: 12 MiB |
@ -0,0 +1,42 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bwo57ja5h8p0r"
|
||||||
|
path.s3tc="res://.godot/imported/specular.tga-36abd6fc0f4883740b53bed991563e67.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/specular.tga-36abd6fc0f4883740b53bed991563e67.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/obelisk/specular.tga"
|
||||||
|
dest_files=["res://.godot/imported/specular.tga-36abd6fc0f4883740b53bed991563e67.s3tc.ctex", "res://.godot/imported/specular.tga-36abd6fc0f4883740b53bed991563e67.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
@tool
|
||||||
|
extends MeshInstance3D
|
||||||
|
|
||||||
|
## A "distance fade" for the ocean floor that prevents the material from
|
||||||
|
## becoming a transparent material.
|
||||||
|
|
||||||
|
## Distance at which portions of the ocean floor will become invisible
|
||||||
|
@export var drop_far := 2000.0:
|
||||||
|
set(value):
|
||||||
|
drop_far = value
|
||||||
|
_update_drop_params()
|
||||||
|
|
||||||
|
|
||||||
|
func _update_drop_params():
|
||||||
|
var material = get_surface_override_material(0)
|
||||||
|
material.set_shader_parameter("drop_far", drop_far)
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
_update_drop_params()
|
||||||
@ -0,0 +1 @@
|
|||||||
|
uid://bk5no3nbfo5jq
|
||||||
|
After Width: | Height: | Size: 3.0 MiB |
@ -0,0 +1,42 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dv8hg77du5mfk"
|
||||||
|
path.s3tc="res://.godot/imported/MetalPlates_Diffuse.tga-c725e555a51c3ab0015477a9cca0757a.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/MetalPlates_Diffuse.tga-c725e555a51c3ab0015477a9cca0757a.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/pedestal/MetalPlates_Diffuse.tga"
|
||||||
|
dest_files=["res://.godot/imported/MetalPlates_Diffuse.tga-c725e555a51c3ab0015477a9cca0757a.s3tc.ctex", "res://.godot/imported/MetalPlates_Diffuse.tga-c725e555a51c3ab0015477a9cca0757a.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
|
After Width: | Height: | Size: 3.0 MiB |
@ -0,0 +1,42 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b4eyspeen6e04"
|
||||||
|
path.s3tc="res://.godot/imported/MetalPlates_Normal_03.tga-07956690d7af09a6fdbbecd877298f47.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/MetalPlates_Normal_03.tga-07956690d7af09a6fdbbecd877298f47.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/pedestal/MetalPlates_Normal_03.tga"
|
||||||
|
dest_files=["res://.godot/imported/MetalPlates_Normal_03.tga-07956690d7af09a6fdbbecd877298f47.s3tc.ctex", "res://.godot/imported/MetalPlates_Normal_03.tga-07956690d7af09a6fdbbecd877298f47.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=1
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=1
|
||||||
|
roughness/src_normal="res://example/ck_water_shader/pedestal/MetalPlates_Normal_03.tga"
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
[gd_scene load_steps=6 format=3 uid="uid://cuagegibp4wcj"]
|
||||||
|
|
||||||
|
[ext_resource type="Material" uid="uid://dm15sg1uklilb" path="res://example/boujie_water_shader/pedestal/pedestal_material.tres" id="1_bx14s"]
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://cj0csa11nva20" path="res://example/boujie_water_shader/obelisk/pyramid_pillar.obj" id="2_r0max"]
|
||||||
|
[ext_resource type="Material" uid="uid://b5yp2r2ccy8cj" path="res://example/boujie_water_shader/obelisk/obelisk_material.tres" id="3_w814x"]
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_x43j5"]
|
||||||
|
top_radius = 2.0
|
||||||
|
bottom_radius = 2.5
|
||||||
|
height = 0.4
|
||||||
|
cap_bottom = false
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_bn3rb"]
|
||||||
|
top_radius = 2.5
|
||||||
|
bottom_radius = 3.5
|
||||||
|
height = 10.0
|
||||||
|
cap_top = false
|
||||||
|
|
||||||
|
[node name="Pedestal" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="Platform" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2, 0)
|
||||||
|
mesh = SubResource("CylinderMesh_x43j5")
|
||||||
|
surface_material_override/0 = ExtResource("1_bx14s")
|
||||||
|
|
||||||
|
[node name="Foundation" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -5, 0)
|
||||||
|
mesh = SubResource("CylinderMesh_bn3rb")
|
||||||
|
surface_material_override/0 = ExtResource("1_bx14s")
|
||||||
|
|
||||||
|
[node name="Capstone" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(0.02, 0, 0, 0, 0.02, 0, 0, 0, 0.02, 0, 0.4, 0)
|
||||||
|
mesh = ExtResource("2_r0max")
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
surface_material_override/0 = ExtResource("3_w814x")
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
[gd_resource type="StandardMaterial3D" load_steps=3 format=3 uid="uid://dm15sg1uklilb"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dv8hg77du5mfk" path="res://example/boujie_water_shader/pedestal/MetalPlates_Diffuse.tga" id="1_mulpi"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b4eyspeen6e04" path="res://example/boujie_water_shader/pedestal/MetalPlates_Normal_03.tga" id="2_njrcx"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
albedo_texture = ExtResource("1_mulpi")
|
||||||
|
metallic = 1.0
|
||||||
|
metallic_specular = 1.0
|
||||||
|
roughness = 0.18
|
||||||
|
normal_enabled = true
|
||||||
|
normal_scale = 0.5
|
||||||
|
normal_texture = ExtResource("2_njrcx")
|
||||||
|
uv1_triplanar = true
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wavefront_obj"
|
||||||
|
importer_version=1
|
||||||
|
type="Mesh"
|
||||||
|
uid="uid://b8sapw7ttyhru"
|
||||||
|
path="res://.godot/imported/subdivcube.obj-ec0a8294dde80b8a76cf6121fc00838f.mesh"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
files=["res://.godot/imported/subdivcube.obj-ec0a8294dde80b8a76cf6121fc00838f.mesh"]
|
||||||
|
|
||||||
|
source_file="res://example/boujie_water_shader/subdivcube.obj"
|
||||||
|
dest_files=["res://.godot/imported/subdivcube.obj-ec0a8294dde80b8a76cf6121fc00838f.mesh", "res://.godot/imported/subdivcube.obj-ec0a8294dde80b8a76cf6121fc00838f.mesh"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
generate_tangents=true
|
||||||
|
generate_lods=true
|
||||||
|
generate_shadow_mesh=true
|
||||||
|
generate_lightmap_uv2=false
|
||||||
|
generate_lightmap_uv2_texel_size=0.2
|
||||||
|
scale_mesh=Vector3(1, 1, 1)
|
||||||
|
offset_mesh=Vector3(0, 0, 0)
|
||||||
|
force_disable_mesh_compression=false
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
extends FogVolume
|
||||||
|
|
||||||
|
@export var visible_height_offset := 0.0
|
||||||
|
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
var camera = get_viewport().get_camera_3d()
|
||||||
|
if camera:
|
||||||
|
visible = camera.position.y < (position.y + visible_height_offset)
|
||||||
@ -0,0 +1 @@
|
|||||||
|
uid://kg6bwthsp57m
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://dp2iua60m7f8m"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_x3ln3"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_x3ln3")
|
||||||
|
steepness = 0.09
|
||||||
|
amplitude = 0.7
|
||||||
|
direction_degrees = 315.0
|
||||||
|
frequency = 0.9
|
||||||
|
speed = 0.75
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GerstnerWave" load_steps=2 format=3 uid="uid://3g1mc132n1al"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="1_4eny6"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_4eny6")
|
||||||
|
steepness = 0.08
|
||||||
|
amplitude = 0.5
|
||||||
|
direction_degrees = 90.0
|
||||||
|
frequency = 0.6
|
||||||
|
speed = 0.375
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
extends Node3D
|
||||||
|
|
||||||
|
## Set visibility range parameters to all children
|
||||||
|
|
||||||
|
@export var visibility_range_end := 500.0
|
||||||
|
@export var visibility_range_end_margin := 100
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
update()
|
||||||
|
|
||||||
|
|
||||||
|
func update():
|
||||||
|
_update_children(self)
|
||||||
|
|
||||||
|
|
||||||
|
func _update_node(node: Node):
|
||||||
|
node.set("visibility_range_end", visibility_range_end)
|
||||||
|
node.set("visibility_range_end_margin", visibility_range_end_margin)
|
||||||
|
node.set(
|
||||||
|
"visibility_range_fade_mode",
|
||||||
|
GeometryInstance3D.VisibilityRangeFadeMode.VISIBILITY_RANGE_FADE_SELF
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
func _update_children(parent: Node):
|
||||||
|
for child in parent.get_children():
|
||||||
|
_update_node(child)
|
||||||
|
if child.get_child_count() > 0:
|
||||||
|
_update_children(child)
|
||||||
@ -0,0 +1 @@
|
|||||||
|
uid://bp8r4pkiiwy44
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
@tool
|
||||||
|
extends Node3D
|
||||||
|
|
||||||
|
## An example of various water shaders
|
||||||
|
|
||||||
|
@onready var ocean_floor := $DeepOcean/OceanFloor
|
||||||
|
@onready var vis_group := $VisibilityRangeLodGroup
|
||||||
|
|
||||||
|
|
||||||
|
## You can update your custom nodes' LOD settings from a WaterMaterialDesigner
|
||||||
|
func _on_water_material_designer_updated_lod(far_distance, middle_distance, _unit_size):
|
||||||
|
ocean_floor.scale = Vector3(far_distance * 2.0, 1.0, far_distance * 2.0)
|
||||||
|
ocean_floor.visibility_range_end = middle_distance
|
||||||
|
ocean_floor.drop_far = far_distance * 0.75
|
||||||
|
vis_group.visibility_range_end = (far_distance + middle_distance) / 2.0
|
||||||
|
vis_group.visibility_range_end_margin = 200.0
|
||||||
|
vis_group.update()
|
||||||
@ -0,0 +1 @@
|
|||||||
|
uid://b6p81cijtabib
|
||||||
@ -0,0 +1,415 @@
|
|||||||
|
[gd_scene load_steps=48 format=3 uid="uid://bao0ucik5eqtl"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://example/boujie_water_shader/water_shader_examples.gd" id="1_ksg8d"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://ignpdv10rx52" path="res://addons/boujie_water_shader/prefabs/deep_ocean.tscn" id="2_h6v04"]
|
||||||
|
[ext_resource type="Shader" path="res://example/boujie_water_shader/DropWithDistance.gdshader" id="3_qheyq"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dwsniss71hd03" path="res://example/boujie_water_shader/Sand.png" id="4_rbuuc"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bf2pvto4lly3o" path="res://example/boujie_water_shader/foam_waves/foam1.tres" id="5_2rnyq"]
|
||||||
|
[ext_resource type="Script" path="res://example/boujie_water_shader/ocean_floor.gd" id="5_4yawx"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bavxgduu5sv2c" path="res://example/boujie_water_shader/height_waves/height1.tres" id="5_y6lkc"]
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/water_material_designer.gd" id="6_cmske"]
|
||||||
|
[ext_resource type="Resource" uid="uid://1wsbw638p6o2" path="res://example/boujie_water_shader/foam_waves/foam2.tres" id="6_iku5k"]
|
||||||
|
[ext_resource type="Resource" uid="uid://c33noe5oxh41i" path="res://example/boujie_water_shader/height_waves/height2.tres" id="6_pgu4w"]
|
||||||
|
[ext_resource type="Resource" uid="uid://dp2iua60m7f8m" path="res://example/boujie_water_shader/uv_waves/uvwave1.tres" id="6_w87ec"]
|
||||||
|
[ext_resource type="Resource" uid="uid://byfaqt1j16ysr" path="res://example/boujie_water_shader/foam_waves/foam3.tres" id="7_387wd"]
|
||||||
|
[ext_resource type="Material" uid="uid://cvnsu7lttsfsh" path="res://addons/boujie_water_shader/prefabs/outset_ocean_material.tres" id="7_ch24e"]
|
||||||
|
[ext_resource type="Resource" uid="uid://0hol4u8hadr8" path="res://example/boujie_water_shader/height_waves/height3.tres" id="7_ghjuj"]
|
||||||
|
[ext_resource type="Resource" uid="uid://3g1mc132n1al" path="res://example/boujie_water_shader/uv_waves/uvwave2.tres" id="7_sjf3q"]
|
||||||
|
[ext_resource type="Resource" uid="uid://c5j78g2giv011" path="res://example/boujie_water_shader/foam_waves/foam4.tres" id="8_m62v1"]
|
||||||
|
[ext_resource type="Resource" uid="uid://cxeeuqlnw0v08" path="res://example/boujie_water_shader/height_waves/height4.tres" id="8_mnxd5"]
|
||||||
|
[ext_resource type="Resource" uid="uid://d4jrd7iuain81" path="res://example/boujie_water_shader/height_waves/height5.tres" id="9_7wo7t"]
|
||||||
|
[ext_resource type="Script" path="res://addons/boujie_water_shader/types/gerstner_wave.gd" id="9_408u1"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dn0ukrkqrpmne" path="res://example/boujie_water_shader/obelisk/obelisk.tscn" id="9_qosoy"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cuagegibp4wcj" path="res://example/boujie_water_shader/pedestal/pedestal.tscn" id="10_70j47"]
|
||||||
|
[ext_resource type="Environment" uid="uid://kw5c7bat248e" path="res://example/boujie_water_shader/MapEnvironment.tres" id="14_o2bkd"]
|
||||||
|
[ext_resource type="Material" uid="uid://b17lc50fphxnr" path="res://addons/boujie_water_shader/prefabs/ice_material.tres" id="19_3bkn5"]
|
||||||
|
[ext_resource type="Material" uid="uid://dcwd8ciggcoqu" path="res://addons/boujie_water_shader/prefabs/obsidian_material.tres" id="21_wltbb"]
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://b8sapw7ttyhru" path="res://example/boujie_water_shader/subdivcube.obj" id="22_7a0j4"]
|
||||||
|
[ext_resource type="Script" path="res://example/boujie_water_shader/camera.gd" id="22_vw7uu"]
|
||||||
|
[ext_resource type="Script" path="res://example/boujie_water_shader/underwater_fog.gd" id="24_pmq8u"]
|
||||||
|
[ext_resource type="Material" uid="uid://cu46b100244nd" path="res://addons/boujie_water_shader/prefabs/deep_ocean_material.tres" id="26_13rch"]
|
||||||
|
[ext_resource type="Script" path="res://example/boujie_water_shader/visibility_range_lod_group.gd" id="28_fslxr"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://3kpp1l04oqfu" path="res://example/boujie_water_shader/obelisk/StoneFloorTexture.png" id="29_g6865"]
|
||||||
|
[ext_resource type="Script" path="res://example/boujie_water_shader/hud.gd" id="34_3qn7y"]
|
||||||
|
[ext_resource type="Script" path="res://example/boujie_water_shader/fps_counter.gd" id="35_g2n63"]
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://f85dvooifh0c" path="res://example/boujie_water_shader/mountains.obj" id="37_ujihb"]
|
||||||
|
[ext_resource type="Material" uid="uid://c7phyredymkgu" path="res://example/boujie_water_shader/mountain_material.tres" id="38_hsxek"]
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_mv30r"]
|
||||||
|
subdivide_width = 16
|
||||||
|
subdivide_depth = 16
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_0bbsx"]
|
||||||
|
render_priority = 0
|
||||||
|
shader = ExtResource("3_qheyq")
|
||||||
|
shader_parameter/albedo = Color(1, 1, 1, 1)
|
||||||
|
shader_parameter/point_size = 1.0
|
||||||
|
shader_parameter/roughness = 1.0
|
||||||
|
shader_parameter/metallic_texture_channel = null
|
||||||
|
shader_parameter/specular = 0.5
|
||||||
|
shader_parameter/metallic = null
|
||||||
|
shader_parameter/uv1_blend_sharpness = 1.0
|
||||||
|
shader_parameter/uv1_scale = Vector3(0.1, 0.1, 0.1)
|
||||||
|
shader_parameter/uv1_offset = null
|
||||||
|
shader_parameter/uv2_scale = Vector3(1, 1, 1)
|
||||||
|
shader_parameter/uv2_offset = null
|
||||||
|
shader_parameter/drop_far = 2000.0
|
||||||
|
shader_parameter/texture_albedo = ExtResource("4_rbuuc")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_4vniv"]
|
||||||
|
script = ExtResource("9_408u1")
|
||||||
|
steepness = 0.8
|
||||||
|
amplitude = 0.5
|
||||||
|
direction_degrees = 0.0
|
||||||
|
frequency = 0.2
|
||||||
|
speed = 1.0
|
||||||
|
phase_degrees = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_3t55w"]
|
||||||
|
script = ExtResource("9_408u1")
|
||||||
|
steepness = 0.18
|
||||||
|
amplitude = 0.7
|
||||||
|
direction_degrees = 315.0
|
||||||
|
frequency = 0.6
|
||||||
|
speed = 3.0
|
||||||
|
phase_degrees = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_ll6tv"]
|
||||||
|
script = ExtResource("9_408u1")
|
||||||
|
steepness = 0.16
|
||||||
|
amplitude = 0.5
|
||||||
|
direction_degrees = 90.0
|
||||||
|
frequency = 0.4
|
||||||
|
speed = 1.5
|
||||||
|
phase_degrees = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_3bkrw"]
|
||||||
|
script = ExtResource("9_408u1")
|
||||||
|
steepness = 0.4
|
||||||
|
amplitude = 1.0
|
||||||
|
direction_degrees = 150.0
|
||||||
|
frequency = 0.6
|
||||||
|
speed = 1.6
|
||||||
|
phase_degrees = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_qrrly"]
|
||||||
|
script = ExtResource("9_408u1")
|
||||||
|
steepness = 0.2
|
||||||
|
amplitude = 0.4
|
||||||
|
direction_degrees = 225.0
|
||||||
|
frequency = 0.5
|
||||||
|
speed = 1.0
|
||||||
|
phase_degrees = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="FogMaterial" id="FogMaterial_irst1"]
|
||||||
|
density = 0.3558
|
||||||
|
albedo = Color(0.301961, 0.603922, 1, 1)
|
||||||
|
height_falloff = 1e+06
|
||||||
|
edge_fade = 0.926824
|
||||||
|
|
||||||
|
[sub_resource type="SphereMesh" id="SphereMesh_68awl"]
|
||||||
|
radius = 20.0
|
||||||
|
height = 40.0
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_ehcfp"]
|
||||||
|
size = Vector3(30, 30, 30)
|
||||||
|
subdivide_width = 16
|
||||||
|
subdivide_height = 16
|
||||||
|
subdivide_depth = 16
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_kaxio"]
|
||||||
|
albedo_texture = ExtResource("29_g6865")
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_6pj3g"]
|
||||||
|
material = SubResource("StandardMaterial3D_kaxio")
|
||||||
|
|
||||||
|
[sub_resource type="SphereMesh" id="SphereMesh_ljix4"]
|
||||||
|
radius = 80.0
|
||||||
|
height = 160.0
|
||||||
|
|
||||||
|
[node name="WaterShaderExamples" type="Node3D"]
|
||||||
|
script = ExtResource("1_ksg8d")
|
||||||
|
|
||||||
|
[node name="DeepOcean" parent="." instance=ExtResource("2_h6v04")]
|
||||||
|
far_edge = 4000
|
||||||
|
|
||||||
|
[node name="WaterMaterialDesigner" parent="DeepOcean" index="1"]
|
||||||
|
wave_fade_far = 1440
|
||||||
|
|
||||||
|
[node name="OceanFloor" type="MeshInstance3D" parent="DeepOcean"]
|
||||||
|
transform = Transform3D(8000, 0, 0, 0, 1, 0, 0, 0, 8000, 0, -350, 0)
|
||||||
|
mesh = SubResource("PlaneMesh_mv30r")
|
||||||
|
skeleton = NodePath("../../Other_Designers")
|
||||||
|
surface_material_override/0 = SubResource("ShaderMaterial_0bbsx")
|
||||||
|
script = ExtResource("5_4yawx")
|
||||||
|
|
||||||
|
[node name="Other_Designers" type="Node" parent="."]
|
||||||
|
|
||||||
|
[node name="OutsetOceanDesigner" type="Node" parent="Other_Designers"]
|
||||||
|
script = ExtResource("6_cmske")
|
||||||
|
material = ExtResource("7_ch24e")
|
||||||
|
distance_fade_far = 4000
|
||||||
|
distance_fade_softness = 0.323
|
||||||
|
wave_fade_far = 2000
|
||||||
|
wave_fade_softness = 0.641
|
||||||
|
height_waves = Array[ExtResource("9_408u1")]([ExtResource("5_y6lkc"), ExtResource("6_pgu4w"), ExtResource("7_ghjuj"), ExtResource("8_mnxd5"), ExtResource("9_7wo7t")])
|
||||||
|
foam_waves = Array[ExtResource("9_408u1")]([ExtResource("5_2rnyq"), ExtResource("6_iku5k"), ExtResource("7_387wd"), ExtResource("8_m62v1")])
|
||||||
|
uv_waves = Array[ExtResource("9_408u1")]([ExtResource("6_w87ec"), ExtResource("7_sjf3q")])
|
||||||
|
|
||||||
|
[node name="IceDesigner" type="Node" parent="Other_Designers"]
|
||||||
|
script = ExtResource("6_cmske")
|
||||||
|
material = ExtResource("19_3bkn5")
|
||||||
|
distance_fade_far = 4000
|
||||||
|
distance_fade_softness = 0.323
|
||||||
|
wave_fade_far = 2000
|
||||||
|
wave_fade_softness = 0.641
|
||||||
|
height_waves = Array[ExtResource("9_408u1")]([SubResource("Resource_4vniv"), SubResource("Resource_3t55w"), SubResource("Resource_ll6tv"), SubResource("Resource_3bkrw"), SubResource("Resource_qrrly")])
|
||||||
|
foam_waves = Array[ExtResource("9_408u1")]([ExtResource("5_2rnyq"), ExtResource("6_iku5k"), ExtResource("7_387wd"), ExtResource("8_m62v1")])
|
||||||
|
uv_waves = Array[ExtResource("9_408u1")]([ExtResource("6_w87ec"), ExtResource("7_sjf3q")])
|
||||||
|
|
||||||
|
[node name="ObsidianDesigner" type="Node" parent="Other_Designers"]
|
||||||
|
script = ExtResource("6_cmske")
|
||||||
|
material = ExtResource("21_wltbb")
|
||||||
|
distance_fade_far = 4000
|
||||||
|
distance_fade_softness = 0.323
|
||||||
|
wave_fade_far = 2000
|
||||||
|
wave_fade_softness = 0.641
|
||||||
|
height_waves = Array[ExtResource("9_408u1")]([SubResource("Resource_4vniv"), SubResource("Resource_3t55w"), SubResource("Resource_ll6tv"), SubResource("Resource_3bkrw"), SubResource("Resource_qrrly")])
|
||||||
|
uv_waves = Array[ExtResource("9_408u1")]([ExtResource("6_w87ec"), ExtResource("7_sjf3q")])
|
||||||
|
|
||||||
|
[node name="Camera" type="Camera3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.996309, 0.085834, 0, -0.085834, 0.996309, 0, 21.4225, 49.9367)
|
||||||
|
script = ExtResource("22_vw7uu")
|
||||||
|
|
||||||
|
[node name="Environment_Stuff" type="Node" parent="."]
|
||||||
|
|
||||||
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="Environment_Stuff"]
|
||||||
|
transform = Transform3D(0.877037, -0.278375, 0.391552, 0, 0.815017, 0.579437, -0.480422, -0.508188, 0.7148, 0, 23.7697, 0)
|
||||||
|
light_energy = 1.2
|
||||||
|
shadow_enabled = true
|
||||||
|
directional_shadow_max_distance = 2000.0
|
||||||
|
|
||||||
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="Environment_Stuff"]
|
||||||
|
environment = ExtResource("14_o2bkd")
|
||||||
|
|
||||||
|
[node name="UnderwaterFog" type="FogVolume" parent="Environment_Stuff"]
|
||||||
|
visible = false
|
||||||
|
shape = 4
|
||||||
|
material = SubResource("FogMaterial_irst1")
|
||||||
|
script = ExtResource("24_pmq8u")
|
||||||
|
visible_height_offset = 5.0
|
||||||
|
|
||||||
|
[node name="HUD" type="Control" parent="."]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_left = 9.0
|
||||||
|
offset_top = 6.0
|
||||||
|
offset_right = -566.0
|
||||||
|
offset_bottom = -9.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("34_3qn7y")
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="HUD"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="FPSCounter" type="Label" parent="HUD/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "FPS Unknown"
|
||||||
|
script = ExtResource("35_g2n63")
|
||||||
|
|
||||||
|
[node name="Help" type="Label" parent="HUD/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Controls
|
||||||
|
--------
|
||||||
|
Arrow keys to move
|
||||||
|
Page Up, Page Down to increase/decrease camera far distance
|
||||||
|
Enter binds and unbinds the mouse.
|
||||||
|
Tab shows/hides this help screen.
|
||||||
|
ESC to quit"
|
||||||
|
|
||||||
|
[node name="VisibilityRangeLodGroup" type="Node3D" parent="."]
|
||||||
|
script = ExtResource("28_fslxr")
|
||||||
|
|
||||||
|
[node name="Test_Terrain" type="Node3D" parent="VisibilityRangeLodGroup"]
|
||||||
|
|
||||||
|
[node name="Mountain" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Test_Terrain"]
|
||||||
|
transform = Transform3D(44.2152, 0, 23.3456, 0, 50, 0, -23.3456, 0, 44.2152, -581.271, -352.535, -1693.11)
|
||||||
|
mesh = ExtResource("37_ujihb")
|
||||||
|
skeleton = NodePath("../../..")
|
||||||
|
surface_material_override/0 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/1 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/2 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/3 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/4 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/5 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/6 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/7 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/8 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/9 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/10 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/11 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/12 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/13 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/14 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/15 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/16 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/17 = ExtResource("38_hsxek")
|
||||||
|
|
||||||
|
[node name="Mountain2" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Test_Terrain"]
|
||||||
|
transform = Transform3D(22.9294, 0, -44.4325, 0, 50, 0, 44.4325, 0, 22.9294, -1339.75, -454.422, -2614.41)
|
||||||
|
mesh = ExtResource("37_ujihb")
|
||||||
|
skeleton = NodePath("../../..")
|
||||||
|
surface_material_override/0 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/1 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/2 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/3 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/4 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/5 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/6 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/7 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/8 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/9 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/10 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/11 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/12 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/13 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/14 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/15 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/16 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/17 = ExtResource("38_hsxek")
|
||||||
|
|
||||||
|
[node name="Mountain3" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Test_Terrain"]
|
||||||
|
transform = Transform3D(8.84072, 0, -24.0371, 0, 51.932, 0, 17.1315, 0, 12.4044, -331.45, -363.533, -3265.27)
|
||||||
|
mesh = ExtResource("37_ujihb")
|
||||||
|
skeleton = NodePath("../../..")
|
||||||
|
surface_material_override/0 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/1 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/2 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/3 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/4 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/5 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/6 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/7 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/8 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/9 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/10 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/11 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/12 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/13 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/14 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/15 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/16 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/17 = ExtResource("38_hsxek")
|
||||||
|
|
||||||
|
[node name="Mountain4" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Test_Terrain"]
|
||||||
|
transform = Transform3D(15.0669, 0, 16.8743, 0, 62.8956, 0, -12.0265, 0, 21.1403, -49.5768, -363.533, -3351.75)
|
||||||
|
mesh = ExtResource("37_ujihb")
|
||||||
|
skeleton = NodePath("../../..")
|
||||||
|
surface_material_override/0 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/1 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/2 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/3 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/4 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/5 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/6 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/7 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/8 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/9 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/10 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/11 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/12 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/13 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/14 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/15 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/16 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/17 = ExtResource("38_hsxek")
|
||||||
|
|
||||||
|
[node name="Mountain5" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Test_Terrain"]
|
||||||
|
transform = Transform3D(2.67668, 0, -26.7871, 0, 87.917, 0, 19.0914, 0, 3.75563, -280.898, -363.533, -3633.61)
|
||||||
|
mesh = ExtResource("37_ujihb")
|
||||||
|
skeleton = NodePath("../../..")
|
||||||
|
surface_material_override/0 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/1 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/2 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/3 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/4 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/5 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/6 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/7 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/8 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/9 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/10 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/11 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/12 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/13 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/14 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/15 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/16 = ExtResource("38_hsxek")
|
||||||
|
surface_material_override/17 = ExtResource("38_hsxek")
|
||||||
|
|
||||||
|
[node name="Material_Testers" type="Node3D" parent="VisibilityRangeLodGroup"]
|
||||||
|
|
||||||
|
[node name="Pedestal1" parent="VisibilityRangeLodGroup/Material_Testers" instance=ExtResource("10_70j47")]
|
||||||
|
transform = Transform3D(8, 0, 0, 0, 8, 0, 0, 0, 8, -120, 0, 0)
|
||||||
|
|
||||||
|
[node name="DeepOceanSphere" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Material_Testers/Pedestal1"]
|
||||||
|
transform = Transform3D(0.0836411, -0.0928929, 0, 0.0928929, 0.0836411, 0, 0, 0, 0.125, 0, 3.18241, 0)
|
||||||
|
mesh = SubResource("SphereMesh_68awl")
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
surface_material_override/0 = ExtResource("26_13rch")
|
||||||
|
|
||||||
|
[node name="Pedestal2" parent="VisibilityRangeLodGroup/Material_Testers" instance=ExtResource("10_70j47")]
|
||||||
|
transform = Transform3D(8, 0, 0, 0, 8, 0, 0, 0, 8, -60, 1, 0)
|
||||||
|
|
||||||
|
[node name="OutsetOceanSphere" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Material_Testers/Pedestal2"]
|
||||||
|
transform = Transform3D(0.125, 0, 0, 0, 0.125, 0, 0, 0, 0.125, 0, 3.18241, 0)
|
||||||
|
mesh = SubResource("SphereMesh_68awl")
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
surface_material_override/0 = ExtResource("7_ch24e")
|
||||||
|
|
||||||
|
[node name="Pedestal3" parent="VisibilityRangeLodGroup/Material_Testers" instance=ExtResource("10_70j47")]
|
||||||
|
transform = Transform3D(8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 1, 0)
|
||||||
|
|
||||||
|
[node name="IceCube" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Material_Testers/Pedestal3"]
|
||||||
|
transform = Transform3D(0.065145, -5.96046e-09, 0.0758692, -0.0580911, 0.0643229, 0.0498798, -0.0488012, -0.0765674, 0.0419031, 0, 3.18241, 0)
|
||||||
|
mesh = ExtResource("22_7a0j4")
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
surface_material_override/0 = ExtResource("19_3bkn5")
|
||||||
|
|
||||||
|
[node name="Pedestal4" parent="VisibilityRangeLodGroup/Material_Testers" instance=ExtResource("10_70j47")]
|
||||||
|
transform = Transform3D(8, 0, 0, 0, 8, 0, 0, 0, 8, 60, 1, 0)
|
||||||
|
|
||||||
|
[node name="ObsidianCube" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Material_Testers/Pedestal4"]
|
||||||
|
transform = Transform3D(0.065145, -5.96046e-09, 0.0758692, -0.0580911, 0.0643229, 0.0498798, -0.0488012, -0.0765674, 0.0419031, 0, 3.18241, 0)
|
||||||
|
mesh = SubResource("BoxMesh_ehcfp")
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
surface_material_override/0 = ExtResource("21_wltbb")
|
||||||
|
|
||||||
|
[node name="UnitCube" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Material_Testers"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -49.477, 4.7, 0)
|
||||||
|
mesh = SubResource("BoxMesh_6pj3g")
|
||||||
|
skeleton = NodePath("")
|
||||||
|
|
||||||
|
[node name="Thumbnail_Scene" type="Node3D" parent="VisibilityRangeLodGroup"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -200)
|
||||||
|
|
||||||
|
[node name="Obelisk2" parent="VisibilityRangeLodGroup/Thumbnail_Scene" instance=ExtResource("9_qosoy")]
|
||||||
|
transform = Transform3D(7.44818, 0.681815, -6.63775, -2.02612, 9.70908, -1.27621, 6.35763, 2.29543, 7.36964, 0, 28.368, 0)
|
||||||
|
|
||||||
|
[node name="DeepOceanSphere" type="MeshInstance3D" parent="VisibilityRangeLodGroup/Thumbnail_Scene/Obelisk2"]
|
||||||
|
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0.22242, 12.4363, 0.470476)
|
||||||
|
mesh = SubResource("SphereMesh_ljix4")
|
||||||
|
skeleton = NodePath("../../../..")
|
||||||
|
surface_material_override/0 = ExtResource("26_13rch")
|
||||||
|
|
||||||
|
[connection signal="updated_lod" from="DeepOcean/WaterMaterialDesigner" to="." method="_on_water_material_designer_updated_lod"]
|
||||||
|
|
||||||
|
[editable path="DeepOcean"]
|
||||||
@ -0,0 +1,254 @@
|
|||||||
|
[preset.0]
|
||||||
|
|
||||||
|
name="macOS"
|
||||||
|
platform="macOS"
|
||||||
|
runnable=true
|
||||||
|
advanced_options=false
|
||||||
|
dedicated_server=false
|
||||||
|
custom_features=""
|
||||||
|
export_filter="all_resources"
|
||||||
|
include_filter=""
|
||||||
|
exclude_filter=""
|
||||||
|
export_path="export/fish.dmg"
|
||||||
|
patches=PackedStringArray()
|
||||||
|
encryption_include_filters=""
|
||||||
|
encryption_exclude_filters=""
|
||||||
|
seed=0
|
||||||
|
encrypt_pck=false
|
||||||
|
encrypt_directory=false
|
||||||
|
script_export_mode=2
|
||||||
|
|
||||||
|
[preset.0.options]
|
||||||
|
|
||||||
|
export/distribution_type=1
|
||||||
|
binary_format/architecture="universal"
|
||||||
|
custom_template/debug=""
|
||||||
|
custom_template/release=""
|
||||||
|
debug/export_console_wrapper=1
|
||||||
|
application/icon=""
|
||||||
|
application/icon_interpolation=4
|
||||||
|
application/bundle_identifier="com.fish.game"
|
||||||
|
application/signature=""
|
||||||
|
application/app_category="Games"
|
||||||
|
application/short_version=""
|
||||||
|
application/version=""
|
||||||
|
application/copyright=""
|
||||||
|
application/copyright_localized={}
|
||||||
|
application/min_macos_version_x86_64="10.12"
|
||||||
|
application/min_macos_version_arm64="11.00"
|
||||||
|
application/export_angle=0
|
||||||
|
display/high_res=true
|
||||||
|
shader_baker/enabled=false
|
||||||
|
application/additional_plist_content=""
|
||||||
|
xcode/platform_build="14C18"
|
||||||
|
xcode/sdk_version="13.1"
|
||||||
|
xcode/sdk_build="22C55"
|
||||||
|
xcode/sdk_name="macosx13.1"
|
||||||
|
xcode/xcode_version="1420"
|
||||||
|
xcode/xcode_build="14C18"
|
||||||
|
codesign/codesign=3
|
||||||
|
codesign/installer_identity=""
|
||||||
|
codesign/apple_team_id=""
|
||||||
|
codesign/identity=""
|
||||||
|
codesign/entitlements/custom_file=""
|
||||||
|
codesign/entitlements/allow_jit_code_execution=false
|
||||||
|
codesign/entitlements/allow_unsigned_executable_memory=false
|
||||||
|
codesign/entitlements/allow_dyld_environment_variables=false
|
||||||
|
codesign/entitlements/disable_library_validation=false
|
||||||
|
codesign/entitlements/audio_input=false
|
||||||
|
codesign/entitlements/camera=false
|
||||||
|
codesign/entitlements/location=false
|
||||||
|
codesign/entitlements/address_book=false
|
||||||
|
codesign/entitlements/calendars=false
|
||||||
|
codesign/entitlements/photos_library=false
|
||||||
|
codesign/entitlements/apple_events=false
|
||||||
|
codesign/entitlements/debugging=false
|
||||||
|
codesign/entitlements/app_sandbox/enabled=false
|
||||||
|
codesign/entitlements/app_sandbox/network_server=false
|
||||||
|
codesign/entitlements/app_sandbox/network_client=false
|
||||||
|
codesign/entitlements/app_sandbox/device_usb=false
|
||||||
|
codesign/entitlements/app_sandbox/device_bluetooth=false
|
||||||
|
codesign/entitlements/app_sandbox/files_downloads=0
|
||||||
|
codesign/entitlements/app_sandbox/files_pictures=0
|
||||||
|
codesign/entitlements/app_sandbox/files_music=0
|
||||||
|
codesign/entitlements/app_sandbox/files_movies=0
|
||||||
|
codesign/entitlements/app_sandbox/files_user_selected=0
|
||||||
|
codesign/entitlements/app_sandbox/helper_executables=[]
|
||||||
|
codesign/entitlements/additional=""
|
||||||
|
codesign/custom_options=PackedStringArray()
|
||||||
|
notarization/notarization=0
|
||||||
|
privacy/microphone_usage_description=""
|
||||||
|
privacy/microphone_usage_description_localized={}
|
||||||
|
privacy/camera_usage_description=""
|
||||||
|
privacy/camera_usage_description_localized={}
|
||||||
|
privacy/location_usage_description=""
|
||||||
|
privacy/location_usage_description_localized={}
|
||||||
|
privacy/address_book_usage_description=""
|
||||||
|
privacy/address_book_usage_description_localized={}
|
||||||
|
privacy/calendar_usage_description=""
|
||||||
|
privacy/calendar_usage_description_localized={}
|
||||||
|
privacy/photos_library_usage_description=""
|
||||||
|
privacy/photos_library_usage_description_localized={}
|
||||||
|
privacy/desktop_folder_usage_description=""
|
||||||
|
privacy/desktop_folder_usage_description_localized={}
|
||||||
|
privacy/documents_folder_usage_description=""
|
||||||
|
privacy/documents_folder_usage_description_localized={}
|
||||||
|
privacy/downloads_folder_usage_description=""
|
||||||
|
privacy/downloads_folder_usage_description_localized={}
|
||||||
|
privacy/network_volumes_usage_description=""
|
||||||
|
privacy/network_volumes_usage_description_localized={}
|
||||||
|
privacy/removable_volumes_usage_description=""
|
||||||
|
privacy/removable_volumes_usage_description_localized={}
|
||||||
|
privacy/tracking_enabled=false
|
||||||
|
privacy/tracking_domains=PackedStringArray()
|
||||||
|
privacy/collected_data/name/collected=false
|
||||||
|
privacy/collected_data/name/linked_to_user=false
|
||||||
|
privacy/collected_data/name/used_for_tracking=false
|
||||||
|
privacy/collected_data/name/collection_purposes=0
|
||||||
|
privacy/collected_data/email_address/collected=false
|
||||||
|
privacy/collected_data/email_address/linked_to_user=false
|
||||||
|
privacy/collected_data/email_address/used_for_tracking=false
|
||||||
|
privacy/collected_data/email_address/collection_purposes=0
|
||||||
|
privacy/collected_data/phone_number/collected=false
|
||||||
|
privacy/collected_data/phone_number/linked_to_user=false
|
||||||
|
privacy/collected_data/phone_number/used_for_tracking=false
|
||||||
|
privacy/collected_data/phone_number/collection_purposes=0
|
||||||
|
privacy/collected_data/physical_address/collected=false
|
||||||
|
privacy/collected_data/physical_address/linked_to_user=false
|
||||||
|
privacy/collected_data/physical_address/used_for_tracking=false
|
||||||
|
privacy/collected_data/physical_address/collection_purposes=0
|
||||||
|
privacy/collected_data/other_contact_info/collected=false
|
||||||
|
privacy/collected_data/other_contact_info/linked_to_user=false
|
||||||
|
privacy/collected_data/other_contact_info/used_for_tracking=false
|
||||||
|
privacy/collected_data/other_contact_info/collection_purposes=0
|
||||||
|
privacy/collected_data/health/collected=false
|
||||||
|
privacy/collected_data/health/linked_to_user=false
|
||||||
|
privacy/collected_data/health/used_for_tracking=false
|
||||||
|
privacy/collected_data/health/collection_purposes=0
|
||||||
|
privacy/collected_data/fitness/collected=false
|
||||||
|
privacy/collected_data/fitness/linked_to_user=false
|
||||||
|
privacy/collected_data/fitness/used_for_tracking=false
|
||||||
|
privacy/collected_data/fitness/collection_purposes=0
|
||||||
|
privacy/collected_data/payment_info/collected=false
|
||||||
|
privacy/collected_data/payment_info/linked_to_user=false
|
||||||
|
privacy/collected_data/payment_info/used_for_tracking=false
|
||||||
|
privacy/collected_data/payment_info/collection_purposes=0
|
||||||
|
privacy/collected_data/credit_info/collected=false
|
||||||
|
privacy/collected_data/credit_info/linked_to_user=false
|
||||||
|
privacy/collected_data/credit_info/used_for_tracking=false
|
||||||
|
privacy/collected_data/credit_info/collection_purposes=0
|
||||||
|
privacy/collected_data/other_financial_info/collected=false
|
||||||
|
privacy/collected_data/other_financial_info/linked_to_user=false
|
||||||
|
privacy/collected_data/other_financial_info/used_for_tracking=false
|
||||||
|
privacy/collected_data/other_financial_info/collection_purposes=0
|
||||||
|
privacy/collected_data/precise_location/collected=false
|
||||||
|
privacy/collected_data/precise_location/linked_to_user=false
|
||||||
|
privacy/collected_data/precise_location/used_for_tracking=false
|
||||||
|
privacy/collected_data/precise_location/collection_purposes=0
|
||||||
|
privacy/collected_data/coarse_location/collected=false
|
||||||
|
privacy/collected_data/coarse_location/linked_to_user=false
|
||||||
|
privacy/collected_data/coarse_location/used_for_tracking=false
|
||||||
|
privacy/collected_data/coarse_location/collection_purposes=0
|
||||||
|
privacy/collected_data/sensitive_info/collected=false
|
||||||
|
privacy/collected_data/sensitive_info/linked_to_user=false
|
||||||
|
privacy/collected_data/sensitive_info/used_for_tracking=false
|
||||||
|
privacy/collected_data/sensitive_info/collection_purposes=0
|
||||||
|
privacy/collected_data/contacts/collected=false
|
||||||
|
privacy/collected_data/contacts/linked_to_user=false
|
||||||
|
privacy/collected_data/contacts/used_for_tracking=false
|
||||||
|
privacy/collected_data/contacts/collection_purposes=0
|
||||||
|
privacy/collected_data/emails_or_text_messages/collected=false
|
||||||
|
privacy/collected_data/emails_or_text_messages/linked_to_user=false
|
||||||
|
privacy/collected_data/emails_or_text_messages/used_for_tracking=false
|
||||||
|
privacy/collected_data/emails_or_text_messages/collection_purposes=0
|
||||||
|
privacy/collected_data/photos_or_videos/collected=false
|
||||||
|
privacy/collected_data/photos_or_videos/linked_to_user=false
|
||||||
|
privacy/collected_data/photos_or_videos/used_for_tracking=false
|
||||||
|
privacy/collected_data/photos_or_videos/collection_purposes=0
|
||||||
|
privacy/collected_data/audio_data/collected=false
|
||||||
|
privacy/collected_data/audio_data/linked_to_user=false
|
||||||
|
privacy/collected_data/audio_data/used_for_tracking=false
|
||||||
|
privacy/collected_data/audio_data/collection_purposes=0
|
||||||
|
privacy/collected_data/gameplay_content/collected=false
|
||||||
|
privacy/collected_data/gameplay_content/linked_to_user=false
|
||||||
|
privacy/collected_data/gameplay_content/used_for_tracking=false
|
||||||
|
privacy/collected_data/gameplay_content/collection_purposes=0
|
||||||
|
privacy/collected_data/customer_support/collected=false
|
||||||
|
privacy/collected_data/customer_support/linked_to_user=false
|
||||||
|
privacy/collected_data/customer_support/used_for_tracking=false
|
||||||
|
privacy/collected_data/customer_support/collection_purposes=0
|
||||||
|
privacy/collected_data/other_user_content/collected=false
|
||||||
|
privacy/collected_data/other_user_content/linked_to_user=false
|
||||||
|
privacy/collected_data/other_user_content/used_for_tracking=false
|
||||||
|
privacy/collected_data/other_user_content/collection_purposes=0
|
||||||
|
privacy/collected_data/browsing_history/collected=false
|
||||||
|
privacy/collected_data/browsing_history/linked_to_user=false
|
||||||
|
privacy/collected_data/browsing_history/used_for_tracking=false
|
||||||
|
privacy/collected_data/browsing_history/collection_purposes=0
|
||||||
|
privacy/collected_data/search_hhistory/collected=false
|
||||||
|
privacy/collected_data/search_hhistory/linked_to_user=false
|
||||||
|
privacy/collected_data/search_hhistory/used_for_tracking=false
|
||||||
|
privacy/collected_data/search_hhistory/collection_purposes=0
|
||||||
|
privacy/collected_data/user_id/collected=false
|
||||||
|
privacy/collected_data/user_id/linked_to_user=false
|
||||||
|
privacy/collected_data/user_id/used_for_tracking=false
|
||||||
|
privacy/collected_data/user_id/collection_purposes=0
|
||||||
|
privacy/collected_data/device_id/collected=false
|
||||||
|
privacy/collected_data/device_id/linked_to_user=false
|
||||||
|
privacy/collected_data/device_id/used_for_tracking=false
|
||||||
|
privacy/collected_data/device_id/collection_purposes=0
|
||||||
|
privacy/collected_data/purchase_history/collected=false
|
||||||
|
privacy/collected_data/purchase_history/linked_to_user=false
|
||||||
|
privacy/collected_data/purchase_history/used_for_tracking=false
|
||||||
|
privacy/collected_data/purchase_history/collection_purposes=0
|
||||||
|
privacy/collected_data/product_interaction/collected=false
|
||||||
|
privacy/collected_data/product_interaction/linked_to_user=false
|
||||||
|
privacy/collected_data/product_interaction/used_for_tracking=false
|
||||||
|
privacy/collected_data/product_interaction/collection_purposes=0
|
||||||
|
privacy/collected_data/advertising_data/collected=false
|
||||||
|
privacy/collected_data/advertising_data/linked_to_user=false
|
||||||
|
privacy/collected_data/advertising_data/used_for_tracking=false
|
||||||
|
privacy/collected_data/advertising_data/collection_purposes=0
|
||||||
|
privacy/collected_data/other_usage_data/collected=false
|
||||||
|
privacy/collected_data/other_usage_data/linked_to_user=false
|
||||||
|
privacy/collected_data/other_usage_data/used_for_tracking=false
|
||||||
|
privacy/collected_data/other_usage_data/collection_purposes=0
|
||||||
|
privacy/collected_data/crash_data/collected=false
|
||||||
|
privacy/collected_data/crash_data/linked_to_user=false
|
||||||
|
privacy/collected_data/crash_data/used_for_tracking=false
|
||||||
|
privacy/collected_data/crash_data/collection_purposes=0
|
||||||
|
privacy/collected_data/performance_data/collected=false
|
||||||
|
privacy/collected_data/performance_data/linked_to_user=false
|
||||||
|
privacy/collected_data/performance_data/used_for_tracking=false
|
||||||
|
privacy/collected_data/performance_data/collection_purposes=0
|
||||||
|
privacy/collected_data/other_diagnostic_data/collected=false
|
||||||
|
privacy/collected_data/other_diagnostic_data/linked_to_user=false
|
||||||
|
privacy/collected_data/other_diagnostic_data/used_for_tracking=false
|
||||||
|
privacy/collected_data/other_diagnostic_data/collection_purposes=0
|
||||||
|
privacy/collected_data/environment_scanning/collected=false
|
||||||
|
privacy/collected_data/environment_scanning/linked_to_user=false
|
||||||
|
privacy/collected_data/environment_scanning/used_for_tracking=false
|
||||||
|
privacy/collected_data/environment_scanning/collection_purposes=0
|
||||||
|
privacy/collected_data/hands/collected=false
|
||||||
|
privacy/collected_data/hands/linked_to_user=false
|
||||||
|
privacy/collected_data/hands/used_for_tracking=false
|
||||||
|
privacy/collected_data/hands/collection_purposes=0
|
||||||
|
privacy/collected_data/head/collected=false
|
||||||
|
privacy/collected_data/head/linked_to_user=false
|
||||||
|
privacy/collected_data/head/used_for_tracking=false
|
||||||
|
privacy/collected_data/head/collection_purposes=0
|
||||||
|
privacy/collected_data/other_data_types/collected=false
|
||||||
|
privacy/collected_data/other_data_types/linked_to_user=false
|
||||||
|
privacy/collected_data/other_data_types/used_for_tracking=false
|
||||||
|
privacy/collected_data/other_data_types/collection_purposes=0
|
||||||
|
ssh_remote_deploy/enabled=false
|
||||||
|
ssh_remote_deploy/host="user@host_ip"
|
||||||
|
ssh_remote_deploy/port="22"
|
||||||
|
ssh_remote_deploy/extra_args_ssh=""
|
||||||
|
ssh_remote_deploy/extra_args_scp=""
|
||||||
|
ssh_remote_deploy/run_script="#!/usr/bin/env bash
|
||||||
|
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
|
||||||
|
open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}"
|
||||||
|
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
|
||||||
|
kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\")
|
||||||
|
rm -rf \"{temp_dir}\""
|
||||||
@ -1,8 +1,119 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://mh2ey6ut8rgf"]
|
[gd_scene load_steps=8 format=3 uid="uid://mh2ey6ut8rgf"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dyuq6c82ei7fc" path="res://node_3d.gd" id="1_a202f"]
|
[ext_resource type="Script" uid="uid://dyuq6c82ei7fc" path="res://node_3d.gd" id="1_a202f"]
|
||||||
|
[ext_resource type="Shader" uid="uid://bgcyrf7jlhi2c" path="res://water.gdshader" id="2_noarx"]
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_a0tk4"]
|
||||||
|
render_priority = 0
|
||||||
|
shader = ExtResource("2_noarx")
|
||||||
|
shader_parameter/wave_1 = Vector4(0.3, 4, 0.2, 0.6)
|
||||||
|
shader_parameter/wave_2 = Vector4(-0.26, -0.19, 0.01, 0.47)
|
||||||
|
shader_parameter/wave_3 = Vector4(-7.67, 5.63, 0.1, 0.38)
|
||||||
|
shader_parameter/wave_4 = Vector4(-0.42, -1.63, 0.1, 0.28)
|
||||||
|
shader_parameter/wave_5 = Vector4(1.66, 0.07, 0.15, 1.81)
|
||||||
|
shader_parameter/wave_6 = Vector4(1.2, 1.14, 0.01, 0.33)
|
||||||
|
shader_parameter/wave_7 = Vector4(-1.6, 7.3, 0.11, 0.73)
|
||||||
|
shader_parameter/wave_8 = Vector4(-0.42, -1.63, 0.15, 1.52)
|
||||||
|
shader_parameter/time_factor = 2.5
|
||||||
|
shader_parameter/noise_zoom = 2.0
|
||||||
|
shader_parameter/noise_amp = 1.0
|
||||||
|
shader_parameter/base_water_color = Color(0, 0, 0, 1)
|
||||||
|
shader_parameter/fresnel_water_color = Color(0, 0, 0, 1)
|
||||||
|
shader_parameter/deep_water_color = Color(0, 0, 0, 1)
|
||||||
|
shader_parameter/shallow_water_color = Color(0, 0, 0, 1)
|
||||||
|
shader_parameter/beers_law = 0.5
|
||||||
|
shader_parameter/depth_offset = -6.02
|
||||||
|
shader_parameter/near = 7.0
|
||||||
|
shader_parameter/far = 10000.0
|
||||||
|
shader_parameter/edge_texture_scale = 3.5
|
||||||
|
shader_parameter/edge_texture_offset = 1.0
|
||||||
|
shader_parameter/edge_texture_speed = 0.1
|
||||||
|
shader_parameter/edge_foam_intensity = 2.0
|
||||||
|
shader_parameter/edge_fade_start = -3.0
|
||||||
|
shader_parameter/edge_fade_end = 6.6
|
||||||
|
shader_parameter/peak_height_threshold = 0.13
|
||||||
|
shader_parameter/peak_color = Vector3(1, 1, 1)
|
||||||
|
shader_parameter/peak_intensity = 1.0
|
||||||
|
shader_parameter/foam_intensity = 1.0
|
||||||
|
shader_parameter/foam_scale = 1.0
|
||||||
|
shader_parameter/metallic = 0.6
|
||||||
|
shader_parameter/roughness = 0.045
|
||||||
|
shader_parameter/uv_scale_text_a = 0.1
|
||||||
|
shader_parameter/uv_speed_text_a = Vector2(0.42, 0.3)
|
||||||
|
shader_parameter/uv_scale_text_b = 0.6
|
||||||
|
shader_parameter/uv_speed_text_b = Vector2(0.15, 0.1)
|
||||||
|
shader_parameter/normal_strength = 1.0
|
||||||
|
shader_parameter/uv_sampler_scale = 0.3
|
||||||
|
shader_parameter/blend_factor = 0.28
|
||||||
|
shader_parameter/perturbation_strength = 1.0
|
||||||
|
shader_parameter/perturbation_time = 0.3
|
||||||
|
shader_parameter/caustics_intensity = 15.0
|
||||||
|
shader_parameter/num_caustic_layers = 16.0
|
||||||
|
shader_parameter/caustic_distortion_strength = 0.001
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_a202f"]
|
||||||
|
material = SubResource("ShaderMaterial_a0tk4")
|
||||||
|
size = Vector2(10, 10)
|
||||||
|
subdivide_width = 18
|
||||||
|
subdivide_depth = 18
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id="Environment_noarx"]
|
||||||
|
background_mode = 1
|
||||||
|
background_color = Color(0.24698937, 0.3703865, 0.7620628, 1)
|
||||||
|
ambient_light_energy = 10.98
|
||||||
|
sdfgi_enabled = true
|
||||||
|
glow_enabled = true
|
||||||
|
fog_enabled = true
|
||||||
|
volumetric_fog_enabled = true
|
||||||
|
volumetric_fog_density = 0.0392
|
||||||
|
volumetric_fog_albedo = Color(0.26666668, 1, 1, 1)
|
||||||
|
volumetric_fog_emission = Color(0.33391064, 0, 0, 1)
|
||||||
|
volumetric_fog_emission_energy = 6.51
|
||||||
|
volumetric_fog_anisotropy = -0.4
|
||||||
|
volumetric_fog_detail_spread = 6.0
|
||||||
|
volumetric_fog_ambient_inject = 16.0
|
||||||
|
volumetric_fog_sky_affect = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="SphereMesh" id="SphereMesh_noarx"]
|
||||||
|
|
||||||
|
[sub_resource type="SphereShape3D" id="SphereShape3D_noarx"]
|
||||||
|
|
||||||
[node name="Node3D" type="Node3D"]
|
[node name="Node3D" type="Node3D"]
|
||||||
script = ExtResource("1_a202f")
|
script = ExtResource("1_a202f")
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -4.9476748)
|
||||||
|
mesh = SubResource("PlaneMesh_a202f")
|
||||||
|
|
||||||
|
[node name="Camera3D" type="Camera3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.97180074, 0.23580366, 0, -0.23580366, 0.97180074, 0, 0.92200947, 0.115694165)
|
||||||
|
|
||||||
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
|
environment = SubResource("Environment_noarx")
|
||||||
|
|
||||||
|
[node name="fishPotential" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -7.272095)
|
||||||
|
mesh = SubResource("SphereMesh_noarx")
|
||||||
|
|
||||||
|
[node name="RigidBody3D" type="RigidBody3D" parent="fishPotential"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="fishPotential/RigidBody3D"]
|
||||||
|
shape = SubResource("SphereShape3D_noarx")
|
||||||
|
|
||||||
|
[node name="fishPotential2" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.505509, 0.35343766, -3.003326)
|
||||||
|
mesh = SubResource("SphereMesh_noarx")
|
||||||
|
|
||||||
|
[node name="RigidBody3D" type="RigidBody3D" parent="fishPotential2"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="fishPotential2/RigidBody3D"]
|
||||||
|
shape = SubResource("SphereShape3D_noarx")
|
||||||
|
|
||||||
|
[node name="fishPotential3" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.262228, -0.025449038, -5.3421283)
|
||||||
|
mesh = SubResource("SphereMesh_noarx")
|
||||||
|
|
||||||
|
[node name="RigidBody3D" type="RigidBody3D" parent="fishPotential3"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="fishPotential3/RigidBody3D"]
|
||||||
|
shape = SubResource("SphereShape3D_noarx")
|
||||||
|
|||||||
@ -0,0 +1,386 @@
|
|||||||
|
// The following shader is used in order to simulate a simple ocean using Gerstner waves.
|
||||||
|
// This shader can be added in a plane mesh. For a more detailed ocean, increase the width and depth subdivision.
|
||||||
|
// Note 1: On larger planes ex. 500x500, increasing the subdivision above 1000 comes at great performance cost
|
||||||
|
// Note 2: Special thanks to @ninetailsrabbit for fixing a caustics projection issue!
|
||||||
|
|
||||||
|
shader_type spatial;
|
||||||
|
|
||||||
|
// Set render modes: always draw depth and disable backface culling
|
||||||
|
render_mode depth_draw_always, cull_disabled;
|
||||||
|
|
||||||
|
// Uniforms for screen and depth textures
|
||||||
|
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
|
||||||
|
uniform sampler2D DEPTH_TEXTURE : hint_depth_texture, filter_linear_mipmap;
|
||||||
|
|
||||||
|
// Group uniforms for wave parameters
|
||||||
|
group_uniforms Waves;
|
||||||
|
// Each wave is defined by a vec4: direction (x,y), amplitude, frequency
|
||||||
|
uniform vec4 wave_1 = vec4(0.3, 4.0, 0.2, 0.6);
|
||||||
|
uniform vec4 wave_2 = vec4(-0.26, -0.19, 0.01, 0.47);
|
||||||
|
uniform vec4 wave_3 = vec4(-7.67, 5.63, 0.1, 0.38);
|
||||||
|
uniform vec4 wave_4 = vec4(-0.42, -1.63, 0.1, 0.28);
|
||||||
|
uniform vec4 wave_5 = vec4(1.66, 0.07, 0.15, 1.81);
|
||||||
|
uniform vec4 wave_6 = vec4(1.20, 1.14, 0.01, 0.33);
|
||||||
|
uniform vec4 wave_7 = vec4(-1.6, 7.3, 0.11, 0.73);
|
||||||
|
uniform vec4 wave_8 = vec4(-0.42, -1.63, 0.15, 1.52);
|
||||||
|
|
||||||
|
// Uniforms for time factor, noise zoom, and noise amplitude
|
||||||
|
uniform float time_factor = 2.5;
|
||||||
|
uniform float noise_zoom = 2.0;
|
||||||
|
uniform float noise_amp = 1.0;
|
||||||
|
|
||||||
|
// Group uniforms for water colors
|
||||||
|
group_uniforms Water_colours;
|
||||||
|
uniform vec3 base_water_color:source_color;
|
||||||
|
uniform vec3 fresnel_water_color:source_color;
|
||||||
|
uniform vec4 deep_water_color : source_color;
|
||||||
|
uniform vec4 shallow_water_color : source_color;
|
||||||
|
|
||||||
|
// Group uniforms for depth-related parameters
|
||||||
|
group_uniforms Depth;
|
||||||
|
uniform float beers_law = 0.5;
|
||||||
|
uniform float depth_offset = -1.2;
|
||||||
|
uniform float near = 7.0;
|
||||||
|
uniform float far = 10000.0;
|
||||||
|
|
||||||
|
// Group uniforms for edge detection and foam effects
|
||||||
|
group_uniforms Edge_Detection;
|
||||||
|
uniform float edge_texture_scale = 3.5;
|
||||||
|
uniform float edge_texture_offset = 1.0;
|
||||||
|
uniform float edge_texture_speed = 0.1;
|
||||||
|
uniform float edge_foam_intensity = 2.0;
|
||||||
|
uniform float edge_fade_start = -3.0;
|
||||||
|
uniform float edge_fade_end = 6.6;
|
||||||
|
uniform sampler2D edge_foam_texture;
|
||||||
|
|
||||||
|
// Group uniforms for wave peak effects
|
||||||
|
group_uniforms WavePeakEffect;
|
||||||
|
uniform float peak_height_threshold = 1.0;
|
||||||
|
uniform vec3 peak_color = vec3(1.0, 1.0, 1.0);
|
||||||
|
uniform float peak_intensity = 1.0;
|
||||||
|
uniform sampler2D foam_texture;
|
||||||
|
uniform float foam_intensity = 1.0;
|
||||||
|
uniform float foam_scale = 1.0;
|
||||||
|
|
||||||
|
// Group uniforms for surface details
|
||||||
|
group_uniforms Surface_details;
|
||||||
|
uniform float metallic = 0.6;
|
||||||
|
uniform float roughness = 0.045;
|
||||||
|
uniform float uv_scale_text_a = 0.1;
|
||||||
|
uniform vec2 uv_speed_text_a = vec2(0.42, 0.3);
|
||||||
|
uniform float uv_scale_text_b = 0.6;
|
||||||
|
uniform vec2 uv_speed_text_b = vec2(0.15, 0.1);
|
||||||
|
uniform float normal_strength = 1.0;
|
||||||
|
uniform float uv_sampler_scale = 0.3;
|
||||||
|
uniform float blend_factor = 0.28;
|
||||||
|
uniform float perturbation_strength = 1.0; // Adjust this value to tile/de-tile the oceans surface.
|
||||||
|
uniform float perturbation_time = 0.3; // // Offset perturbation_time for patern variation
|
||||||
|
uniform sampler2D normalmap_a;
|
||||||
|
uniform sampler2D normalmap_b;
|
||||||
|
uniform sampler2D uv_sampler;
|
||||||
|
uniform sampler2DArray caustic_sampler : hint_default_black;
|
||||||
|
uniform float caustics_intensity = 15.0;
|
||||||
|
|
||||||
|
uniform float num_caustic_layers = 16.0; // <<< IMPORTANT: DOUBLE CHECK THIS against your Texture2DArray's actual slices!
|
||||||
|
uniform float caustic_distortion_strength = 0.001; // Keep this value within a range of 0.001 to 0.009
|
||||||
|
|
||||||
|
// Fresnel function to calculate the reflection/refraction effect
|
||||||
|
float fresnel(float amount, vec3 normal, vec3 view) {
|
||||||
|
return pow((1.0 - clamp(dot(normalize(normal), normalize(view)), 0.0, 1.0)), amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to calculate edge depth
|
||||||
|
float edge(float depth) {
|
||||||
|
depth = 2.0 * depth - 1.0;
|
||||||
|
return near * far / (far - depth * (near - far));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to calculate dynamic amplitude based on position and time
|
||||||
|
float dynamic_amplitude(vec2 pos, float time) {
|
||||||
|
return 1.0 + 0.5 * sin(time + length(pos) * 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hash function for noise generation
|
||||||
|
float hash(vec2 p) {
|
||||||
|
return fract(sin(dot(p * 17.17, vec2(14.91, 67.31))) * 4791.9511);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2D noise function
|
||||||
|
float noise(vec2 x) {
|
||||||
|
vec2 p = floor(x);
|
||||||
|
vec2 f = fract(x);
|
||||||
|
f = f * f * (3.0 - 2.0 * f);
|
||||||
|
vec2 a = vec2(1.0, 0.0);
|
||||||
|
return mix(mix(hash(p + a.yy), hash(p + a.xy), f.x),
|
||||||
|
mix(hash(p + a.yx), hash(p + a.xx), f.x), f.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fractional Brownian Motion (fBM) function for generating complex noise
|
||||||
|
float fbm(vec2 x) {
|
||||||
|
float height = 0.0;
|
||||||
|
float amplitude = 0.5;
|
||||||
|
float frequency = 3.0;
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
height += noise(x * frequency) * amplitude;
|
||||||
|
amplitude *= 0.5;
|
||||||
|
frequency *= 2.0;
|
||||||
|
}
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Structure to hold wave results: displacement, tangent, binormal, and normal
|
||||||
|
struct WaveResult {
|
||||||
|
vec3 displacement;
|
||||||
|
vec3 tangent;
|
||||||
|
vec3 binormal;
|
||||||
|
vec3 normal;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Gerstner wave function to calculate wave displacement and normals
|
||||||
|
WaveResult gerstner_wave(vec4 params, vec2 pos, float time) {
|
||||||
|
float steepness = params.z * dynamic_amplitude(pos, time);
|
||||||
|
float wavelength = params.w;
|
||||||
|
float k = 2.0 * PI / wavelength;
|
||||||
|
float c = sqrt(9.81 / k);
|
||||||
|
vec2 d = normalize(params.xy);
|
||||||
|
float f = k * (dot(d, pos.xy) - c * time);
|
||||||
|
float a = steepness / k;
|
||||||
|
|
||||||
|
vec3 displacement = vec3(d.x * (a * cos(f)), a * sin(f), d.y * (a * cos(f)));
|
||||||
|
|
||||||
|
vec3 tangent = vec3(1.0 - d.x * d.x * steepness * sin(f), steepness * cos(f), -d.x * d.y * steepness * sin(f));
|
||||||
|
vec3 binormal = vec3(-d.x * d.y * steepness * sin(f), steepness * cos(f), 1.0 - d.y * d.y * steepness * sin(f));
|
||||||
|
vec3 normal = normalize(cross(tangent, binormal));
|
||||||
|
|
||||||
|
return WaveResult(displacement, tangent, binormal, normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to combine multiple Gerstner waves
|
||||||
|
WaveResult wave(vec2 pos, float time) {
|
||||||
|
WaveResult waveResult;
|
||||||
|
waveResult.displacement = vec3(0.0);
|
||||||
|
waveResult.tangent = vec3(1.0, 0.0, 0.0);
|
||||||
|
waveResult.binormal = vec3(0.0, 0.0, 1.0);
|
||||||
|
waveResult.normal = vec3(0.0, 1.0, 0.0);
|
||||||
|
|
||||||
|
WaveResult wr;
|
||||||
|
wr = gerstner_wave(wave_1, pos, time);
|
||||||
|
waveResult.displacement += wr.displacement;
|
||||||
|
waveResult.tangent += wr.tangent;
|
||||||
|
waveResult.binormal += wr.binormal;
|
||||||
|
waveResult.normal += wr.normal;
|
||||||
|
|
||||||
|
wr = gerstner_wave(wave_2, pos, time);
|
||||||
|
waveResult.displacement += wr.displacement;
|
||||||
|
waveResult.tangent += wr.tangent;
|
||||||
|
waveResult.binormal += wr.binormal;
|
||||||
|
waveResult.normal += wr.normal;
|
||||||
|
|
||||||
|
wr = gerstner_wave(wave_3, pos, time);
|
||||||
|
waveResult.displacement += wr.displacement;
|
||||||
|
waveResult.tangent += wr.tangent;
|
||||||
|
waveResult.binormal += wr.binormal;
|
||||||
|
waveResult.normal += wr.normal;
|
||||||
|
|
||||||
|
wr = gerstner_wave(wave_4, pos, time);
|
||||||
|
waveResult.displacement += wr.displacement;
|
||||||
|
waveResult.tangent += wr.tangent;
|
||||||
|
waveResult.binormal += wr.binormal;
|
||||||
|
waveResult.normal += wr.normal;
|
||||||
|
|
||||||
|
wr = gerstner_wave(wave_5, pos, time);
|
||||||
|
waveResult.displacement += wr.displacement;
|
||||||
|
waveResult.tangent += wr.tangent;
|
||||||
|
waveResult.binormal += wr.binormal;
|
||||||
|
waveResult.normal += wr.normal;
|
||||||
|
|
||||||
|
wr = gerstner_wave(wave_6, pos, time);
|
||||||
|
waveResult.displacement += wr.displacement;
|
||||||
|
waveResult.tangent += wr.tangent;
|
||||||
|
waveResult.binormal += wr.binormal;
|
||||||
|
waveResult.normal += wr.normal;
|
||||||
|
|
||||||
|
wr = gerstner_wave(wave_7, pos, time);
|
||||||
|
waveResult.displacement += wr.displacement;
|
||||||
|
waveResult.tangent += wr.tangent;
|
||||||
|
waveResult.binormal += wr.binormal;
|
||||||
|
waveResult.normal += wr.normal;
|
||||||
|
|
||||||
|
wr = gerstner_wave(wave_8, pos, time);
|
||||||
|
waveResult.displacement += wr.displacement;
|
||||||
|
waveResult.tangent += wr.tangent;
|
||||||
|
waveResult.binormal += wr.binormal;
|
||||||
|
waveResult.normal += wr.normal;
|
||||||
|
|
||||||
|
// Add noise to the wave displacement for more natural look
|
||||||
|
waveResult.displacement.y += fbm(pos.xy * (noise_zoom / 50.0)) * noise_amp;
|
||||||
|
|
||||||
|
return waveResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Varying variables to pass data from vertex to fragment shader
|
||||||
|
varying float height;
|
||||||
|
varying vec3 world_position;
|
||||||
|
varying mat3 tbn_matrix;
|
||||||
|
varying mat4 inv_mvp;
|
||||||
|
|
||||||
|
// Vertex shader function
|
||||||
|
void vertex() {
|
||||||
|
// Calculate time based on the global TIME variable and time_factor
|
||||||
|
float time = TIME / time_factor;
|
||||||
|
// Calculate wave displacement and normals
|
||||||
|
WaveResult waveResult = wave(VERTEX.xz, time);
|
||||||
|
// Apply wave displacement to the vertex position
|
||||||
|
VERTEX += waveResult.displacement;
|
||||||
|
// Store the height of the wave displacement
|
||||||
|
height = waveResult.displacement.y;
|
||||||
|
|
||||||
|
// Transform normals, tangents, and binormals to world space
|
||||||
|
vec3 n = normalize((MODELVIEW_MATRIX * vec4(waveResult.normal, 0.0)).xyz);
|
||||||
|
vec3 t = normalize((MODELVIEW_MATRIX * vec4(waveResult.tangent.xyz, 0.0)).xyz);
|
||||||
|
vec3 b = normalize((MODELVIEW_MATRIX * vec4((cross(waveResult.normal, waveResult.tangent.xyz)), 0.0)).xyz);
|
||||||
|
// Calculate world position of the vertex
|
||||||
|
world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
||||||
|
// Create TBN matrix for normal mapping
|
||||||
|
tbn_matrix = mat3(t, b, n);
|
||||||
|
// Calculate inverse MVP matrix for screen space transformations
|
||||||
|
inv_mvp = inverse(PROJECTION_MATRIX * MODELVIEW_MATRIX);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 2D Random hash function
|
||||||
|
float random(vec2 p) {
|
||||||
|
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Smooth noise function
|
||||||
|
float smooth_noise(vec2 p) {
|
||||||
|
vec2 i = floor(p);
|
||||||
|
vec2 f = fract(p);
|
||||||
|
vec2 u = f * f * (3.0 - 2.0 * f);
|
||||||
|
return mix(
|
||||||
|
mix(random(i + vec2(0.0, 0.0)), random(i + vec2(1.0, 0.0)), u.x),
|
||||||
|
mix(random(i + vec2(0.0, 1.0)), random(i + vec2(1.0, 1.0)), u.x),
|
||||||
|
u.y
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Layered noise for detiling
|
||||||
|
float layered_noise(vec2 p, float scale) {
|
||||||
|
float n = 0.0;
|
||||||
|
n += smooth_noise(p * scale) * 0.5;
|
||||||
|
n += smooth_noise(p * scale * 2.0) * 0.25;
|
||||||
|
n += smooth_noise(p * scale * 4.0) * 0.125;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perturb UV coordinates for detiling
|
||||||
|
vec2 perturb_uv(vec2 uv, vec2 world_pos, float time, float strength) {
|
||||||
|
// Use world position to generate unique noise patterns
|
||||||
|
vec2 noise_offset = vec2(
|
||||||
|
layered_noise(world_pos * 0.3 + time * 0.06, 1.0),
|
||||||
|
layered_noise(world_pos * 0.3 + time * 0.06 + vec2(10.0), 1.0)
|
||||||
|
);
|
||||||
|
// Apply subtle distortion to UVs
|
||||||
|
return uv + noise_offset * strength;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Fragment shader function
|
||||||
|
void fragment() {
|
||||||
|
// Calculate UV coordinates based on world position
|
||||||
|
vec2 uv = world_position.xz;
|
||||||
|
|
||||||
|
// Sample UV offset texture
|
||||||
|
vec2 uv_offset = texture(uv_sampler, uv * uv_sampler_scale).rg;
|
||||||
|
|
||||||
|
// Calculate base UV coordinates for normal maps
|
||||||
|
vec2 base_uv_a = (uv + uv_speed_text_a * TIME + uv_offset) * uv_scale_text_a;
|
||||||
|
vec2 base_uv_b = (uv + uv_speed_text_b * TIME + uv_offset) * uv_scale_text_b;
|
||||||
|
|
||||||
|
// Apply noise-based perturbation to UVs
|
||||||
|
vec2 animated_uv_a = perturb_uv(base_uv_a, world_position.xz, TIME, perturbation_strength);
|
||||||
|
vec2 animated_uv_b = perturb_uv(base_uv_b, world_position.xz, TIME + 0.0, perturbation_time);
|
||||||
|
|
||||||
|
// Sample normal maps
|
||||||
|
vec3 normal_sample_a = texture(normalmap_a, animated_uv_a).rgb;
|
||||||
|
vec3 normal_sample_b = texture(normalmap_b, animated_uv_b).rgb;
|
||||||
|
|
||||||
|
// Normalize normal samples and combine them
|
||||||
|
normal_sample_a = normalize(normal_sample_a * 2.0 - 1.0);
|
||||||
|
normal_sample_b = normalize(normal_sample_b * 2.0 - 1.0);
|
||||||
|
vec3 combined_normal = normalize(mix(normal_sample_a, normal_sample_b, blend_factor));
|
||||||
|
|
||||||
|
// Perturb the normal using the TBN matrix
|
||||||
|
vec3 perturbed_normal = normalize(tbn_matrix * (combined_normal * normal_strength));
|
||||||
|
|
||||||
|
// Sample depth texture
|
||||||
|
float depth_raw = texture(DEPTH_TEXTURE, SCREEN_UV).r;
|
||||||
|
float depth = PROJECTION_MATRIX[3][2] / (depth_raw + PROJECTION_MATRIX[2][2]);
|
||||||
|
|
||||||
|
// Calculate the distance from the camera to the water surface
|
||||||
|
float camera_depth = INV_VIEW_MATRIX[3].y - world_position.y;
|
||||||
|
if (camera_depth < 0.0) { // Camera is underwater
|
||||||
|
// Map the depth to a range where deeper = positive beers_law, closer = negative beers_law
|
||||||
|
float depth_factor = smoothstep(-10.0, 0.0, camera_depth); // Adjust -10.0 for the depth range
|
||||||
|
ALPHA -= depth_factor * 0.3;
|
||||||
|
}
|
||||||
|
// Calculate depth blend factor using Beer's law
|
||||||
|
float depth_blend = exp((depth + VERTEX.z + depth_offset) * -beers_law);
|
||||||
|
depth_blend = clamp(1.0 - depth_blend, 0.0, 1.0);
|
||||||
|
float depth_blend_power = clamp(pow(depth_blend, 2.5), 0.0, 1.0);
|
||||||
|
|
||||||
|
// Sample screen color and blend it with depth color
|
||||||
|
vec3 screen_color = textureLod(SCREEN_TEXTURE, SCREEN_UV, depth_blend_power * 2.5).rgb;
|
||||||
|
vec3 depth_color = mix(shallow_water_color.rgb, deep_water_color.rgb, depth_blend_power);
|
||||||
|
vec3 color = mix(screen_color * depth_color, depth_color * 0.25, depth_blend_power * 0.5);
|
||||||
|
|
||||||
|
// Calculate depth difference for edge detection
|
||||||
|
float z_depth = edge(texture(DEPTH_TEXTURE, SCREEN_UV).x);
|
||||||
|
float z_pos = edge(FRAGCOORD.z);
|
||||||
|
float z_dif = z_depth - z_pos;
|
||||||
|
|
||||||
|
// Calculate caustic effect
|
||||||
|
vec4 caustic_screenPos = vec4(SCREEN_UV * 2.0 - 1.0, depth_raw, 1.0);
|
||||||
|
vec4 caustic_localPos = inv_mvp * caustic_screenPos;
|
||||||
|
caustic_localPos = vec4(caustic_localPos.xyz / caustic_localPos.w, caustic_localPos.w);
|
||||||
|
|
||||||
|
vec2 caustic_Uv = caustic_localPos.xz / vec2(1024.0) + 0.5;
|
||||||
|
caustic_Uv += perturbed_normal.xz * caustic_distortion_strength;
|
||||||
|
|
||||||
|
float caustic_layer_index = floor(mod(TIME * 26.0, num_caustic_layers)); // Use floor for integer index
|
||||||
|
|
||||||
|
vec4 caustic_color = texture(caustic_sampler, vec3(caustic_Uv * 660.0, caustic_layer_index));
|
||||||
|
float caustic_intensity_multiplier = (1.0 - depth_blend_power) * caustics_intensity;
|
||||||
|
|
||||||
|
color *= 1.0 + pow(caustic_color.r, 1.50) * caustic_intensity_multiplier;
|
||||||
|
|
||||||
|
// Calculate fresnel effect
|
||||||
|
float fresnel = fresnel(5.0, NORMAL, VIEW);
|
||||||
|
vec3 surface_color = mix(base_water_color, fresnel_water_color, fresnel);
|
||||||
|
|
||||||
|
// Calculate edge foam effect
|
||||||
|
vec2 edge_uv = world_position.xz * edge_texture_scale + edge_texture_offset + TIME * edge_texture_speed;
|
||||||
|
float edge_fade = smoothstep(edge_fade_start, edge_fade_end, z_dif);
|
||||||
|
vec3 depth_color_adj = mix(texture(edge_foam_texture, edge_uv).rgb * edge_foam_intensity, color, edge_fade);
|
||||||
|
|
||||||
|
// Apply peak color effect based on height with noise
|
||||||
|
float peak_factor = smoothstep(peak_height_threshold, peak_height_threshold + 0.2, height);
|
||||||
|
float noise_factor = fbm(world_position.xz * 0.1 + TIME * 0.1);
|
||||||
|
peak_factor = peak_factor * noise_factor;
|
||||||
|
|
||||||
|
vec3 final_color = mix(surface_color, peak_color * peak_intensity, peak_factor);
|
||||||
|
|
||||||
|
// Sample the foam texture and blend it with the final color
|
||||||
|
vec2 foam_uv = world_position.xz * foam_scale + TIME * 0.1;
|
||||||
|
float foam_sample = texture(foam_texture, foam_uv).r;
|
||||||
|
float foam_blend_factor = smoothstep(0.0, 1.0, peak_factor) * foam_sample * foam_intensity;
|
||||||
|
|
||||||
|
final_color = mix(final_color, vec3(1.0), foam_blend_factor);
|
||||||
|
|
||||||
|
// Set the final color, metallic, roughness, and normal
|
||||||
|
ALBEDO = clamp(final_color + depth_color_adj, vec3(0.0), vec3(1.0));
|
||||||
|
METALLIC = metallic;
|
||||||
|
ROUGHNESS = roughness;
|
||||||
|
NORMAL = perturbed_normal;
|
||||||
|
}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
uid://bgcyrf7jlhi2c
|
||||||