Zunesha

Shader Pallet Swap Godot 4 (ColorRect)

Sep 11th, 2024 (edited)
976
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
GDScript 1.59 KB | Gaming | 0 0
  1. Shader Pallet Swap  Godot 4 (ColorRect)
  2.  
  3. shader_type canvas_item;
  4.  
  5. uniform vec4 color_white_like : source_color = vec4(0.820, 0.846, 0.705, 1.0); // tom mais claro (quase branco)
  6. uniform vec4 color_light     : source_color = vec4(0.538, 0.559, 0.458, 1.0); // claro
  7. uniform vec4 color_mid       : source_color = vec4(0.383, 0.403, 0.314, 1.0); // médio
  8. uniform vec4 color_dark      : source_color = vec4(0.258, 0.272, 0.214, 1.0); // escuro
  9. uniform vec4 color_near_black: source_color = vec4(0.124, 0.125, 0.121, 1.0); // quase preto
  10.  
  11. uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
  12.  
  13. float min5(float a, float b, float c, float d, float e){
  14.     return min(a, min(b, min(c, min(d, e))));
  15. }
  16.  
  17. void fragment(){
  18.     vec4 currentColor = texture(SCREEN_TEXTURE, SCREEN_UV);
  19.    
  20.     // Referência em tons de cinza (usamos 5 níveis de luminância como base)
  21.     float d_white = distance(currentColor, vec4(vec3(1.0), 1.0));   // mais claro (branco)
  22.     float d_light = distance(currentColor, vec4(vec3(0.75), 1.0));  // claro
  23.     float d_mid   = distance(currentColor, vec4(vec3(0.50), 1.0));  // médio
  24.     float d_dark  = distance(currentColor, vec4(vec3(0.25), 1.0));  // escuro
  25.     float d_black = distance(currentColor, vec4(vec3(0.0), 1.0));   // preto
  26.  
  27.     float m = min5(d_white, d_light, d_mid, d_dark, d_black);
  28.  
  29.     if (m == d_white)      COLOR = color_white_like;
  30.     else if (m == d_light) COLOR = color_light;
  31.     else if (m == d_mid)   COLOR = color_mid;
  32.     else if (m == d_dark)  COLOR = color_dark;
  33.     else                   COLOR = color_near_black;
  34. }
Advertisement
Add Comment
Please, Sign In to add comment