Restructured shaderlib by moving functions and renaming files
This commit is contained in:
parent
c70eaed0c4
commit
40374bd849
10 changed files with 53 additions and 49 deletions
|
@ -80,12 +80,15 @@ Here is an example:
|
||||||
```glsl
|
```glsl
|
||||||
shader_type canvas_item;
|
shader_type canvas_item;
|
||||||
|
|
||||||
#include "res://shaderlib/hsv.gdshaderinc"
|
#include "res://shaderlib/oklab.gdshaderinc"
|
||||||
|
|
||||||
//!load ./examples/images/swamp.jpg
|
//!load ./images/swamp.jpg
|
||||||
|
|
||||||
void fragment() {
|
void fragment() {
|
||||||
COLOR = hsv_offset(COLOR, 0.32, 0.2, 0.0);
|
vec4 oklab = rgb2oklab(COLOR);
|
||||||
|
vec4 oklch = oklab2oklch(oklab);
|
||||||
|
oklch.z -= 2.0;
|
||||||
|
COLOR = oklab2rgb(oklch2oklab(oklch));
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
shader_type canvas_item;
|
shader_type canvas_item;
|
||||||
|
|
||||||
#include "res://shaderlib/colorspaces.gdshaderinc"
|
#include "res://shaderlib/hsv.gdshaderinc"
|
||||||
#include "res://shaderlib/effects.gdshaderinc"
|
#include "res://shaderlib/pixelate.gdshaderinc"
|
||||||
|
|
||||||
//!load ./images/swamp.jpg
|
//!load ./images/swamp.jpg
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
shader_type canvas_item;
|
shader_type canvas_item;
|
||||||
|
|
||||||
#include "res://shaderlib/colorspaces.gdshaderinc"
|
#include "res://shaderlib/oklab.gdshaderinc"
|
||||||
|
|
||||||
//!load ./images/swamp.jpg
|
//!load ./images/swamp.jpg
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
shader_type canvas_item;
|
shader_type canvas_item;
|
||||||
|
|
||||||
#include "res://shaderlib/transform.gdshaderinc"
|
#include "res://shaderlib/place_texture.gdshaderinc"
|
||||||
#include "res://shaderlib/transparency.gdshaderinc"
|
#include "res://shaderlib/common.gdshaderinc"
|
||||||
|
|
||||||
//!load ./images/swamp.jpg
|
//!load ./images/swamp.jpg
|
||||||
//!load+ img2 ./images/grass.png
|
//!load+ img2 ./images/grass.png
|
||||||
|
|
|
@ -3,3 +3,13 @@
|
||||||
float cbrt(float x) {
|
float cbrt(float x) {
|
||||||
return pow(x, 1.0/3.0);
|
return pow(x, 1.0/3.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Alpha Blending a over b after Bruce A. Wallace
|
||||||
|
source: https://en.wikipedia.org/wiki/Alpha_compositing
|
||||||
|
*/
|
||||||
|
vec4 alpha_blend(vec4 b, vec4 a) {
|
||||||
|
float alpha = a.a + (b.a * (1.0 - a.a));
|
||||||
|
vec3 col = ((a.rgb*a.a) + ((b.rgb*b.a) * (1.0 - a.a)) / alpha);
|
||||||
|
return vec4(col.r, col.g, col.b, alpha);
|
||||||
|
}
|
||||||
|
|
27
shaderlib/hsv.gdshaderinc
Normal file
27
shaderlib/hsv.gdshaderinc
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
rgb2hsv and hsv2rgb functions adapted
|
||||||
|
from https://godotshaders.com/shader/hsv-adjustment/
|
||||||
|
original code by https://godotshaders.com/author/al1-ce/
|
||||||
|
|
||||||
|
Color space conversion functions always work with vec4.
|
||||||
|
The fourth value is always alpha.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Convert RGB to HSV (hue, saturation, brightness)
|
||||||
|
vec4 rgb2hsv(vec4 c) {
|
||||||
|
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
|
||||||
|
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
|
||||||
|
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
|
||||||
|
float d = q.x - min(q.w, q.y);
|
||||||
|
float e = 1.0e-10;
|
||||||
|
return vec4(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x, c.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert HSV back to RGB (red, green, blue)
|
||||||
|
vec4 hsv2rgb(vec4 c) {
|
||||||
|
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
||||||
|
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
||||||
|
vec3 rgb = c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
||||||
|
return vec4(rgb.r, rgb.g, rgb.b, c.a);
|
||||||
|
}
|
|
@ -1,42 +1,16 @@
|
||||||
|
|
||||||
/*
|
|
||||||
Color space conversion functions always work with vec4.
|
|
||||||
The fourth value is always alpha.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "res://shaderlib/common.gdshaderinc"
|
|
||||||
|
|
||||||
/*
|
|
||||||
rgb2hsv and hsv2rgb functions adapted
|
|
||||||
from https://godotshaders.com/shader/hsv-adjustment/
|
|
||||||
original code by https://godotshaders.com/author/al1-ce/
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Convert RGB to HSV (hue, saturation, brightness)
|
|
||||||
vec4 rgb2hsv(vec4 c) {
|
|
||||||
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
|
|
||||||
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
|
|
||||||
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
|
|
||||||
float d = q.x - min(q.w, q.y);
|
|
||||||
float e = 1.0e-10;
|
|
||||||
return vec4(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x, c.a);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert HSV back to RGB (red, green, blue)
|
|
||||||
vec4 hsv2rgb(vec4 c) {
|
|
||||||
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
|
||||||
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
|
||||||
vec3 rgb = c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
|
||||||
return vec4(rgb.r, rgb.g, rgb.b, c.a);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
OkLab and OkLCh
|
OkLab and OkLCh
|
||||||
For more details on oklab, see
|
For more details on oklab, see
|
||||||
- https://bottosson.github.io/posts/oklab/
|
- https://bottosson.github.io/posts/oklab/
|
||||||
- https://en.wikipedia.org/wiki/Oklab_color_space
|
- https://en.wikipedia.org/wiki/Oklab_color_space
|
||||||
|
|
||||||
|
Color space conversion functions always work with vec4.
|
||||||
|
The fourth value is always alpha.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "res://shaderlib/common.gdshaderinc"
|
||||||
|
|
||||||
vec4 rgb2oklab(vec4 c) {
|
vec4 rgb2oklab(vec4 c) {
|
||||||
float l = 0.4122214708f * c.r + 0.5363325363f * c.g + 0.0514459929f * c.b;
|
float l = 0.4122214708f * c.r + 0.5363325363f * c.g + 0.0514459929f * c.b;
|
||||||
float m = 0.2119034982f * c.r + 0.6806995451f * c.g + 0.1073969566f * c.b;
|
float m = 0.2119034982f * c.r + 0.6806995451f * c.g + 0.1073969566f * c.b;
|
|
@ -1,10 +0,0 @@
|
||||||
|
|
||||||
/*
|
|
||||||
Alpha Blending a over b after Bruce A. Wallace
|
|
||||||
source: https://en.wikipedia.org/wiki/Alpha_compositing
|
|
||||||
*/
|
|
||||||
vec4 alpha_blend(vec4 b, vec4 a) {
|
|
||||||
float alpha = a.a + (b.a * (1.0 - a.a));
|
|
||||||
vec3 col = ((a.rgb*a.a) + ((b.rgb*b.a) * (1.0 - a.a)) / alpha);
|
|
||||||
return vec4(col.r, col.g, col.b, alpha);
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue