Skip to content

Commit

Permalink
fixed translucency compatibility with voxelgi_refraction
Browse files Browse the repository at this point in the history
  • Loading branch information
e2002e committed Feb 14, 2023
1 parent 8638f22 commit 2882d1b
Show file tree
Hide file tree
Showing 8 changed files with 16 additions and 82 deletions.
2 changes: 1 addition & 1 deletion Shaders/deferred_light/deferred_light.frag.glsl
Expand Up @@ -554,7 +554,7 @@ fragColor.rgb = envl;
#else
vec3 refraction = traceRefraction(voxels, voxpos, n, v, 1.0, rior) * voxelgiRefr;
#endif
fragColor.rgb = mix(refraction * fragColor.rgb, fragColor.rgb, opac);
fragColor.rgb = mix(refraction + fragColor.rgb, fragColor.rgb, opac);
#endif
#endif
}
2 changes: 1 addition & 1 deletion Sources/armory/object/Uniforms.hx
Expand Up @@ -216,7 +216,7 @@ class Uniforms {
#if (rp_voxels != 'Off')
case "_voxelBlend": { // Blend current and last voxels
var freq = armory.renderpath.RenderPathCreator.voxelFreq;
return (armory.renderpath.RenderPathCreator.voxelFrame % freq) / freq;
return (armory.renderpath.RenderPathCreator.voxelFrame % (freq + 1)) / freq;
}
#end
#if rp_bloom
Expand Down
2 changes: 1 addition & 1 deletion Sources/armory/renderpath/Inc.hx
Expand Up @@ -362,7 +362,7 @@ class Inc {
#end // arm_config
}

#if (rp_translucency)
#if rp_translucency
public static function initTranslucency() {
path.createDepthBuffer("main", "DEPTH24");

Expand Down
2 changes: 1 addition & 1 deletion Sources/armory/renderpath/RenderPathCreator.hx
Expand Up @@ -59,7 +59,7 @@ class RenderPathCreator {

#if rp_voxels
public static var voxelFrame = 0;
public static var voxelFreq = 7; // Revoxelizing frequency
public static var voxelFreq = 4; // Revoxelizing frequency
#end

// Last target before drawing to framebuffer
Expand Down
69 changes: 2 additions & 67 deletions Sources/armory/renderpath/RenderPathDeferred.hx
Expand Up @@ -51,29 +51,7 @@ class RenderPathDeferred {

#if (rp_translucency)
{
path.createDepthBuffer("main", "DEPTH24");

var t = new RenderTargetRaw();
t.name = "accum";
t.width = 0;
t.height = 0;
t.displayp = Inc.getDisplayp();
t.format = "RGBA64";
t.scale = Inc.getSuperSampling();
t.depth_buffer = "main";
path.createRenderTarget(t);

var t = new RenderTargetRaw();
t.name = "revealage";
t.width = 0;
t.height = 0;
t.displayp = Inc.getDisplayp();
t.format = "R16";
t.scale = Inc.getSuperSampling();
t.depth_buffer = "main";
path.createRenderTarget(t);

path.loadShader("shader_datas/translucent_resolve/translucent_resolve");
Inc.initTranslucency();
}
#end

Expand Down Expand Up @@ -731,50 +709,7 @@ class RenderPathDeferred {

#if rp_translucency
{
var voxelao_pass = false;
#if (rp_voxels != 'Off')
if (armory.data.Config.raw.rp_voxels != false)
{
#if (arm_config && (rp_voxels == "Voxel AO"))
voxelao_pass = true;
#end
path.bindTarget(voxels, "voxels");
#if arm_voxelgi_temporal
{
path.bindTarget(voxelsLast, "voxelsLast");
}
#end
}
#end

path.setTarget("accum");
path.clearTarget(0xff000000);
path.setTarget("revealage");
path.clearTarget(0xffffffff);
path.setTarget("accum", ["revealage"]);
#if rp_shadowmap
{
#if arm_shadowmap_atlas
Inc.bindShadowMapAtlas();
#else
Inc.bindShadowMap();
#end
}
#end
path.drawMeshes("translucent");
#if rp_render_to_texture
{
path.setTarget("tex");
}
#else
{
path.setTarget("");
}
#end
path.bindTarget("accum", "gbuffer0");
path.bindTarget("revealage", "gbuffer1");
path.drawShader("shader_datas/translucent_resolve/translucent_resolve");
//Inc.drawTranslucency("tex");
Inc.drawTranslucency("tex");
}
#end

Expand Down
3 changes: 1 addition & 2 deletions blender/arm/make_renderpath.py
Expand Up @@ -110,8 +110,7 @@ def add_world_defs():
assets.add_khafile_def('rp_voxelgi_relight')
if rpdat.arm_voxelgi_refraction:
wrd.world_defs += '_VoxelGIRefract'
if rpdat.rp_renderer == 'Deferred':
assets.add_khafile_def('rp_voxelgi_refract')
assets.add_khafile_def('rp_voxelgi_refract')

elif voxelao:
wrd.world_defs += '_VoxelAOvar' # Write a shader variant
Expand Down
16 changes: 8 additions & 8 deletions blender/arm/material/make_mesh.py
Expand Up @@ -687,22 +687,22 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
else:
frag.write('rgba = traceDiffuse(voxpos, n, voxels) * voxelgiDiff;')

frag.write('rgba.rgb *= basecol;')

frag.write('if (roughness < 1.0) {')
if '_VoxelGITemporal' in wrd.world_defs:
frag.write(' rgba.rgb += (traceReflection(voxels, voxpos, n, vVec, roughness) * voxelBlend + traceReflection(voxelsLast, voxpos, n, vVec, roughness) * (1.0 - voxelBlend)) * voxelgiRefl;')
else:
frag.write(' rgba.rgb += traceReflection(voxels, voxpos, n, vVec, roughness) * voxelgiRefl;')

frag.write('}')
frag.write('indirect *= voxelgiEnv;')
frag.write('rgba.rgb *= voxelgiEnv;')

if '_VoxelGI' in wrd.world_defs:
if '_VoxelGI' in wrd.world_defs and not transluc_pass:
if parse_opacity:
frag.write('opacity = rgba.a;')

frag.write('vec3 direct = indirect * rgba.rgb;')
frag.write('vec3 direct = rgba.rgb * indirect;')

else:
frag.write('vec3 direct = indirect;')


if '_SSRS' in wrd.world_defs:
Expand Down Expand Up @@ -798,7 +798,7 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
frag.write('direct = vec3(0.0);')
frag.write('indirect += emissionCol;')

if '_VoxelGIRefract' in wrd.world_defs and parse_opacity and '_VoxelGI' in wrd.world_defs:
if '_VoxelGIRefract' in wrd.world_defs and '_VoxelGI' in wrd.world_defs and parse_opacity:
if '_VoxelGITemporal' in wrd.world_defs:
frag.write('vec3 refraction = (traceRefraction(voxels, voxpos, n, vVec, roughness, rior) * voxelBlend + traceRefraction(voxelsLast, voxpos, n, vVec, roughness, rior) * (1.0 - voxelBlend)) * voxelgiRefr;') #TODO replace roughness with transmission
else:
Expand All @@ -817,4 +817,4 @@ def _write_material_attribs_default(frag: shader.Shader, parse_opacity: bool):
frag.write('vec3 emissionCol;')
if parse_opacity:
frag.write('float opacity;')
frag.write('float rior;')
frag.write('float rior = 1.0;')
2 changes: 1 addition & 1 deletion blender/arm/material/mat_utils.py
Expand Up @@ -47,7 +47,7 @@ def get_rpasses(material):
ar.append('mesh')
for con in add_mesh_contexts:
ar.append(con)
if is_transluc(material) and not material.arm_discard and rpdat.rp_translucency_state != 'Off' and not material.arm_blending and not rpdat.arm_voxelgi_refraction:
if is_transluc(material) and not material.arm_discard and rpdat.rp_translucency_state != 'Off' and not material.arm_blending and not (rpdat.arm_voxelgi_refraction and rpdat.rp_voxels == 'Voxel GI'):
ar.append('translucent')
if rpdat.rp_voxels != "Off" and has_voxels:
ar.append('voxel')
Expand Down

0 comments on commit 2882d1b

Please sign in to comment.