Apply reflection plane
This commit is contained in:
parent
dfa834a70b
commit
fe9fa0eea9
|
@ -14,7 +14,7 @@
|
|||
"alpha_blend_operation": "add",
|
||||
"links": [
|
||||
{
|
||||
"name": "LVWVP",
|
||||
"name": "VWVP",
|
||||
"link": "_lightVolumeWorldViewProjectionMatrix"
|
||||
},
|
||||
{
|
||||
|
@ -117,7 +117,7 @@
|
|||
"ifdef": ["_DFRS"]
|
||||
}
|
||||
],
|
||||
"vertex_shader": "../include/pass_light_volume.vert.glsl",
|
||||
"vertex_shader": "../include/pass_volume.vert.glsl",
|
||||
"fragment_shader": "deferred_light.frag.glsl"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
#version 450
|
||||
|
||||
uniform mat4 LVWVP;
|
||||
uniform mat4 VWVP;
|
||||
|
||||
in vec3 pos;
|
||||
|
||||
out vec4 wvpposition;
|
||||
|
||||
void main() {
|
||||
wvpposition = LVWVP * vec4(pos, 1.0);
|
||||
wvpposition = VWVP * vec4(pos, 1.0);
|
||||
gl_Position = wvpposition;
|
||||
}
|
|
@ -3,17 +3,12 @@
|
|||
#include "compiled.inc"
|
||||
#include "std/gbuffer.glsl"
|
||||
|
||||
uniform sampler2D tex;
|
||||
|
||||
// // uniform sampler2D gbufferD;
|
||||
// uniform sampler2D gbuffer0;
|
||||
// uniform sampler2D gbuffer1;
|
||||
// #ifdef _gbuffer2direct
|
||||
// uniform sampler2D gbuffer2;
|
||||
// #endif
|
||||
|
||||
// uniform mat4 invVP;
|
||||
// uniform vec3 eye;
|
||||
uniform sampler2D planeTex;
|
||||
uniform sampler2D gbuffer0;
|
||||
uniform sampler2D gbuffer1;
|
||||
uniform mat4 probeVP;
|
||||
uniform mat4 invVP;
|
||||
uniform vec3 proben;
|
||||
|
||||
in vec4 wvpposition;
|
||||
out vec4 fragColor;
|
||||
|
@ -25,16 +20,31 @@ void main() {
|
|||
texCoord.y = 1.0 - texCoord.y;
|
||||
#endif
|
||||
|
||||
fragColor.rgb = texture(tex, texCoord).rgb;
|
||||
vec4 g0 = texture(gbuffer0, texCoord); // Normal.xy, metallic/roughness, depth
|
||||
|
||||
// vec4 g0 = texture(gbuffer0, texCoord); // Normal.xy, metallic/roughness, depth
|
||||
// vec4 g1 = texture(gbuffer1, texCoord); // Basecolor.rgb, spec/occ
|
||||
// float depth = (1.0 - g0.a) * 2.0 - 1.0;
|
||||
// vec3 n;
|
||||
// n.z = 1.0 - abs(g0.x) - abs(g0.y);
|
||||
// n.xy = n.z >= 0.0 ? g0.xy : octahedronWrap(g0.xy);
|
||||
// n = normalize(n);
|
||||
// vec3 p = getPos2(invVP, depth, texCoord);
|
||||
// vec2 metrough = unpackFloat(g0.b);
|
||||
// vec3 v = normalize(eye - p);
|
||||
float roughness = unpackFloat(g0.b).y;
|
||||
if (roughness > 0.95) {
|
||||
fragColor.rgb = vec3(0.0);
|
||||
return;
|
||||
}
|
||||
|
||||
float spec = fract(texture(gbuffer1, texCoord).a);
|
||||
if (spec == 0.0) {
|
||||
fragColor.rgb = vec3(0.0);
|
||||
return;
|
||||
}
|
||||
|
||||
float depth = (1.0 - g0.a) * 2.0 - 1.0;
|
||||
vec3 wp = getPos2(invVP, depth, texCoord);
|
||||
vec4 pp = probeVP * vec4(wp.xyz, 1.0);
|
||||
vec2 tc = (pp.xy / pp.w) * 0.5 + 0.5;
|
||||
|
||||
vec2 enc = g0.rg;
|
||||
vec3 n;
|
||||
n.z = 1.0 - abs(enc.x) - abs(enc.y);
|
||||
n.xy = n.z >= 0.0 ? enc.xy : octahedronWrap(enc.xy);
|
||||
n = normalize(n);
|
||||
|
||||
float intensity = clamp((1.0 - roughness) * dot(n, proben), 0.0, 1.0);
|
||||
fragColor.rgb = texture(planeTex, tc).rgb * intensity;
|
||||
}
|
||||
|
|
|
@ -14,19 +14,23 @@
|
|||
"alpha_blend_operation": "add",
|
||||
"links": [
|
||||
{
|
||||
"name": "LVWVP",
|
||||
"name": "VWVP",
|
||||
"link": "_worldViewProjectionMatrix"
|
||||
},
|
||||
{
|
||||
"name": "eye",
|
||||
"link": "_cameraPosition"
|
||||
},
|
||||
{
|
||||
"name": "invVP",
|
||||
"link": "_inverseViewProjectionMatrix"
|
||||
},
|
||||
{
|
||||
"name": "probeVP",
|
||||
"link": "_probeViewProjectionMatrix"
|
||||
},
|
||||
{
|
||||
"name": "proben",
|
||||
"link": "_probeNormal"
|
||||
}
|
||||
],
|
||||
"vertex_shader": "../include/pass_light_volume.vert.glsl",
|
||||
"vertex_shader": "../include/pass_volume.vert.glsl",
|
||||
"fragment_shader": "probe_planar.frag.glsl"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"cull_mode": "counter_clockwise",
|
||||
"links": [
|
||||
{
|
||||
"name": "LVWVP",
|
||||
"name": "VWVP",
|
||||
"link": "_lightVolumeWorldViewProjectionMatrix"
|
||||
},
|
||||
{
|
||||
|
@ -52,7 +52,7 @@
|
|||
}
|
||||
],
|
||||
"texture_params": [],
|
||||
"vertex_shader": "../include/pass_light_volume.vert.glsl",
|
||||
"vertex_shader": "../include/pass_volume.vert.glsl",
|
||||
"fragment_shader": "volumetric_light.frag.glsl"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -595,20 +595,20 @@ class RenderPathDeferred {
|
|||
path.drawShader("shader_datas/deferred_indirect/deferred_indirect");
|
||||
}
|
||||
|
||||
var isProbe = iron.Scene.active.camera.renderTarget != null;
|
||||
#if rp_probes
|
||||
if (iron.Scene.active.camera.renderTarget == null) {
|
||||
|
||||
// path.bindTarget("_main", "gbufferD");
|
||||
// path.bindTarget("gbuffer0", "gbuffer0");
|
||||
// path.bindTarget("gbuffer1", "gbuffer1");
|
||||
// #if rp_gbuffer2_direct
|
||||
// path.bindTarget("gbuffer2", "gbuffer2");
|
||||
// #end
|
||||
|
||||
if (!isProbe) {
|
||||
// TODO: cull
|
||||
for (p in iron.Scene.active.probes) {
|
||||
var probes = iron.Scene.active.probes;
|
||||
for (i in 0...probes.length) {
|
||||
var p = probes[i];
|
||||
if (!p.visible) continue;
|
||||
path.currentProbeIndex = i;
|
||||
|
||||
path.setTarget("tex");
|
||||
path.bindTarget(p.raw.name, "tex");
|
||||
path.bindTarget("gbuffer0", "gbuffer0");
|
||||
path.bindTarget("gbuffer1", "gbuffer1");
|
||||
path.bindTarget(p.raw.name, "planeTex");
|
||||
path.drawVolume(p, "shader_datas/probe_planar/probe_planar");
|
||||
}
|
||||
}
|
||||
|
@ -905,7 +905,7 @@ class RenderPathDeferred {
|
|||
path.drawShader("shader_datas/smaa_blend_weight/smaa_blend_weight");
|
||||
|
||||
#if (rp_antialiasing == "TAA")
|
||||
path.setTarget("bufa");
|
||||
isProbe ? path.setTarget(framebuffer) : path.setTarget("bufa");
|
||||
#else
|
||||
path.setTarget(framebuffer);
|
||||
#end
|
||||
|
@ -920,15 +920,17 @@ class RenderPathDeferred {
|
|||
|
||||
#if (rp_antialiasing == "TAA")
|
||||
{
|
||||
path.setTarget(framebuffer);
|
||||
path.bindTarget("bufa", "tex");
|
||||
path.bindTarget("taa", "tex2");
|
||||
path.bindTarget("gbuffer2", "sveloc");
|
||||
path.drawShader("shader_datas/taa_pass/taa_pass");
|
||||
if (!isProbe) { // No last frame for probe
|
||||
path.setTarget(framebuffer);
|
||||
path.bindTarget("bufa", "tex");
|
||||
path.bindTarget("taa", "tex2");
|
||||
path.bindTarget("gbuffer2", "sveloc");
|
||||
path.drawShader("shader_datas/taa_pass/taa_pass");
|
||||
|
||||
path.setTarget("taa");
|
||||
path.bindTarget("bufa", "tex");
|
||||
path.drawShader("shader_datas/copy_pass/copy_pass");
|
||||
path.setTarget("taa");
|
||||
path.bindTarget("bufa", "tex");
|
||||
path.drawShader("shader_datas/copy_pass/copy_pass");
|
||||
}
|
||||
}
|
||||
#end
|
||||
}
|
||||
|
|
|
@ -956,13 +956,10 @@ class ArmoryExporter:
|
|||
for i in range(0, num_psys):
|
||||
self.export_particle_system_ref(bobject.particle_systems[i], i, o)
|
||||
|
||||
if bobject.type == 'LIGHT_PROBE':
|
||||
o['dimensions'] = [1.0, 1.0, bobject.data.influence_distance]
|
||||
else:
|
||||
o['dimensions'] = [0.0, 0.0, 0.0]
|
||||
for i in range(0, 3):
|
||||
if bobject.scale[i] != 0:
|
||||
o['dimensions'][i] = bobject.dimensions[i] / bobject.scale[i]
|
||||
o['dimensions'] = [0.0, 0.0, 0.0]
|
||||
for i in range(0, 3):
|
||||
if bobject.scale[i] != 0:
|
||||
o['dimensions'][i] = bobject.dimensions[i] / bobject.scale[i]
|
||||
# Origin not in geometry center
|
||||
if hasattr(bobject.data, 'arm_aabb'):
|
||||
dx = bobject.data.arm_aabb[0]
|
||||
|
@ -991,6 +988,7 @@ class ArmoryExporter:
|
|||
self.probeArray[objref] = {"structName" : objname, "objectTable" : [bobject]}
|
||||
else:
|
||||
self.probeArray[objref]["objectTable"].append(bobject)
|
||||
o['dimensions'] = [1.0, 1.0, bobject.data.influence_distance]
|
||||
o['data_ref'] = self.probeArray[objref]["structName"]
|
||||
|
||||
elif type == NodeTypeCamera:
|
||||
|
|
Loading…
Reference in a new issue