Skip to content

Commit 8aadac2

Browse files
Visibility Buffer Implemented
1 parent 1902216 commit 8aadac2

File tree

2 files changed

+33
-13
lines changed

2 files changed

+33
-13
lines changed

examples_tests/41.VisibilityBuffer/main.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ int main()
721721
std::cout << gpuvt->getGLSLFunctionsIncludePath().c_str() << std::endl;
722722

723723
SPushConstantRange pcRange;
724-
pcRange.size = sizeof(core::vectorSIMDf); // TODO: send camera data
724+
pcRange.size = sizeof(core::vector3df);
725725
pcRange.offset = 0u;
726726
pcRange.stageFlags = ISpecializedShader::ESS_COMPUTE;
727727

@@ -785,6 +785,10 @@ int main()
785785
// shade
786786
driver->bindDescriptorSets(video::EPBP_COMPUTE,sceneData.shadeVBufferPpln->getLayout(),0u,4u,ds,nullptr);
787787
driver->bindComputePipeline(sceneData.shadeVBufferPpln.get());
788+
{
789+
auto camPos = camera->getAbsolutePosition();
790+
driver->pushConstants(sceneData.shadeVBufferPpln->getLayout(),IGPUSpecializedShader::ESS_COMPUTE,0u,sizeof(camPos),&camPos.X);
791+
}
788792
driver->dispatch((params.WindowSize.Width-1u)/SHADING_WG_SIZE_X+1u,(params.WindowSize.Height-1u)/SHADING_WG_SIZE_Y+1u,1u);
789793
COpenGLExtensionHandler::extGlMemoryBarrier(GL_FRAMEBUFFER_BARRIER_BIT);
790794

examples_tests/41.VisibilityBuffer/shadeVBuffer.comp

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,6 @@ float nbl_glsl_VT_getVTexSzRcp()
6363
#endif
6464
#include <nbl/builtin/glsl/virtual_texturing/functions.glsl/7/8>
6565

66-
67-
#define _NBL_FRAG_SET3_BINDINGS_DEFINED_
68-
#define _NBL_FRAG_PUSH_CONSTANTS_DEFINED_
69-
7066
vec4 nbl_sample_Ka(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(gBatchInstance.map_Ka_data, uv, dUV); }
7167
vec4 nbl_sample_Kd(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(gBatchInstance.map_Kd_data, uv, dUV); }
7268
vec4 nbl_sample_Ks(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(gBatchInstance.map_Ks_data, uv, dUV); }
@@ -88,6 +84,27 @@ mat2 nbl_glsl_perturbNormal_dUVdSomething()
8884
}
8985
#define _NBL_BUILTIN_GLSL_BUMP_MAPPING_DERIVATIVES_DECLARED_
9086

87+
layout (push_constant) uniform Block
88+
{
89+
vec3 camPos;
90+
} pc;
91+
#define _NBL_FRAG_PUSH_CONSTANTS_DEFINED_
92+
93+
#define _NBL_FRAG_INPUTS_DEFINED_
94+
#define _NBL_FRAG_OUTPUTS_DEFINED_
95+
#define _NBL_FRAG_SET3_BINDINGS_DEFINED_
96+
#define _NBL_FRAG_MAIN_DEFINED_
97+
vec2 UV;
98+
mat2 dUVdScreen;
99+
mat2 nbl_glsl_dUVdScreen()
100+
{
101+
return dUVdScreen;
102+
}
103+
#define _NBL_FRAG_GET_UV_DERIVATIVES_FUNCTION_DEFINED_
104+
// weird globals for the overriden MTL fragment shader
105+
vec3 ViewPos;
106+
#include <nbl/builtin/shader/loader/mtl/fragment_impl.glsl>
107+
91108

92109
#include <nbl/builtin/glsl/colorspace/OETF.glsl>
93110

@@ -123,8 +140,6 @@ void main()
123140
vertexIDs[i] = nbl_glsl_VG_fetchTriangleVertexIndex(baseTriangleVertex,i);
124141

125142
vec3 pos,normal;
126-
vec2 uv;
127-
mat2 dUVdScreen;
128143
{
129144
vec3 positions[3];
130145
vec2 uvs[3];
@@ -142,7 +157,7 @@ void main()
142157

143158
dUVdBary[0] = uvs[0]-uvs[2];
144159
dUVdBary[1] = uvs[1]-uvs[2];
145-
uv = dUVdBary*bary+uvs[2];
160+
UV = dUVdBary*bary+uvs[2];
146161

147162
dUVdScreen = nbl_glsl_applyChainRule2D(dUVdBary,dBary);
148163

@@ -152,12 +167,13 @@ void main()
152167
normal = nbl_glsl_fetchVtxNormal(vertexIDs[0],drawGUID)*bary.x;
153168
normal += nbl_glsl_fetchVtxNormal(vertexIDs[1],drawGUID)*bary.y;
154169
normal += nbl_glsl_fetchVtxNormal(vertexIDs[2],drawGUID)*lastBary;
170+
normal = normalize(normal);
155171
}
156-
157-
// deferred texturing
158-
color.rgb = nbl_sample_Kd(uv,dUVdScreen).rgb;
159-
// TODO: normals seem be to screwed
160-
color.rgb = 0.5*normal+vec3(0.5);
172+
173+
// the lighting is completely meh (note: we assume there's no modelspace to world transform)
174+
ViewPos = pos-pc.camPos; // weird global for MTL shader
175+
nbl_glsl_IsotropicViewSurfaceInteraction interaction = nbl_glsl_calcSurfaceInteraction(pc.camPos,pos,normal);
176+
color.rgb = nbl_computeLighting(interaction);
161177
}
162178

163179
imageStore(frameBuffer,fragCoord,vec4(nbl_glsl_oetf_sRGB(color.rgb),color.a));

0 commit comments

Comments
 (0)