DFAO
This commit is contained in:
parent
bf474e9a3d
commit
d05665982e
|
@ -14,6 +14,9 @@ precision mediump float;
|
|||
#ifdef _VoxelGI
|
||||
#include "../std/conetrace.glsl"
|
||||
#endif
|
||||
#ifdef _DFAO
|
||||
#include "../std/sdf.glsl"
|
||||
#endif
|
||||
|
||||
uniform sampler2D gbufferD;
|
||||
uniform sampler2D gbuffer0;
|
||||
|
@ -41,6 +44,9 @@ uniform float envmapStrength;
|
|||
uniform vec3 eye;
|
||||
uniform vec3 eyeLook;
|
||||
#endif
|
||||
#ifdef _DFAO
|
||||
//!uniform sampler2D sdftex;
|
||||
#endif
|
||||
|
||||
in vec2 texCoord;
|
||||
#ifdef _Rad
|
||||
|
@ -131,7 +137,11 @@ void main() {
|
|||
#endif
|
||||
|
||||
#ifdef _SSAO
|
||||
envl.rgb *= texture(ssaotex, texCoord).r; // SSAO
|
||||
envl.rgb *= texture(ssaotex, texCoord).r;
|
||||
#endif
|
||||
|
||||
#ifdef _DFAO
|
||||
envl.rgb *= dfao(p, n);
|
||||
#endif
|
||||
|
||||
#ifdef _VoxelGI
|
||||
|
|
|
@ -44,6 +44,11 @@
|
|||
{
|
||||
"name": "envmapStrength",
|
||||
"link": "_envmapStrength"
|
||||
},
|
||||
{
|
||||
"name": "sdftex",
|
||||
"link": "_sdfTexture",
|
||||
"ifdef": ["_DFAO"]
|
||||
}
|
||||
],
|
||||
"vertex_shader": "deferred_indirect.vert.glsl",
|
||||
|
|
|
@ -156,7 +156,7 @@ void main() {
|
|||
const float distmax = 40.0;
|
||||
const float eps = 0.02;
|
||||
const int maxSteps = 30;
|
||||
float dist = 0.1;
|
||||
float dist = 0.2;
|
||||
|
||||
// float test = mapsdf2(p);
|
||||
// if (test < 0.1) {
|
||||
|
@ -207,7 +207,7 @@ void main() {
|
|||
// d = length((p + rd) - p3);
|
||||
}
|
||||
|
||||
const float k = 2.0;
|
||||
const float k = 1.0;
|
||||
visibility = min(visibility, (k * d / dist));
|
||||
dist += d;
|
||||
|
||||
|
|
|
@ -45,3 +45,30 @@ float sdBox(vec3 p, vec3 b) {
|
|||
vec3 d = abs(p) - b;
|
||||
return min(max(d.x, max(d.y, d.z)), 0.0) + length(max(d, 0.0));
|
||||
}
|
||||
|
||||
float dfao(const vec3 p, const vec3 n) {
|
||||
float occ = 0.0;
|
||||
float sca = 1.0;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
float r = 0.01 + 0.1 * float(i);
|
||||
vec3 rd = n * r;
|
||||
vec3 sp = rd + p;
|
||||
float d;
|
||||
if (sdBox(sp, vec3(1.0)) <= 0.0) {
|
||||
d = mapsdf(sp, rd);
|
||||
}
|
||||
else {
|
||||
vec3 sampleBorder = clamp(sp, vec3(-1.0), vec3(1.0));
|
||||
float phi = mapsdf2(sampleBorder, rd);
|
||||
float dd = 0.1;
|
||||
float grad_x = mapsdf2(sampleBorder + vec3(dd, 0, 0), rd) - phi;
|
||||
float grad_y = mapsdf2(sampleBorder + vec3(0, dd, 0), rd) - phi;
|
||||
vec3 grad = vec3(grad_x, grad_y, 1.0);
|
||||
vec3 endpoint = sampleBorder - normalize(grad) * phi;
|
||||
d = distance(endpoint, sp);
|
||||
}
|
||||
occ += (r - d) * sca;
|
||||
sca *= 0.85;
|
||||
}
|
||||
return clamp(1.0 - occ / (3.14), 0.0, 1.0);
|
||||
}
|
||||
|
|
|
@ -1934,7 +1934,7 @@ class ArmoryExporter:
|
|||
# Run
|
||||
krom_location, krom_path = arm.utils.krom_paths()
|
||||
krom_dir = sdfgen_path + '/krom'
|
||||
krom_res = sdfgen_path + '/krom-resources'
|
||||
krom_res = sdfgen_path + '/krom'
|
||||
subprocess.check_output([krom_path, krom_dir, krom_res, '--nosound', '--nowindow'])
|
||||
# Copy output
|
||||
sdf_path = fp.replace('/mesh_', '/sdf_')
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue