Skip to content

Commit 1f7ef46

Browse files
committed
add extra depth pass, before fog
1 parent 99df450 commit 1f7ef46

3 files changed

Lines changed: 24 additions & 13 deletions

File tree

game/graphics/renderer.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ void Renderer::resetSwapchain() {
117117
uboCopy = device.descriptors(Shaders::inst().copy);
118118
uboCopy.set(0,gbufEmission,Sampler::nearest());
119119

120+
uboCopyDepth = device.descriptors(Shaders::inst().copy);
121+
uboCopyDepth.set(0, zbuffer);
122+
120123
ssao.ssaoBuf = device.attachment(ssao.aoFormat, (swapchain.w()+1)/2,(swapchain.h()+1)/2);
121124
ssao.blurBuf = device.attachment(ssao.aoFormat, (swapchain.w()+1)/2,(swapchain.h()+1)/2);
122125

@@ -243,7 +246,8 @@ void Renderer::dbgDraw(Tempest::Painter& p) {
243246
}
244247

245248
void Renderer::draw(Tempest::Attachment& result, Tempest::Encoder<CommandBuffer>& cmd, uint8_t cmdId) {
246-
auto wview = Gothic::inst().worldView();
249+
auto& device = Resources::device();
250+
auto wview = Gothic::inst().worldView();
247251
if(wview==nullptr) {
248252
cmd.setFramebuffer({{result, Vec4(), Tempest::Preserve}});
249253
return;
@@ -292,14 +296,19 @@ void Renderer::draw(Tempest::Attachment& result, Tempest::Encoder<CommandBuffer>
292296
wview->drawGBuffer(cmd,cmdId);
293297

294298
drawSSAO(result,cmd,*wview);
295-
cmd.setFramebuffer({{result, Tempest::Preserve, Tempest::Preserve}}, {zbuffer, Tempest::Preserve, Tempest::Discard});
299+
cmd.setFramebuffer({{result, Tempest::Preserve, Tempest::Preserve}}, {zbuffer, Tempest::Preserve, Tempest::Preserve});
296300
wview->drawLights (cmd,cmdId);
297301
wview->drawWater (cmd,cmdId);
298302

299303
wview->drawSky (cmd,cmdId);
300304
wview->drawTranslucent(cmd,cmdId);
301305

302-
// cmd.setFramebuffer({{result, Tempest::Preserve, Tempest::Preserve}});
306+
if(device.properties().hasSamplerFormat(zBufferFormat)){
307+
cmd.setFramebuffer({{gbufDepth, 1.f, Tempest::Preserve}});
308+
cmd.setUniforms(Shaders::inst().copy, uboCopyDepth);
309+
cmd.draw(Resources::fsqVbo());
310+
}
311+
cmd.setFramebuffer({{result, Tempest::Preserve, Tempest::Preserve}});
303312
wview->drawFog (cmd,cmdId);
304313
}
305314

game/graphics/renderer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,6 @@ class Renderer final {
7979
Tempest::DescriptorSet uboHiZPot;
8080
std::vector<Tempest::DescriptorSet> uboZMip;
8181

82-
Tempest::DescriptorSet uboCopy;
82+
Tempest::DescriptorSet uboCopy, uboCopyDepth;
8383
Shaders stor;
8484
};

shader/sky/sky_egsr.frag

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -154,14 +154,10 @@ const vec3 debugColors[MAX_DEBUG_COLORS] = {
154154
vec3(0,0.5,1),
155155
};
156156

157-
vec4 fog(vec2 uv, vec3 sunDir) {
158-
// vec3 pos1 = inverse(vec3(inPos,1));
159-
// vec3 posz = inverse(vec3(inPos,z));
160-
// vec3 pos0 = inverse(vec3(inPos,0));
161-
157+
vec4 fog(vec2 uv, float z, vec3 sunDir) {
162158
float dMin = 0;
163159
float dMax = 0.9999;
164-
float z = texture(depth,uv).r;
160+
165161
float dZ = reconstructCSZ( z, push.clipInfo);
166162
float d0 = reconstructCSZ(dMin, push.clipInfo);
167163
float d1 = reconstructCSZ(dMax, push.clipInfo);
@@ -180,10 +176,10 @@ vec4 fog(vec2 uv, vec3 sunDir) {
180176
return vec4(lum, fogDens);
181177
}
182178
#else
183-
vec4 fog(vec2 uv, vec3 sunDir) {
179+
vec4 fog(vec2 uv, float z, vec3 sunDir) {
184180
float dMin = 0.0;
185181
float dMax = 1.0;
186-
float z = texture(depth,uv).r;
182+
187183
float dZ = reconstructCSZ( z, push.clipInfo);
188184
float d0 = reconstructCSZ(dMin, push.clipInfo);
189185
float d1 = reconstructCSZ(dMax, push.clipInfo);
@@ -259,11 +255,17 @@ void main() {
259255
vec2 uv = inPos*vec2(0.5)+vec2(0.5);
260256
vec3 view = normalize(inverse(vec3(inPos,1.0)));
261257
vec3 sunDir = push.sunDir;
258+
float z = textureLod(depth,uv,0).r;
259+
260+
#if defined(FOG)
261+
if(z>=1.0)
262+
discard;
263+
#endif
262264

263265
// NOTE: not a physical value, but dunno how to achive nice look without it
264266
float fogFixup = 20.0;
265267

266-
vec4 val = fog(uv,push.sunDir) * fogFixup;
268+
vec4 val = fog(uv,z,push.sunDir) * fogFixup;
267269
vec3 lum = val.rgb;
268270
#if defined(FOG)
269271
//outColor = fog(uv, sunDir);

0 commit comments

Comments
 (0)