material-maker/material_maker/windows/sdf_builder/preview_2d.shader

97 lines
3.0 KiB
GLSL

shader_type canvas_item;
render_mode blend_disabled;
uniform int view_style = VIEW_STYLE;
varying float elapsed_time;
float dot2(vec2 x) {
return dot(x, x);
}
float rand(vec2 x) {
return fract(cos(mod(dot(x, vec2(13.9898, 8.141)), 3.14)) * 43758.5453);
}
vec2 rand2(vec2 x) {
return fract(cos(mod(vec2(dot(x, vec2(13.9898, 8.141)),
dot(x, vec2(3.4562, 17.398))), vec2(3.14))) * 43758.5453);
}
vec3 rand3(vec2 x) {
return fract(cos(mod(vec3(dot(x, vec2(13.9898, 8.141)),
dot(x, vec2(3.4562, 17.398)),
dot(x, vec2(13.254, 5.867))), vec3(3.14))) * 43758.5453);
}
vec3 rgb2hsv(vec3 c) {
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
vec4 p = c.g < c.b ? vec4(c.bg, K.wz) : vec4(c.gb, K.xy);
vec4 q = c.r < p.x ? vec4(p.xyw, c.r) : vec4(c.r, p.yzx);
float d = q.x - min(q.w, q.y);
float e = 1.0e-10;
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
}
vec3 hsv2rgb(vec3 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);
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
}
GENERATED_GLOBALS
GENERATED_INSTANCE
uniform vec2 preview_2d_size = vec2(100.0);
uniform float preview_2d_scale = 1.2;
uniform vec2 preview_2d_center = vec2(0.5);
uniform vec4 background_color_1 = vec4(0.0);
uniform vec4 background_color_2 = vec4(1.0);
float sstep(float v1, float v2) {
float edgewidth = 0.002*preview_2d_scale;
return smoothstep(v1-edgewidth, v1+edgewidth, v2);
}
void fragment() {
float _seed_variation_ = 0.0;
vec2 ratio = preview_2d_size;
vec2 uv = preview_2d_center-vec2(0.5)+(UV-0.5)*preview_2d_scale*ratio/min(ratio.x, ratio.y);
GENERATED_CODE
float edgewidth = 0.0001;
float d = -DIST_FCT(uv, 0, _seed_variation_);
float d2 = -DIST_FCT(uv, int(round(INDEX_UNIFORM)), _seed_variation_);
float d3 = -DIST_FCT(uv, -int(round(INDEX_UNIFORM)), _seed_variation_);
float color = 0.5*sstep(0.0, d);
color += sstep(abs(d2), 0.002*preview_2d_scale);
color += sstep(abs(d3), 0.003*preview_2d_scale);
color += 0.05*sin(d*251.327412287);
vec4 albedo;
float metallic;
float roughness;
vec3 emission;
COLOR_FCT(uv, albedo, metallic, roughness, emission, _seed_variation_);
vec4 image;
if (view_style == 0) {
image = clamp(albedo+vec4(vec3(clamp(color, 0.0, 1.0)), 1.0), vec4(0.0), vec4(1.0));
} else if (view_style == 1) {
image = clamp(vec4(vec3(clamp(color, 0.0, 1.0)), 1.0), vec4(0.0), vec4(1.0));
} else if (view_style == 2) {
image = clamp(albedo, vec4(0.0), vec4(1.0));
} else if (view_style == 3) {
image = clamp(vec4(vec3(metallic), 1.0), vec4(0.0), vec4(1.0));
} else if (view_style == 4) {
image = clamp(vec4(vec3(roughness), 1.0), vec4(0.0), vec4(1.0));
} else if (view_style == 5) {
image = clamp(vec4(emission, 1.0), vec4(0.0), vec4(1.0));
}
float checkerboard = mod(floor(uv.x*32.0)+floor(uv.y*32.0), 2.0);
vec3 image_with_background = mix(mix(background_color_1, background_color_2, checkerboard).rgb, image.rgb, image.a);
COLOR = vec4(image_with_background, 1.0);
}