slang-shaders/include/img/film_grain.h
2020-04-28 22:37:24 -05:00

28 lines
1.1 KiB
C

#ifndef FILM_GRAIN
#define FILM_GRAIN
#pragma parameter ia_GRAIN_STR "Grain Strength" 0.0 0.0 72.0 3.0
#include "col_tools.h"
//https://www.shadertoy.com/view/4sXSWs strength= 16.0
vec3 rgb_grain(vec2 uv, float strength, uint counter){
float x = ((uv.x + 4.0 ) * (uv.y + 5.0 ) * ((mod(vec2(counter, counter).x, 800.0) + 10.0) * 8.0));
float y = ((uv.x + 5.0 ) * (uv.y + 6.0 ) * ((mod(vec2(counter, counter).x, 678.0) + 8.0) * 6.0));
float z = ((uv.x + 6.0 ) * (uv.y + 4.0 ) * ((mod(vec2(counter, counter).x, 498.0) + 6.0) * 10.0));
float r = (mod((mod(x, 13.0) + 1.0) * (mod(x, 123.0) + 1.0), 0.01)-0.005);
float g = (mod((mod(y, 13.0) + 1.0) * (mod(y, 123.0) + 1.0), 0.01)-0.005);
float b = (mod((mod(z, 13.0) + 1.0) * (mod(z, 123.0) + 1.0), 0.01)-0.005);
return vec3(r, g, b) * strength;
}
vec3 luma_grain(vec3 in_col, vec2 uv, float strength, uint counter){
float x = (uv.x + 4.0 ) * (uv.y + 4.0 ) * ((mod(vec2(counter, counter).x, 800.0) + 10.0) * 10.0);
x = (mod((mod(x, 13.0) + 1.0) * (mod(x, 123.0) + 1.0), 0.01)-0.005) * strength;
vec3 out_col = RGBtoYIQ(in_col);
out_col.r += x;
return YIQtoRGB(out_col);
}
#endif