CCEffect %{
techniques:
- name: opaque
passes:
- vert: unlit-vs:vert
frag: unlit-fs:frag
properties: &props
mainTexture: { value: white }
mainColor: { value: [1, 1, 1, 1], editor: { type: color } }
textureSize: { value: [1280, 720] }
blurSize: { value: 8.0 }
luminancethreshold: { value: 0.5 }
- name: transparent
passes:
- vert: unlit-vs:vert
frag: unlit-fs:frag
blendState:
targets:
- blend: true
blendSrc: src_alpha
blendDst: one_minus_src_alpha
blendSrcAlpha: src_alpha
blendDstAlpha: one_minus_src_alpha
properties: *props
}%
CCProgram unlit-vs %{
precision highp float;
#include <legacy/input>
#include <builtin/uniforms/cc-global>
#include <legacy/decode-base>
#include <legacy/local-batch>
#include <legacy/input>
#include <legacy/fog-vs>
in vec2 a_color;
out vec3 v_position;
out vec3 v_normal;
out vec2 v_uv;
out vec2 v_uv0;
out vec2 v_uv1;
out vec2 v_uv2;
out vec2 v_uv3;
out vec2 v_uv4;
out vec2 v_uv5;
out vec2 v_uv6;
out vec2 v_uv7;
out vec2 v_uv8;
out vec4 v_color;
uniform cData {
vec2 textureSize;
float blurSize;
};
//
vec4 vert() {
vec4 position;
CCVertInput(position);
mat4 matWorld, matWorldIT;
CCGetWorldMatrixFull(matWorld, matWorldIT);
vec4 pos = matWorld * position;
v_position = pos.xyz;
v_normal = normalize((matWorldIT * vec4(a_normal, 0.0)).xyz);
v_uv = a_texCoord;
vec2 pixelSize = blurSize * 1.0 / textureSize;
v_uv0 = v_uv + pixelSize * vec2(-1.0, 1.0);
v_uv1 = v_uv + pixelSize * vec2(0.0, 1.0);
v_uv2 = v_uv + pixelSize * vec2(1.0, 1.0);
v_uv3 = v_uv + pixelSize * vec2(-1.0, 0.0);
v_uv4 = v_uv + pixelSize * vec2(0.0, 1.0);
v_uv5 = v_uv + pixelSize * vec2(1.0, 1.0);
v_uv6 = v_uv + pixelSize * vec2(-1.0, - 1.0);
v_uv7 = v_uv + pixelSize * vec2(0.0, - 1.0);
v_uv8 = v_uv + pixelSize * vec2(1.0, - 1.0);
//
return cc_matProj * (cc_matView * matWorld) * position;
}
}%
CCProgram unlit-fs %{
precision highp float;
#include <legacy/output>
#include <legacy/fog-fs>
in vec2 v_uv;
in vec3 v_position;
in vec4 v_color;
in vec2 v_uv0;
in vec2 v_uv1;
in vec2 v_uv2;
in vec2 v_uv3;
in vec2 v_uv4;
in vec2 v_uv5;
in vec2 v_uv6;
in vec2 v_uv7;
in vec2 v_uv8;
uniform sampler2D mainTexture;
uniform sampler2D myTexture;
uniform Constant {
vec4 mainColor;
float luminancethreshold;
};
float getLuminance(vec4 color) {
return 0.2125 * color.r + 0.7154 * color.g + 0.0721 * color.b;
}
vec4 frag() {
// vec4 color0 = texture(mainTexture, v_uv0);
// vec4 color1 = texture(mainTexture, v_uv1);
// vec4 color2 = texture(mainTexture, v_uv2);
// vec4 color3 = texture(mainTexture, v_uv3);
//vec4 color4 = texture(mainTexture, v_uv4);
// vec4 color5 = texture(mainTexture, v_uv5);
// vec4 color6 = texture(mainTexture, v_uv6);
// vec4 color7 = texture(mainTexture, v_uv7);
// vec4 color8 = texture(mainTexture, v_uv8);
// vec4 c = color0 + color1 + color2 + color3 + color4 + color5 + color6 + color7 + color8;
// c = c / 9.0; //均值模糊,使用高斯滤波就是高斯模糊(就是权重不一样,均值模糊9个点的权重一样)
// return CCFragOutput©;
vec4 color4 = texture(mainTexture, v_uv4);
float luminance = getLuminance(color4);
if (luminance > luminancethreshold) {
return CCFragOutput(vec4(1.0, 1.0, 1.0, 1.0));
}
else {
return CCFragOutput(color4);
}
}
}%