|
@@ -4,7 +4,9 @@ class Blur extends ScreenShader {
|
|
|
|
|
|
static var SRC = {
|
|
static var SRC = {
|
|
|
|
|
|
- @param var cameraInverseViewProj : Mat4;
|
|
|
|
|
|
+ @global var camera : {
|
|
|
|
+ var inverseViewProj : Mat4;
|
|
|
|
+ };
|
|
|
|
|
|
@param var texture : Sampler2D;
|
|
@param var texture : Sampler2D;
|
|
@param var depthTexture : Sampler2D;
|
|
@param var depthTexture : Sampler2D;
|
|
@@ -19,8 +21,7 @@ class Blur extends ScreenShader {
|
|
@param var fixedColor : Vec4;
|
|
@param var fixedColor : Vec4;
|
|
|
|
|
|
@param @const var isDepthDependant : Bool;
|
|
@param @const var isDepthDependant : Bool;
|
|
- @param @const var hasNormal : Bool;
|
|
|
|
- @param var normalTexture : Sampler2D;
|
|
|
|
|
|
+ @param var depthThreshold : Float = 1.0;
|
|
|
|
|
|
@param @const var isCube : Bool;
|
|
@param @const var isCube : Bool;
|
|
@param var cubeTexture : SamplerCube;
|
|
@param var cubeTexture : SamplerCube;
|
|
@@ -31,16 +32,13 @@ class Blur extends ScreenShader {
|
|
var pcur = getPosition(input.uv);
|
|
var pcur = getPosition(input.uv);
|
|
var ccur = texture.get(input.uv);
|
|
var ccur = texture.get(input.uv);
|
|
var color = vec4(0, 0, 0, 0);
|
|
var color = vec4(0, 0, 0, 0);
|
|
- var ncur = unpackNormal(normalTexture.get(input.uv));
|
|
|
|
@unroll for( i in -Quality + 1...Quality ) {
|
|
@unroll for( i in -Quality + 1...Quality ) {
|
|
- var uv = input.uv + pixel * offsets[i < 0 ? -i : i];
|
|
|
|
|
|
+ var uv = input.uv + pixel * offsets[i < 0 ? -i : i] * i;
|
|
var c = texture.get(uv);
|
|
var c = texture.get(uv);
|
|
var p = getPosition(uv);
|
|
var p = getPosition(uv);
|
|
- var d = (p - pcur).dot(p - pcur);
|
|
|
|
- var n = unpackNormal(normalTexture.get(uv));
|
|
|
|
|
|
+ var d = abs(pcur.z - p.z);
|
|
|
|
|
|
- c = mix(ccur, c, ncur.dot(n));
|
|
|
|
- c = mix(c, ccur, ((d - 0.001).max(0.) * 100000).min(1.));
|
|
|
|
|
|
+ c = ( d > depthThreshold ) ? ccur : c;
|
|
color += c * values[i < 0 ? -i : i];
|
|
color += c * values[i < 0 ? -i : i];
|
|
}
|
|
}
|
|
pixelColor = color;
|
|
pixelColor = color;
|
|
@@ -71,7 +69,7 @@ class Blur extends ScreenShader {
|
|
|
|
|
|
function getPosition( uv : Vec2 ) : Vec3 {
|
|
function getPosition( uv : Vec2 ) : Vec3 {
|
|
var depth = unpack(depthTexture.get(uv));
|
|
var depth = unpack(depthTexture.get(uv));
|
|
- var temp = vec4(uvToScreen(uv), depth, 1) * cameraInverseViewProj;
|
|
|
|
|
|
+ var temp = vec4(uvToScreen(uv), depth, 1) * camera.inverseViewProj;
|
|
var originWS = temp.xyz / temp.w;
|
|
var originWS = temp.xyz / temp.w;
|
|
return originWS;
|
|
return originWS;
|
|
}
|
|
}
|