Skip to content

Commit 28e7635

Browse files
committed
[Renderer] fog buffer
1 parent 20adbc5 commit 28e7635

7 files changed

Lines changed: 45 additions & 4 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
uniform FogData
2+
{
3+
float fogStart;
4+
float fogEnd;
5+
float fogR;
6+
float fogG;
7+
float fogB;
8+
}
9+
fog;

bootassets/openminecraft-renderer/shaders/core/voxel/voxel.frag.glsl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@ layout(location = 5) in float voxFactor;
1111
layout(location = 0) out vec4 outColor;
1212

1313
#include "basics/fog.glsl"
14+
1415
#include "basics/structs/camera.glsl"
1516
uniform sampler2DArray inTexture;
17+
uniform samplerBuffer inChunkPos;
18+
#include "basics/structs/fog.glsl"
1619

1720
void main()
1821
{
1922
mat4 unused = camera.viewProj;
23+
float unused2 = texelFetch(inChunkPos, 0).r;
2024

2125
float ao = mix(1.0, 0.2, voxAoLevel / 3.0);
2226

@@ -27,5 +31,5 @@ void main()
2731
}
2832
vec3 result = voxFactor * ao * texColor.rgb;
2933

30-
outColor = fog_gendefault(vec4(result, texColor.a), 1.0);
34+
outColor = fog_gen(vec4(result, texColor.a), fog.fogStart, fog.fogEnd, vec3(fog.fogR, fog.fogG, fog.fogB), 1.0);
3135
}

bootassets/openminecraft-renderer/shaders/core/voxel/voxel.oit.frag.glsl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,13 @@ layout(location = 0) out vec4 outColor;
1313
#include "basics/fog.glsl"
1414
#include "basics/structs/camera.glsl"
1515
uniform sampler2DArray inTexture;
16+
uniform samplerBuffer inChunkPos;
17+
#include "basics/structs/fog.glsl"
1618

1719
void main()
1820
{
1921
mat4 unused = camera.viewProj;
22+
float unused2 = texelFetch(inChunkPos, 0).r;
2023

2124
float ao = mix(1.0, 0.2, voxAoLevel / 3.0);
2225

@@ -27,5 +30,6 @@ void main()
2730
}
2831
vec3 result = voxFactor * ao * texColor.rgb;
2932

30-
outColor = fog_gendefault(vec4(result.rgb * texColor.a, texColor.a), 0.0);
33+
outColor = fog_gen(vec4(result.rgb * texColor.a, texColor.a), fog.fogStart, fog.fogEnd,
34+
vec3(fog.fogR, fog.fogG, fog.fogB), 0.0);
3135
}

bootassets/openminecraft-renderer/shaders/core/voxel/voxelcomplex.frag.glsl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@ layout(location = 0) out vec4 outColor;
1515
#include "basics/structs/camera.glsl"
1616
uniform sampler2DArray inTexture;
1717
uniform sampler2DArray inTextureSec;
18+
uniform samplerBuffer inChunkPos;
19+
#include "basics/structs/fog.glsl"
1820

1921
void main()
2022
{
2123
mat4 unused = camera.viewProj;
24+
float unused2 = texelFetch(inChunkPos, 0).r;
2225

2326
float ao = mix(1.0, 0.2, voxAoLevel / 3.0);
2427

@@ -38,5 +41,5 @@ void main()
3841
}
3942
vec3 result = voxFactor * ao * texColor.rgb;
4043

41-
outColor = fog_gendefault(vec4(result, texColor.a), 1.0);
44+
outColor = fog_gen(vec4(result, texColor.a), fog.fogStart, fog.fogEnd, vec3(fog.fogR, fog.fogG, fog.fogB), 1.0);
4245
}

bootassets/openminecraft-renderer/shaders/core/voxel/voxelcomplex.oit.frag.glsl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@ layout(location = 0) out vec4 outColor;
1515
#include "basics/structs/camera.glsl"
1616
uniform sampler2DArray inTexture;
1717
uniform sampler2DArray inTextureSec;
18+
uniform samplerBuffer inChunkPos;
19+
#include "basics/structs/fog.glsl"
1820

1921
void main()
2022
{
2123
mat4 unused = camera.viewProj;
24+
float unused2 = texelFetch(inChunkPos, 0).r;
2225

2326
float ao = mix(1.0, 0.2, voxAoLevel / 3.0);
2427

@@ -38,5 +41,6 @@ void main()
3841
}
3942
vec3 result = voxFactor * ao * texColor.rgb;
4043

41-
outColor = fog_gendefault(vec4(result.rgb * texColor.a, texColor.a), 0.0);
44+
outColor = fog_gen(vec4(result.rgb * texColor.a, texColor.a), fog.fogStart, fog.fogEnd,
45+
vec3(fog.fogR, fog.fogG, fog.fogB), 0.0);
4246
}

include/openminecraft/renderer/common/wrap/om_renderer_voxel.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ class OMVoxelManager
379379
OMRendererPipeline *skyDiscPipeline;
380380
OMRendererBuffer *chunkoffs, *debugoffs;
381381
OMRendererBuffer *skydisc;
382+
OMRendererBuffer *fogdata;
382383
OMRendererTexture *textureAtlas;
383384
OMRendererTexture *textureAtlasSecondary;
384385

src/openminecraft-core/renderer/common/wrap/om_renderer_voxel_manager.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererRenderTarget *res
8787
->inputName("inTexture")
8888
->input(UniformTexelBuffer)
8989
->inputName("inChunkPos")
90+
->input(UniformBuffer)
91+
->inputName("FogData")
9092
->output(cutoutTargetMS->target)
9193
->samples(samples)
9294
->setCullMode(renderer::common::Back)
@@ -109,6 +111,8 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererRenderTarget *res
109111
->inputName("inTextureSec")
110112
->input(UniformTexelBuffer)
111113
->inputName("inChunkPos")
114+
->input(UniformBuffer)
115+
->inputName("FogData")
112116
->output(cutoutTargetMS->target)
113117
->samples(samples)
114118
->setCullMode(renderer::common::Back)
@@ -131,6 +135,8 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererRenderTarget *res
131135
->inputName("inTexture")
132136
->input(UniformTexelBuffer)
133137
->inputName("inChunkPos")
138+
->input(UniformBuffer)
139+
->inputName("FogData")
134140
->output(translucentTargetMS->target)
135141
->samples(samples)
136142
->setCullMode(renderer::common::Back)
@@ -152,6 +158,8 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererRenderTarget *res
152158
->inputName("inTextureSec")
153159
->input(UniformTexelBuffer)
154160
->inputName("inChunkPos")
161+
->input(UniformBuffer)
162+
->inputName("FogData")
155163
->output(translucentTargetMS->target)
156164
->samples(samples)
157165
->setCullMode(renderer::common::Back)
@@ -229,24 +237,32 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererRenderTarget *res
229237
skydisc = renderer->allocateBuffer(Uniform, sizeof(OMVoxelSkyDisc));
230238
OMVoxelSkyDisc disc = {{0.470, 0.654, 1.0}, 256, {0.198, 0.371, 1.0}, -16};
231239
skydisc->updateData(&disc);
240+
fogdata = renderer->allocateBuffer(Uniform, sizeof(float) * 5);
241+
std::array<float, 5> d = {0.0005, 0.0006, 0.470, 0.654, 1.0};
242+
fogdata->updateData(d.data());
232243

233244
textureAtlas = tex;
234245
textureAtlasSecondary = texSec;
235246

236247
pipeline->bindInput(1, textureAtlas);
237248
pipeline->bindInput(2, chunkoffs);
249+
pipeline->bindInput(3, fogdata);
238250
complexPipeline->bindInput(1, textureAtlas);
239251
complexPipeline->bindInput(2, textureAtlasSecondary);
240252
complexPipeline->bindInput(3, chunkoffs);
253+
complexPipeline->bindInput(4, fogdata);
241254
translucentPipeline->bindInput(1, textureAtlas);
242255
translucentPipeline->bindInput(2, chunkoffs);
256+
translucentPipeline->bindInput(3, fogdata);
243257
translucentComplexPipeline->bindInput(1, textureAtlas);
244258
translucentComplexPipeline->bindInput(2, textureAtlasSecondary);
245259
translucentComplexPipeline->bindInput(3, chunkoffs);
260+
translucentComplexPipeline->bindInput(4, fogdata);
246261
skyDiscPipeline->bindInput(1, skydisc);
247262
}
248263
OMVoxelManager::~OMVoxelManager()
249264
{
265+
delete fogdata;
250266
delete compilerPool;
251267
delete voxelLayer;
252268
delete voxelComplexLayer;

0 commit comments

Comments
 (0)