Skip to content

Commit

Permalink
no more overlighting with point lights and voxels
Browse files Browse the repository at this point in the history
  • Loading branch information
e2002e committed Feb 12, 2023
1 parent da371b5 commit 2a50fc8
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 19 deletions.
38 changes: 21 additions & 17 deletions Shaders/std/light.glsl
Expand Up @@ -115,24 +115,28 @@ vec3 sampleLight(const vec3 p, const vec3 n, const vec3 v, const float dotNV, co
float dotNH = dot(n, h);
float dotVH = dot(v, h);
float dotNL = dot(n, l);
vec3 direct;
if(!vox) {
#ifdef _LTC
float theta = acos(dotNV);
vec2 tuv = vec2(rough, theta / (0.5 * PI));
tuv = tuv * LUT_SCALE + LUT_BIAS;
vec4 t = textureLod(sltcMat, tuv, 0.0);
mat3 invM = mat3(
vec3(1.0, 0.0, t.y),
vec3(0.0, t.z, 0.0),
vec3(t.w, 0.0, t.x));
float ltcspec = ltcEvaluate(n, v, dotNV, p, invM, lightArea0, lightArea1, lightArea2, lightArea3);
ltcspec *= textureLod(sltcMag, tuv, 0.0).a;
float ltcdiff = ltcEvaluate(n, v, dotNV, p, mat3(1.0), lightArea0, lightArea1, lightArea2, lightArea3);
direct = albedo * ltcdiff + ltcspec * spec * 0.05;
#else
direct = lambertDiffuseBRDF(albedo, dotNL) +
specularBRDF(f0, rough, dotNL, dotNH, dotNV, dotVH) * spec;
#endif
}
else direct = albedo;

#ifdef _LTC
float theta = acos(dotNV);
vec2 tuv = vec2(rough, theta / (0.5 * PI));
tuv = tuv * LUT_SCALE + LUT_BIAS;
vec4 t = textureLod(sltcMat, tuv, 0.0);
mat3 invM = mat3(
vec3(1.0, 0.0, t.y),
vec3(0.0, t.z, 0.0),
vec3(t.w, 0.0, t.x));
float ltcspec = ltcEvaluate(n, v, dotNV, p, invM, lightArea0, lightArea1, lightArea2, lightArea3);
ltcspec *= textureLod(sltcMag, tuv, 0.0).a;
float ltcdiff = ltcEvaluate(n, v, dotNV, p, mat3(1.0), lightArea0, lightArea1, lightArea2, lightArea3);
vec3 direct = albedo * ltcdiff + ltcspec * spec * 0.05;
#else
vec3 direct = lambertDiffuseBRDF(albedo, dotNL) +
specularBRDF(f0, rough, dotNL, dotNH, dotNV, dotVH) * spec;
#endif
direct *= lightCol;
direct *= attenuate(distance(p, lp));

Expand Down
2 changes: 1 addition & 1 deletion blender/arm/material/make_mesh.py
Expand Up @@ -579,7 +579,7 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
frag.write('if (opacity < {0}) discard;'.format(opac))

if blend:
frag.add_out('vec4 fragColor[GBUF_IDX_1]')
frag.add_out('vec4 fragColor[GBUF_SIZE]')
if parse_opacity:
frag.write('fragColor[GBUF_IDX_0] = vec4(basecol, opacity);')
else:
Expand Down
2 changes: 1 addition & 1 deletion blender/arm/material/make_transluc.py
Expand Up @@ -37,8 +37,8 @@ def make(context_id):
wrd = bpy.data.worlds['Arm']
if '_VoxelAOvar' in wrd.world_defs:
frag.write('indirect *= 0.25;')
frag.write('vec4 premultipliedReflect = vec4(vec3(direct + indirect * 0.5) * opacity, opacity);')

frag.write('vec4 premultipliedReflect = vec4(vec3(direct + indirect * 0.5) * opacity, opacity);')
frag.write('float w = clamp(pow(min(1.0, premultipliedReflect.a * 10.0) + 0.01, 3.0) * 1e8 * pow(1.0 - (gl_FragCoord.z) * 0.9, 3.0), 1e-2, 3e3);')
frag.write('fragColor[0] = vec4(premultipliedReflect.rgb * w, premultipliedReflect.a);')
frag.write('fragColor[1] = vec4(premultipliedReflect.a * w, 0.0, 0.0, 1.0);')
Expand Down

0 comments on commit 2a50fc8

Please sign in to comment.