From 9a3459e7ba2c33376d9e705f751b1ac571509f92 Mon Sep 17 00:00:00 2001 From: yum Date: Thu, 24 Apr 2025 12:24:38 -0700 Subject: add cmyk warping planes gimmick to decals renders the decal 4 times one planes, and applies domain warping to each plane. Requires a 4-channel (RGBA) noise texture. --- math.cginc | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'math.cginc') diff --git a/math.cginc b/math.cginc index f2b64fa..8ada893 100644 --- a/math.cginc +++ b/math.cginc @@ -246,4 +246,41 @@ void calcNormalInScreenSpace(inout float3 normal, float3 objPos) { normal = normalize(cross(ddy(objPos), ddx(objPos))); } +// Formulae from here: https://www.rapidtables.com/convert/color/rgb-to-cmyk.html +float4 rgbToCmyk(float3 rgb) { + float4 cmyk; + cmyk[3] = 1 - max(rgb.r, max(rgb.g, rgb.b)); + cmyk[0] = (1 - rgb.r - cmyk[3]) / (1 - cmyk[3]); + cmyk[1] = (1 - rgb.g - cmyk[3]) / (1 - cmyk[3]); + cmyk[2] = (1 - rgb.b - cmyk[3]) / (1 - cmyk[3]); + return cmyk; +} + +float rgbToCmyk_C(float3 rgb) { + float k = 1 - max(rgb.r, max(rgb.g, rgb.b)); + float c = (1 - rgb.r - k) / (1 - k); + return c; +} +float rgbToCmyk_M(float3 rgb) { + float k = 1 - max(rgb.r, max(rgb.g, rgb.b)); + float m = (1 - rgb.g - k) / (1 - k); + return m; +} +float rgbToCmyk_Y(float3 rgb) { + float k = 1 - max(rgb.r, max(rgb.g, rgb.b)); + float y = (1 - rgb.b - k) / (1 - k); + return y; +} +float rgbToCmyk_K(float3 rgb) { + float k = 1 - max(rgb.r, max(rgb.g, rgb.b)); + return k; +} + +float3 cmykToRgb(float4 cmyk) { + return float3( + (1 - cmyk[0]) * (1 - cmyk[3]), + (1 - cmyk[1]) * (1 - cmyk[3]), + (1 - cmyk[2]) * (1 - cmyk[3])); +} + #endif // __MATH_INC -- cgit v1.2.3