pubgv3/assets/scripts/shaders/FluxaySuper.js
zhuguoqing c21cd97580 udpate
2022-05-26 14:48:21 +08:00

171 lines
5.7 KiB
JavaScript

const renderEngine = cc.renderer.renderEngine;
const renderer = renderEngine.renderer;
let ShaderMaterial = require('ShaderMaterial');
const shader = {
name: 'FluxaySuper',
params: [
{ name: 'time', type: renderer.PARAM_FLOAT },
{ name: 'coloraddr', type: renderer.PARAM_FLOAT },
{ name: 'coloraddg', type: renderer.PARAM_FLOAT },
{ name: 'coloraddb', type: renderer.PARAM_FLOAT },
{ name: 'palpha', type: renderer.PARAM_FLOAT },
{ name: 'blackv', type: renderer.PARAM_FLOAT },
],
start(material,params) {
material.cusparmas = {}
material.cusparmas._start = 0
material.setParamValue('coloraddr', params.r);
material.setParamValue('coloraddg', params.g);
material.setParamValue('coloraddb', params.b);
material.setParamValue('palpha', 1.0);
material.setParamValue('blackv', 1.0);
},
update(material, dt) {
material.cusparmas._start+=dt
material.setParamValue('time', material.cusparmas._start);
},
defines:[],
// vert: `
// uniform mat4 viewProj;
// attribute vec3 a_position;
// attribute vec2 a_uv0;
// varying vec2 uv0;
// void main () {
// vec4 pos = viewProj * vec4(a_position, 1);
// gl_Position = pos;
// uv0 = a_uv0;
// }`,
vert:ShaderMaterial.spinevert,
// frag:
// `#define TAU 6.12
// #define MAX_ITER 5
// uniform sampler2D texture;
// uniform vec4 color;
// uniform float time;
// uniform float coloraddr;
// uniform float coloraddg;
// uniform float coloraddb;
// uniform float blackv;
// varying vec2 uv0;
// uniform vec4 UVoffset;
// uniform float rotated;
// uniform float palpha;
// void main()
// {
// float time = time * .5+5.;
// // uv should be the 0-1 uv of texture...
// vec2 UVnormalize;
// UVnormalize.x = (uv0.x-UVoffset.x)/(UVoffset.z-UVoffset.x);
// UVnormalize.y = (uv0.y-UVoffset.y)/(UVoffset.w-UVoffset.y);
// if(rotated > 0.5)
// {
// float temp = UVnormalize.x;
// UVnormalize.x = UVnormalize.y;
// UVnormalize.y = 1.0 - temp;
// }
// vec2 uv = UVnormalize.xy;//fragCoord.xy / iResolution.xy;
// vec2 p = mod(uv*TAU, TAU)-250.0;
// vec2 i = vec2(p);
// float c = 1.0;
// float inten = .0045;
// for (int n = 0; n < MAX_ITER; n++)
// {
// float t = time * (1.0 - (3.5 / float(n+1)));
// i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(1.5*t + i.x));
// c += 1.0/length(vec2(p.x / (cos(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));
// }
// c /= float(MAX_ITER);
// c = 1.17-pow(c, 1.8);
// vec4 tex = texture2D(texture,uv0);
// vec3 colour = vec3(pow(abs(c), 20.0));
// colour = clamp(colour + vec3(0.0, 0.0, .0), 0.0, tex.a);
//
// float alpha = c*tex[3];
// tex[0] = tex[0]*blackv + colour[0]*coloraddr*alpha;
// tex[1] = tex[1]*blackv + colour[1]*coloraddg*alpha;
// tex[2] = tex[2]*blackv + colour[2]*coloraddb*alpha;
// gl_FragColor = tex;
// gl_FragColor.a = gl_FragColor.a*palpha;
// }`,
frag:`
#define TAU 6.12
#define MAX_ITER 5
uniform sampler2D texture;
varying mediump vec2 uv0;
#ifdef alphaTest
uniform lowp float alphaThreshold;
#endif
varying lowp vec4 v_light;
#ifdef useTint
varying lowp vec4 v_dark;
#endif
uniform float coloraddr;
uniform float coloraddg;
uniform float coloraddb;
uniform float blackv;
uniform float palpha;
uniform float time;
void main () {
vec4 texColor = texture2D(texture, uv0);
vec4 finalColor;
#ifdef useTint
finalColor.a = v_light.a * texColor.a;
finalColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;
#else
finalColor = texColor * v_light;
#endif
#ifdef alphaTest
if (finalColor.a <= alphaThreshold)
discard;
#endif
vec2 p = mod(uv0*TAU, TAU)-250.0;
vec2 i = vec2(p);
float c = 1.0;
float inten = .0045;
for (int n = 0; n < MAX_ITER; n++)
{
float t = time * (1.0 - (3.5 / float(n+1)));
i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(1.5*t + i.x));
c += 1.0/length(vec2(p.x / (cos(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));
}
c /= float(MAX_ITER);
c = 1.17-pow(c, 1.8);
vec3 colour = vec3(pow(abs(c), 20.0));
colour = clamp(colour + vec3(0.0, 0.0, .0), 0.0, finalColor.a);
float alpha = c*finalColor[3];
finalColor[0] = finalColor[0]*blackv + colour[0]*coloraddr*alpha;
finalColor[1] = finalColor[1]*blackv + colour[1]*coloraddg*alpha;
finalColor[2] = finalColor[2]*blackv + colour[2]*coloraddb*alpha;
gl_FragColor = finalColor;
}
`
};
ShaderMaterial.addShader(shader);