2024-07-21 16:39:45 +05:30
|
|
|
vec2 flipbook_uv(vec2 uv, int rows, int columns, float anim_speed){
|
|
|
|
int start_frame = 1;
|
|
|
|
int end_frame = rows * columns;
|
|
|
|
start_frame += int(fract(TIME * anim_speed) * float(end_frame));
|
2024-08-06 16:00:49 +05:30
|
|
|
float frame = float(clamp(start_frame, 0, end_frame));
|
|
|
|
vec2 off_per_frame = vec2((1.0 / float(columns)), (1.0 / float(rows)));
|
|
|
|
vec2 sprite_size = vec2(uv.x / float(columns), uv.y / float(rows));
|
|
|
|
vec2 current_sprite = vec2(0.0, 1.0 - off_per_frame.y);
|
|
|
|
current_sprite.x += frame * off_per_frame.x;
|
|
|
|
float row_index;
|
|
|
|
float mod = modf(frame / float(columns), row_index);
|
|
|
|
current_sprite.y -= 1.0 - (row_index * off_per_frame.y);
|
|
|
|
current_sprite.x -= row_index * float(columns) * off_per_frame.x;
|
|
|
|
vec2 sprite_uv = (sprite_size + current_sprite);
|
|
|
|
return sprite_uv;
|
2024-07-21 16:39:45 +05:30
|
|
|
}
|
|
|
|
|
2024-08-06 16:00:49 +05:30
|
|
|
vec2 parallax_mapping_uv_offset_1_step(float height, float amplitude, vec3 view_dir_tangent) {
|
2024-07-21 16:39:45 +05:30
|
|
|
height = height * amplitude - amplitude / 2.0;
|
2024-08-06 16:00:49 +05:30
|
|
|
vec3 vector = view_dir_tangent;
|
|
|
|
vector.y += 0.42;
|
|
|
|
return height * (vector.xz / vector.y);
|
2024-07-21 16:39:45 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
vec2 parallax_mapping_uv(sampler2D height, float amplitude, vec2 uv, vec3 tangent, vec3 normal, vec3 binormal, vec3 view)
|
|
|
|
{
|
|
|
|
float depth = amplitude / 10.0;
|
2024-08-06 16:00:49 +05:30
|
|
|
mat3 tangent_matrix = mat3(tangent, normal, -binormal); // VIEW TO TANGENT SPACE
|
|
|
|
vec3 view_tangent = transpose(tangent_matrix) * view;
|
|
|
|
float parallaxHeight = texture(height, uv).r;
|
|
|
|
vec2 parallaxOffset = parallax_mapping_uv_offset_1_step(parallaxHeight, depth, view_tangent);
|
|
|
|
return parallaxOffset + uv;
|
2024-07-21 16:39:45 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
vec2 radial_shear_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
2024-08-06 16:00:49 +05:30
|
|
|
vec2 delta = uv - center;
|
|
|
|
float delta2 = dot(delta.xy, delta.xy);
|
|
|
|
vec2 delta_offset = vec2(delta2 * strength);
|
|
|
|
return uv + vec2(delta.y, -delta.x) * delta_offset + offset;
|
2024-07-21 16:39:45 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
vec2 rotate_uv(vec2 uv, vec2 center, float rotation, bool use_degrees){
|
2024-08-06 16:00:49 +05:30
|
|
|
float angle = rotation;
|
2024-07-21 16:39:45 +05:30
|
|
|
if(use_degrees){
|
2024-08-06 16:00:49 +05:30
|
|
|
angle = rotation * (3.1415926/180.0);
|
2024-07-21 16:39:45 +05:30
|
|
|
}
|
2024-08-06 16:00:49 +05:30
|
|
|
mat2 rot = mat2(
|
|
|
|
vec2(cos(angle), -sin(angle)),
|
|
|
|
vec2(sin(angle), cos(angle))
|
2024-07-21 16:39:45 +05:30
|
|
|
);
|
2024-08-06 16:00:49 +05:30
|
|
|
vec2 delta = uv - center;
|
|
|
|
delta = rot * delta;
|
|
|
|
return delta + center;
|
2024-07-21 16:39:45 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
vec2 spherize_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
2024-08-06 16:00:49 +05:30
|
|
|
vec2 delta = uv - center;
|
|
|
|
float delta2 = dot(delta.xy, delta.xy);
|
|
|
|
float delta4 = delta2 * delta2;
|
|
|
|
vec2 delta_offset = vec2(delta4 * strength);
|
|
|
|
return uv + delta * delta_offset + offset;
|
2024-07-21 16:39:45 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
vec2 swirl_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
2024-08-06 16:00:49 +05:30
|
|
|
vec2 delta = uv - center;
|
|
|
|
float angle = strength * max(pow(1. - length(delta), 3), 0);
|
|
|
|
mat2 rotation = mat2(
|
|
|
|
vec2(cos(angle), -sin(angle)),
|
|
|
|
vec2(sin(angle), cos(angle))
|
2024-07-21 16:39:45 +05:30
|
|
|
);
|
2024-08-06 16:00:49 +05:30
|
|
|
delta = rotation * delta;
|
|
|
|
return delta + center + offset;
|
2024-07-21 16:39:45 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
vec2 twirl_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
2024-08-06 16:00:49 +05:30
|
|
|
vec2 delta = uv - center;
|
|
|
|
float angle = strength * length(delta);
|
|
|
|
mat2 rotation = mat2(
|
|
|
|
vec2(cos(angle), -sin(angle)),
|
|
|
|
vec2(sin(angle), cos(angle))
|
2024-07-21 16:39:45 +05:30
|
|
|
);
|
2024-08-06 16:00:49 +05:30
|
|
|
delta = rotation * delta;
|
|
|
|
return delta + center + offset;
|
2024-07-21 16:39:45 +05:30
|
|
|
}
|