From ee897db52b6f3c0574f5108e060a0bea56294427 Mon Sep 17 00:00:00 2001 From: kziolkowski Date: Tue, 20 May 2025 18:27:20 +0200 Subject: [PATCH] added swaying plants shader --- prefabs/farm/swaying_plant.gdshader | 43 +++++++++++++++++++++++++ prefabs/farm/swaying_plant.gdshader.uid | 1 + 2 files changed, 44 insertions(+) create mode 100644 prefabs/farm/swaying_plant.gdshader create mode 100644 prefabs/farm/swaying_plant.gdshader.uid diff --git a/prefabs/farm/swaying_plant.gdshader b/prefabs/farm/swaying_plant.gdshader new file mode 100644 index 0000000..b6a1686 --- /dev/null +++ b/prefabs/farm/swaying_plant.gdshader @@ -0,0 +1,43 @@ +// original wind shader from https://github.com/Maujoe/godot-simple-wind-shader-2d/tree/master/assets/maujoe.simple_wind_shader_2d +// original script modified by HungryProton so that the assets are moving differently : https://pastebin.com/VL3AfV8D +// +// speed - The speed of the wind movement. +// minStrength - The minimal strength of the wind movement. +// maxStrength - The maximal strength of the wind movement. +// strengthScale - Scalefactor for the wind strength. +// interval - The time between minimal and maximal strength changes. +// detail - The detail (number of waves) of the wind movement. +// distortion - The strength of geometry distortion. +// heightOffset - The height where the wind begins to move. By default 0.0. + +shader_type canvas_item; +render_mode blend_mix; + +// Wind settings. +uniform float speed = 1.0; +uniform float minStrength : hint_range(0.0, 1.0) = 0.05; +uniform float maxStrength : hint_range(0.0, 1.0) = 0.01; +uniform float strengthScale = 100.0; +uniform float interval = 3.5; +uniform float detail = 1.0; +uniform float distortion : hint_range(0.0, 1.0); +uniform float heightOffset : hint_range(0.0, 1.0); + +// With the offset value, you can if you want different moves for each asset. Just put a random value (1, 2, 3) in the editor. Don't forget to mark the material as unique if you use this +uniform float offset = 0; + + +float getWind(vec2 vertex, vec2 uv, float time){ + float diff = pow(maxStrength - minStrength, 2.0); + float strength = clamp(minStrength + diff + sin(time / interval) * diff, minStrength, maxStrength) * strengthScale; + float wind = (sin(time) + cos(time * detail)) * strength * max(0.0, (1.0-uv.y) - heightOffset); + + return wind; +} + +void vertex() { + vec4 pos = MODEL_MATRIX * vec4(0.0, 0.0, 0.0, 1.0); + float time = TIME * speed + offset; + //float time = TIME * speed + pos.x * pos.y ; not working when moving... + VERTEX.x += getWind(VERTEX.xy, UV, time); +} \ No newline at end of file diff --git a/prefabs/farm/swaying_plant.gdshader.uid b/prefabs/farm/swaying_plant.gdshader.uid new file mode 100644 index 0000000..98f372c --- /dev/null +++ b/prefabs/farm/swaying_plant.gdshader.uid @@ -0,0 +1 @@ +uid://braevmqauoek7