Skip to content

Commit 5447936

Browse files
committed
fix inconsistency of forward shaded materials with the rest
#904
1 parent cf5591e commit 5447936

2 files changed

Lines changed: 11 additions & 6 deletions

File tree

game/graphics/sceneglobals.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ void SceneGlobals::setViewProject(const Tempest::Matrix4x4& v, const Tempest::Ma
112112
uboGlobalCpu.viewShadow[1].project(max);
113113
uboGlobalCpu.closeupShadowSlice = Tempest::Vec2(min.z,max.z);
114114

115+
if(shadowMap[0]==nullptr || shadowMap[0]->size()==Tempest::Size(1))
116+
uboGlobalCpu.closeupShadowSlice = Tempest::Vec2(-65000);
117+
115118
uboGlobalCpu.pfxLeft = Tempest::Vec3::normalize({vp.at(0,0), vp.at(1,0), vp.at(2,0)});
116119
uboGlobalCpu.pfxTop = Tempest::Vec3::normalize({vp.at(0,1), vp.at(1,1), vp.at(2,1)});
117120
uboGlobalCpu.pfxDepth = Tempest::Vec3::normalize({vp.at(0,2), vp.at(1,2), vp.at(2,2)});

shader/materials/main.frag

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,23 +100,25 @@ vec3 flatNormal() {
100100
#endif
101101

102102
#if defined(FORWARD)
103-
float lambert() {
104-
vec3 normal = normalize(shInp.normal);
103+
float lambert(const vec3 normal) {
105104
return clamp(dot(scene.sunDir,normal), 0.0, 1.0);
106105
}
107106

108107
vec3 diffuseLight() {
109-
float light = lambert();
108+
vec3 norm = normalize(shInp.normal);
109+
float light = lambert(norm);
110110
float shadow = calcShadow(vec4(shInp.pos,1), 0, scene, textureSm0, textureSm1);
111111

112112
vec3 lcolor = scene.sunColor * light * shadow;
113-
vec3 ambient = scene.ambient; // TODO: irradiance
113+
vec3 ambient = scene.ambient + (norm.y*0.25+0.75) * NightAmbient * Fd_Lambert;
114+
vec3 sky = vec3(0); // TODO: irradiance
114115

115-
return (lcolor * Fd_Lambert + ambient);
116+
return (lcolor + ambient + ambient);
116117
}
117118

118119
vec4 dbgLambert() {
119-
float l = lambert();
120+
vec3 norm = normalize(shInp.normal);
121+
float l = lambert(norm);
120122
return vec4(l,l,l,1.0);
121123
}
122124
#endif

0 commit comments

Comments
 (0)