Advertisement
Nozomu57

Godot: Slicer shader by Nozomu

Dec 19th, 2023
549
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Godot GLSL 1.28 KB | Source Code | 0 0
  1. shader_type canvas_item;
  2.  
  3. uniform vec4 first_color : hint_color = vec4(1.0);
  4. uniform vec4 second_color : hint_color = vec4(0.0, 0.0, 0.0, 1.0);
  5. uniform float position : hint_range(-1, 1) = 0.0;
  6. uniform float shrink : hint_range(0.5, 8) = 4;
  7. uniform bool flipped = false;
  8.  
  9. uniform float left_limit : hint_range(0.0, 1280.0) = 0.0;
  10. uniform float right_limit : hint_range(0.0, 1280.0) = 1280.0;
  11.  
  12. uniform float ribbon_width : hint_range(0.0, 100.0) = 50.0;
  13. uniform float ribbon_angle : hint_range(0.0, 1.5) = 0.0;
  14. uniform vec2 ribbon_position = vec2(640, 360);
  15.  
  16. varying vec2 world_pos;
  17.  
  18. void vertex() {
  19.     world_pos = VERTEX.xy;
  20. }
  21.  
  22.  
  23. void fragment() {
  24.     if (world_pos.x < left_limit || world_pos.x > right_limit) {
  25.         COLOR = vec4(0,0,0,0);
  26.     }
  27.     else if (world_pos.y < ribbon_position.y - ribbon_width - tan(ribbon_angle)*(world_pos.x - ribbon_position.x)) {
  28.         COLOR = vec4(0,0,0,0);
  29.     }
  30.     else if (world_pos.y > ribbon_position.y  - tan(ribbon_angle)*(world_pos.x - ribbon_position.x)) {
  31.         COLOR = vec4(0,0,0,0);
  32.     }
  33.     else {
  34.         float pivot = position + 0.5;
  35.         vec2 uv = UV - pivot;
  36.        
  37.         if ((uv.x < 0.0 && !flipped) || (uv.x > 0.0 && flipped)) {
  38.             COLOR = vec4(0,0,0,0);
  39.         } else {
  40.             float shift = abs(uv.x) * shrink;
  41.             COLOR = mix(first_color, second_color, shift);
  42.         }
  43.     }
  44. }
Tags: Godot Shader
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement