From d1dc134ecbcf37e4713104100cf0b0d229b6fb3d Mon Sep 17 00:00:00 2001 From: nc5432 Date: Thu, 20 Feb 2025 12:11:06 -0500 Subject: [PATCH] Added boat --- Models/boat_0.glb | Bin 0 -> 6884 bytes Models/boat_0.glb.import | 36 ++++++++++++++++ Scenes/WaterPlane.tscn | 89 ++++++++++++++++++++++++++++++--------- Scripts/BuoyantBody.gd | 21 +++------ Scripts/WaveManager.gd | 20 +++++++++ Shaders/Water2.gdshader | 4 ++ 6 files changed, 135 insertions(+), 35 deletions(-) create mode 100644 Models/boat_0.glb create mode 100644 Models/boat_0.glb.import create mode 100644 Scripts/WaveManager.gd diff --git a/Models/boat_0.glb b/Models/boat_0.glb new file mode 100644 index 0000000000000000000000000000000000000000..3462895e413840413d342b459f7b035126023bf0 GIT binary patch literal 6884 zcmcgwdvFuy5nrf73FOfLG4I42kCGsplXN;s#=6f>iosZpZNLo$BHL$Mi7mO3%%jFJ zje`Tkpqs|`=LdZeJR=m0_#*lt%lRxP z@3iuw%jObYZimxhv+&yA5Vh{P$rq7BeqUpM5VgUU>PET3Un|#g*^y9-j7Rs!wJeAM z1y+>>!;$bRZ%ZVMd+^-m>d<02;%jX5*OUia>Kg)b7(KOe)xNM?5Nr&F=KE@NqA)Cn z)n*rYyIrumMZ0LTV@Ni)+hw!5oi>*sx?O@xM4i>@w%YABr`6^Z-45O*SggoEQ~Z>K zKO`@dIB-ChvqiMML;hWt(bh<|nbvo8_}`KwzZ+G{IU=B+5MEcTY_ z{FZvl7w465*;WfzSyWZv^_CZ|;<;=a*3TcP_19=7c04Q2AKJ9(g!*dmQ#csvC$zey zu1*du^~-B?r!~Q*=3qb$L@L)cW3`bH(ZbaPTLRcuRuOY*@~zd1o+XNIo)?^Mr`zrj zTn?ATnk5KUx6N%Ac;pUsE~H9ux{y!NZ50JU6kVd0yB`~Ed1ew1nO3A$5CwGNaAA8O z-4@(u6P?+3^)E``nsKB-%s z#?GBQEE(bEx-=H;p2OaY6)I-%*sd|stzf>od+8y`2tRxDH`2kMwy0}zixo2%uW2|s zYNon(-W!rx+_i0;dL!piMcZ!%uXjAgjuiFi{>|V6pLVnIyVmReQ{l;@elOMSY*atq z_!o~E+&8jU3SHq?^IJDOX0Vpy1Kakq*PFL^%;FQ>A$97(H}(By@P${lsuxP1(DO}& z?;RPFsyjQ?3wtURGx&$&rm(la?`9wLl__Shmg9^aKVu!2HtF%0!DFs_)ym3W>-n0& zH?Kd#UUMJN_ou>X7ds^7_!70kb;)CduV36P3F%{5Ug<555&ru}o29j9pNdW_S0yvJ zw_pyt{@Yo~jB_IuGg#y8)Skb2-aFH$_jxM((A(Ff50;Eo3YYVe8GPWmvFzQqHsPI_>}2LA(zMIzEXO~W zE#`mVIqz|^zJrsax5C$>Rae^7!>971M|Zs(o&MpI>YnMD>JIT9_1z<%DEoFVQu|iD z5$!CPsAdGVOH+#e5k2&Jn2o+XiJdRIQ+fIF0@nMd7o)>|!qiuup3Odt{W0f9mmApZ z`z|P_uHDKReq@A{eyB}-aGr2F_VdG@8B^QUUo@AgH&3~wV+D7sXzNMXQvcK^>XpQ~ zM*dNMnw)z&ajp>$s8HU=}*|MvLJXMxYCAy#PLH$6?s8Z6G` zX*{$>)E4yv98z1O{WM=%YZ^1ni}Fc(kMd7#>3*6o?T4O^ay`qAb$Ht5wyU%sP#;a` zPyA|A&dG~AqrY3!uJ!pqeNlg!=m+}W$Up62BU_`{p*=}^hR!DC%7|Oa8=W2MpUw{L z`Ty3rG{-@l4Dd|rLb;-KG1_C~pXNem0XbC3{WdVm$d!lOZv%Bl|15F8(Rrb~Ay;bR zuEXBWA@>+d++(!g=W&MS8ady$JcbbWNR#@;_uuH2CzZPHRkIiW9KNm0u?fhh`mY=2{x_%a8Y}mlJ z3^w>ZnaxmNTE3d^WNR+bYw-Z%S!cE2FhPk2CRn zhOVE*+Obw=B%}2P)>89tv}*B=OgpRhW3pA_XUd$jI#0>gRQ7}CCh@M>{V(RnsBaT` ztyhftwqHNAC%;I4{lDvPRM&()Ree%@e;DS19UjK#0eBS3z=_fcGhqoVMp~BOlMXXL zgn20E!B=4_+yM(wE`%Z&1{};nISa;v7rqYDQBH^9@D<2}X(*?`oiG+ggAJt(vS041yWks8j float: return fmod(float(Time.get_ticks_msec()) / 1000, 3600) @@ -24,10 +15,10 @@ func getSumEHeight(x: float, y: float) -> float: var amp: float = 1 var freq: float = 1 var offset: float = 0 - for i: int in range(waveCount): - offset += amplitude * amp * pow(exp(1), sin(frequency * freq * (speed * TIME() + (dirs[i].x * x) + (dirs[i].y * y)))) - amp *= amplitudeScaleFactor - freq *= frequencyScaleFactor + for i: int in range(WaveManager.instance.waveCount): + offset += WaveManager.instance.amplitude * amp * pow(exp(1), sin(WaveManager.instance.frequency * freq * (WaveManager.instance.speed * TIME() + (WaveManager.instance.dirs[i].x * x) + (WaveManager.instance.dirs[i].y * y)))) + amp *= WaveManager.instance.amplitudeScaleFactor + freq *= WaveManager.instance.frequencyScaleFactor return offset func getSumGHeight(x: float, y: float) -> float: @@ -41,4 +32,4 @@ func _physics_process(delta: float) -> void: for i: int in range(samplePoints.size()): var distance: float = clampf(getSumEHeight(samplePoints[i].global_position.x, samplePoints[i].global_position.z) - samplePoints[i].global_position.y, 0, 1); if (distance > 0): - apply_force(abs(get_gravity()) * distance, samplePoints[i].position) + apply_force(abs(buoyancy * get_gravity()) * distance, samplePoints[i].position) diff --git a/Scripts/WaveManager.gd b/Scripts/WaveManager.gd new file mode 100644 index 0000000..eda9d7a --- /dev/null +++ b/Scripts/WaveManager.gd @@ -0,0 +1,20 @@ +class_name WaveManager extends Node + +static var instance: WaveManager + +@export_category("E^Sin Configuration") +@export var amplitude: float = 1 +@export var frequency: float = 1 +@export var speed: float = 1 +@export var waveCount: int = 5 +@export var amplitudeScaleFactor: float = 0.82 +@export var frequencyScaleFactor: float = 1.18 +@export var dirs: Array[Vector2] + +@export_category("Gerstner Wave Configuration") + +@export_category("FFT Configuration") + +func _enter_tree() -> void: + if (instance == null || is_instance_valid(instance)): instance = self + else: queue_free() diff --git a/Shaders/Water2.gdshader b/Shaders/Water2.gdshader index 6c816f5..f4da0ec 100644 --- a/Shaders/Water2.gdshader +++ b/Shaders/Water2.gdshader @@ -12,6 +12,8 @@ uniform float amplitudeScaleFactor = 0.82; uniform float frequencyScaleFactor = 1.18; uniform float dirs[40]; +uniform sampler2D depth: hint_depth_texture; + varying float yOffset; float calcHeight(float x, float y){ @@ -41,6 +43,8 @@ void fragment() { float strength = yOffset * texture(foamTex, UV).r; if (strength >= foamHeight) ALBEDO = ALBEDO + vec3(1, 1, 1) * (strength + foamHeight); ALPHA = 0.9; + float dep = texture(depth, SCREEN_UV).x; + vec3 ndc = vec3(SCREEN_UV * 2.0 - 1.0, dep); } //void light() {