Add option to ignore irradiance for baked environments

This commit is contained in:
Alexander Kleemann 2021-02-20 15:30:18 +01:00
parent f1858550d0
commit aec10274f4
6 changed files with 35 additions and 1 deletions

View file

@ -21,6 +21,7 @@
uniform sampler2D gbufferD;
uniform sampler2D gbuffer0;
uniform sampler2D gbuffer1;
uniform sampler2D gbuffer2;
#ifdef _VoxelAOvar
uniform sampler3D voxels;
@ -205,6 +206,8 @@ void main() {
vec3 v = normalize(eye - p);
float dotNV = max(dot(n, v), 0.0);
vec4 g2 = textureLod(gbuffer2, texCoord, 0.0);
#ifdef _MicroShadowing
occspec.x = mix(1.0, occspec.x, dotNV); // AO Fresnel
#endif
@ -215,7 +218,15 @@ void main() {
// Envmap
#ifdef _Irr
vec3 envl = shIrradiance(n, shirr);
if (g2.b < 0.5) {
envl = envl;
} else {
envl = vec3(1.0);
}
#ifdef _EnvTex
envl /= PI;
#endif

View file

@ -549,6 +549,13 @@ class RenderPathDeferred {
path.bindTarget("_main", "gbufferD");
path.bindTarget("gbuffer0", "gbuffer0");
path.bindTarget("gbuffer1", "gbuffer1");
#if rp_gbuffer2
{
path.bindTarget("gbuffer2", "gbuffer2");
}
#end
#if (rp_ssgi != "Off")
{
if (armory.data.Config.raw.rp_ssgi != false) {

View file

@ -367,7 +367,18 @@ def build():
assets.add_khafile_def('rp_chromatic_aberration')
assets.add_shader_pass('chromatic_aberration_pass')
gbuffer2 = '_Veloc' in wrd.world_defs
ignoreIrr = False
for obj in bpy.data.objects:
if obj.type == "MESH":
for slot in obj.material_slots:
mat = slot.material
if mat.arm_ignore_irradiance:
ignoreIrr = True
if ignoreIrr:
wrd.world_defs += '_IgnoreIrr'
gbuffer2 = '_Veloc' in wrd.world_defs or '_IgnoreIrr' in wrd.world_defs
if gbuffer2:
assets.add_khafile_def('rp_gbuffer2')
wrd.world_defs += '_gbuffer2'

View file

@ -268,6 +268,9 @@ def make_deferred(con_mesh, rpasses):
frag.write('vec2 posb = (prevwvpposition.xy / prevwvpposition.w) * 0.5 + 0.5;')
frag.write('fragColor[2].rg = vec2(posa - posb);')
if mat_state.material.arm_ignore_irradiance:
frag.write('fragColor[2].b = 1.0;')
return con_mesh
def make_raytracer(con_mesh):

View file

@ -331,6 +331,7 @@ def init_properties():
bpy.types.Material.arm_overlay = BoolProperty(name="Overlay", default=False)
bpy.types.Material.arm_decal = BoolProperty(name="Decal", default=False)
bpy.types.Material.arm_two_sided = BoolProperty(name="Two-Sided", description="Flip normal when drawing back-face", default=False)
bpy.types.Material.arm_ignore_irradiance = BoolProperty(name="Ignore Irradiance", description="Ignore irradiance for material", default=False)
bpy.types.Material.arm_cull_mode = EnumProperty(
items=[('none', 'Both', 'None'),
('clockwise', 'Front', 'Clockwise'),

View file

@ -446,6 +446,7 @@ class ARM_PT_MaterialPropsPanel(bpy.types.Panel):
wrd = bpy.data.worlds['Arm']
columnb.enabled = len(wrd.arm_rplist) > 0 and arm.utils.get_rp().rp_renderer == 'Forward'
columnb.prop(mat, 'arm_receive_shadow')
layout.prop(mat, 'arm_ignore_irradiance')
layout.prop(mat, 'arm_two_sided')
columnb = layout.column()
columnb.enabled = not mat.arm_two_sided