3D simple animated flag shader
This is a simple shader to animate a texture like a flag. You can use the various uniforms to control the look and feel of the flag.
- speed: speed at which the TIME elapses. Basically the wind speed
- frequency_x: frequency of the sine wave for the x axis
- frequency_y: frequency of the sine wave for the y axis
- frequency_z: frequency of the sine wave for the z axis
- amplitude_x: amplitude of the distortion for the x axis
- amplitude_y: amplitude of the distortion for the y axis
- amplitude_z: amplitude of the distortion for the z axis
- inclination: inclination in the x axis, where the flag is attached (left)
I made a video showing you how I made it, check it out here: https://youtu.be/FIYrT8H9Qgg
Feel free to use it however you like!
Shader code
shader_type spatial;
uniform float speed = 2.0;
uniform float frequency_y = 5.0;
uniform float frequency_x = 2.5;
uniform float frequency_z = 2.5;
uniform float amplitude_y = 0.1;
uniform float amplitude_x = 0.05;
uniform float amplitude_z = 0.05;
uniform float inclination = -0.04;
uniform sampler2D tex: hint_albedo;
void fragment(){
vec4 albedo_tex = texture(tex, UV);
ALBEDO = vec3(1.0) * albedo_tex.rgb;
}
void vertex(){
VERTEX.y += sin((UV.x - TIME * speed) * frequency_y) * amplitude_y * UV.x;
VERTEX.x += cos((UV.y - TIME * speed) * frequency_x) * amplitude_x * 0.1 * UV.x;
VERTEX.z += sin((UV.x - TIME * speed) * frequency_z) * amplitude_z * UV.x;
VERTEX.x -= (1.0 - UV.y) * inclination;
}