// #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Wind.gdshaderinc" #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Math.gdshaderinc" #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Transform.gdshaderinc" void applyWind( float _TIME, mat4 _MODEL_MATRIX, inout vec3 _VERTEX, float _windStrength, vec2 _windSpeed, float _windScale, sampler2D _windNoise, vec2 _windNoiseAngleOffset, vec2 _windNoiseStrengthOffset, float _windStart, float _windEnd, float _windWeightCurve, float _windHeightCompensation ) { float _windAmount = normalizeToRange01( _VERTEX.y, _windStart, _windEnd ); float rawWindAmount = _windAmount; _windAmount = mix( _windAmount, _windAmount * _windAmount, _windWeightCurve ); vec3 worldVertex = localToWorld( _VERTEX, _MODEL_MATRIX ); vec2 _windUV = _TIME * _windSpeed + worldVertex.xz * _windScale; float angle = texture( _windNoise, _windUV + _windNoiseAngleOffset).r * PI * 2.0; float strength = texture( _windNoise, _windUV + _windNoiseStrengthOffset ).r * _windStrength; vec2 circle = onCircle( angle ) * strength; _VERTEX = worldToLocal( worldVertex + vec3( circle.x, 0, circle.y ) * _windAmount, _MODEL_MATRIX ); float minY = min( _VERTEX.y, 0 ); _VERTEX.y = mix( _VERTEX.y, max( minY, _VERTEX.y - strength * _windAmount), _windHeightCompensation * 4.0f ); }