消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.8 KiB

1 week ago
#ifndef SHAPE_INCLUDE
#define SHAPE_INCLUDE
#include <builtin/uniforms/cc-global>
#include <./Lib/common>
float UniversalMask2D(vec2 uv, vec2 center, float intensity, float roundness, float smoothness) {
vec2 d = abs(uv - center) * intensity;
d = pow(saturate(d), vec2(roundness));
float dist = length(d);
float vfactor = pow(saturate(1.0 - dist * dist), smoothness);
return vfactor;
}
// 创建圆
float createCircle(vec2 uv, vec2 pos, float radius, float smoothness) {
float dis = distance(pos, uv);
dis = smoothstep(radius + smoothness, radius, dis);
return dis;
}
// 齿轮
float createGear(vec2 uv, vec2 pos, float scale) {
vec2 dir = pos - uv;
float radius = length(dir) * scale;
float angle = atan(dir.y, dir.x);
//造型函数
float f = smoothstep(-0.484, 1., cos(angle * 10.0)) * 0.080 + 0.372;
float dis = 1. - smoothstep(f, f + 0.02, radius);
return dis;
}
// 花瓣
float createPetal(vec2 uv, vec2 pos, float scale) {
vec2 dir = pos - uv;
float radius = length(dir) * scale;
float angle = atan2(dir.y, dir.x);
//造型函数
float f = abs(cos(angle * 2.5)) * .5 + .3;
float dis = 1. - smoothstep(f, f + 0.02, radius);
return dis;
}
// 水滴
float createWaterDrop(vec2 uv, vec2 pos, float scale) {
vec2 dir = pos - uv;
float radius = length(dir) * scale;
float angle = atan2(dir.y, dir.x);
//造型函数
float f = 1.0 - pow(abs(angle + -1.548), 2.416);
float dis = 1. - smoothstep(f, f + 0.02, radius);
return dis;
}
// 风车
float createWindmill(vec2 uv, vec2 pos, float scale) {
vec2 dir = pos - uv;
float radius = length(dir) * scale;
float angle = atan2(dir.y, dir.x);
float f = frac(angle * 1.273) * 0.956;
float dis = 1. - smoothstep(f, f + 0.02, radius);
return dis;
}
#endif