Skip to content

Commit 9d4da27

Browse files
implement global illumination
1 parent 8bfe934 commit 9d4da27

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+733
-217
lines changed

PKRenderer/PKRenderer.vcxproj

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,7 @@ Call "$(SolutionDir)Build\PKAssetTools.exe" "'$(ProjectDir)res\'" "'$(TargetDir)
548548
<ClInclude Include="src\ECS\Contextual\Engines\EnginePKAssetBuilder.h" />
549549
<ClInclude Include="src\Rendering\Passes\PassGeometry.h" />
550550
<ClInclude Include="src\Rendering\Passes\PassLights.h" />
551+
<ClInclude Include="src\Rendering\Passes\PassSceneGI.h" />
551552
<ClInclude Include="src\Rendering\VulkanRHI\Systems\VulkanLayoutCache.h" />
552553
<ClInclude Include="src\Utilities\BufferIterator.h" />
553554
<ClInclude Include="src\Utilities\BufferView.h" />
@@ -805,6 +806,7 @@ Call "$(SolutionDir)Build\PKAssetTools.exe" "'$(ProjectDir)res\'" "'$(TargetDir)
805806
<None Include="res\models\MDL_Cloth.mdl" />
806807
<None Include="res\models\MDL_Columns.mdl" />
807808
<None Include="res\models\MDL_Spiral.mdl" />
809+
<None Include="res\shaders\CS_SceneGI_Bake.shader" />
808810
<None Include="res\shaders\includes\Blit.glsl" />
809811
<None Include="res\shaders\includes\ClusterIndexing.glsl" />
810812
<None Include="res\shaders\includes\Common.glsl" />
@@ -813,8 +815,10 @@ Call "$(SolutionDir)Build\PKAssetTools.exe" "'$(ProjectDir)res\'" "'$(TargetDir)
813815
<None Include="res\shaders\includes\BRDF.glsl" />
814816
<None Include="res\shaders\includes\Reconstruction.glsl" />
815817
<None Include="res\shaders\includes\SharedLights.glsl" />
818+
<None Include="res\shaders\includes\SharedSceneGI.glsl" />
816819
<None Include="res\shaders\includes\SharedShadowmapping.glsl" />
817820
<None Include="res\shaders\includes\SharedSurfaceShading.glsl" />
821+
<None Include="res\shaders\CS_SceneGI_Mipmap.shader" />
818822
<None Include="res\shaders\SH_WS_PBR_Cloth.shader" />
819823
<None Include="res\shaders\includes\Utilities.glsl" />
820824
<None Include="res\shaders\includes\Lighting.glsl" />
@@ -825,12 +829,12 @@ Call "$(SolutionDir)Build\PKAssetTools.exe" "'$(ProjectDir)res\'" "'$(TargetDir)
825829
<None Include="res\shaders\includes\SharedBloom.glsl" />
826830
<None Include="res\shaders\includes\SharedFilmGrain.glsl" />
827831
<None Include="res\shaders\includes\SharedPostEffects.glsl" />
828-
<None Include="res\shaders\SH_CS_AutoFocus.shader" />
829-
<None Include="res\shaders\SH_CS_Bloom.shader" />
830-
<None Include="res\shaders\SH_CS_FilmGrain.shader" />
831-
<None Include="res\shaders\SH_CS_Histogram.shader" />
832-
<None Include="res\shaders\SH_CS_LightAssignment.shader" />
833-
<None Include="res\shaders\SH_CS_PostEffectsComposite.shader" />
832+
<None Include="res\shaders\CS_AutoFocus.shader" />
833+
<None Include="res\shaders\CS_Bloom.shader" />
834+
<None Include="res\shaders\CS_FilmGrain.shader" />
835+
<None Include="res\shaders\CS_Histogram.shader" />
836+
<None Include="res\shaders\CS_LightAssignment.shader" />
837+
<None Include="res\shaders\CS_PostEffectsComposite.shader" />
834838
<None Include="res\shaders\SH_VS_DepthOfFieldBlur.shader" />
835839
<None Include="res\shaders\SH_VS_DepthOfFieldComposite.shader" />
836840
<None Include="res\shaders\SH_VS_IBLBackground.shader" />
@@ -906,6 +910,7 @@ Call "$(SolutionDir)Build\PKAssetTools.exe" "'$(ProjectDir)res\'" "'$(TargetDir)
906910
<ClCompile Include="src\ECS\Contextual\Engines\EnginePKAssetBuilder.cpp" />
907911
<ClCompile Include="src\Rendering\Passes\PassGeometry.cpp" />
908912
<ClCompile Include="src\Rendering\Passes\PassLights.cpp" />
913+
<ClCompile Include="src\Rendering\Passes\PassSceneGI.cpp" />
909914
<ClCompile Include="src\Rendering\VulkanRHI\Systems\VulkanLayoutCache.cpp" />
910915
<ClCompile Include="src\Utilities\HashHelpers.cpp" />
911916
<ClCompile Include="src\Utilities\PropertyBlock.cpp" />

PKRenderer/PKRenderer.vcxproj.filters

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1398,6 +1398,9 @@
13981398
<ClInclude Include="src\Rendering\VulkanRHI\Systems\VulkanLayoutCache.h">
13991399
<Filter>Header Files</Filter>
14001400
</ClInclude>
1401+
<ClInclude Include="src\Rendering\Passes\PassSceneGI.h">
1402+
<Filter>Header Files</Filter>
1403+
</ClInclude>
14011404
</ItemGroup>
14021405
<ItemGroup>
14031406
<None Include="include\glm\detail\func_common.inl">
@@ -1822,20 +1825,20 @@
18221825
<None Include="res\shaders\includes\Lighting.glsl" />
18231826
<None Include="res\textures\T_OEM_Quarry.ktx2" />
18241827
<None Include="res\shaders\includes\Blit.glsl" />
1825-
<None Include="res\shaders\SH_CS_PostEffectsComposite.shader" />
1828+
<None Include="res\shaders\CS_PostEffectsComposite.shader" />
18261829
<None Include="res\shaders\includes\ColorGrading.glsl" />
18271830
<None Include="res\shaders\includes\SharedPostEffects.glsl" />
18281831
<None Include="res\shaders\includes\Constants.glsl" />
18291832
<None Include="res\shaders\includes\Noise.glsl" />
1830-
<None Include="res\shaders\SH_CS_FilmGrain.shader" />
1833+
<None Include="res\shaders\CS_FilmGrain.shader" />
18311834
<None Include="res\shaders\includes\SharedFilmGrain.glsl" />
1832-
<None Include="res\shaders\SH_CS_Bloom.shader" />
1835+
<None Include="res\shaders\CS_Bloom.shader" />
18331836
<None Include="res\shaders\includes\SharedBloom.glsl" />
18341837
<None Include="res\textures\T_Bloom_LensDirt.ktx2" />
1835-
<None Include="res\shaders\SH_CS_Histogram.shader" />
1838+
<None Include="res\shaders\CS_Histogram.shader" />
18361839
<None Include="res\shaders\includes\SharedHistogram.glsl" />
18371840
<None Include="res\shaders\includes\SharedDepthOfField.glsl" />
1838-
<None Include="res\shaders\SH_CS_AutoFocus.shader" />
1841+
<None Include="res\shaders\CS_AutoFocus.shader" />
18391842
<None Include="res\shaders\SH_VS_DepthOfFieldBlur.shader" />
18401843
<None Include="res\shaders\SH_VS_DepthOfFieldComposite.shader" />
18411844
<None Include="res\shaders\SH_WS_Unlit_Color.shader" />
@@ -1852,7 +1855,7 @@
18521855
<None Include="res\shaders\includes\SharedLights.glsl" />
18531856
<None Include="res\shaders\SH_WS_Shadowmap_Generic.shader" />
18541857
<None Include="res\shaders\SH_VS_ShadowmapBlur.shader" />
1855-
<None Include="res\shaders\SH_CS_LightAssignment.shader" />
1858+
<None Include="res\shaders\CS_LightAssignment.shader" />
18561859
<None Include="res\shaders\includes\ClusterIndexing.glsl" />
18571860
<None Include="res\shaders\includes\Reconstruction.glsl" />
18581861
<None Include="res\shaders\includes\BRDF.glsl" />
@@ -1906,6 +1909,9 @@
19061909
<None Include="res\textures\environment\T_Wood_Floor_H.ktx2" />
19071910
<None Include="res\models\MDL_Spiral.mdl" />
19081911
<None Include="res\models\MDL_Columns.mdl" />
1912+
<None Include="res\shaders\CS_SceneGI_Mipmap.shader" />
1913+
<None Include="res\shaders\includes\SharedSceneGI.glsl" />
1914+
<None Include="res\shaders\CS_SceneGI_Bake.shader" />
19091915
</ItemGroup>
19101916
<ItemGroup>
19111917
<ClCompile Include="include\glm\detail\glm.cpp">
@@ -2121,6 +2127,9 @@
21212127
<ClCompile Include="src\Rendering\VulkanRHI\Systems\VulkanLayoutCache.cpp">
21222128
<Filter>Source Files</Filter>
21232129
</ClCompile>
2130+
<ClCompile Include="src\Rendering\Passes\PassSceneGI.cpp">
2131+
<Filter>Source Files</Filter>
2132+
</ClCompile>
21242133
</ItemGroup>
21252134
<ItemGroup>
21262135
<Library Include="libs\glfw3.lib" />
File renamed without changes.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ void main()
2525
return;
2626
}
2727

28-
float2 uv = float2(coord + 0.5f.xx) / size;
28+
float2 uv = float2(coord + 0.5f.xx) / float2(size);
2929
float2 texel = 1.0f.xx / textureSize(_SourceTex, 0).xy;
3030
float3 color = 0.0f.xxx;
3131

File renamed without changes.
File renamed without changes.
File renamed without changes.

PKRenderer/res/shaders/SH_CS_PostEffectsComposite.shader renamed to PKRenderer/res/shaders/CS_PostEffectsComposite.shader

File renamed without changes.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#version 460
2+
#pragma PROGRAM_COMPUTE
3+
#include includes/Common.glsl
4+
#include includes/Reconstruction.glsl
5+
#include includes/SharedSceneGI.glsl
6+
7+
void ReprojectNeighbours(int2 basecoord, int2 coord, int2 size)
8+
{
9+
int2 coord0 = basecoord + ((PK_GI_CHECKERBOARD_OFFSET + int2(1)) % int2(2));
10+
int2 coord1 = int2(coord.x, coord0.y);
11+
int2 coord2 = int2(coord0.x, coord.y);
12+
13+
float3 worldposition0 = SampleWorldPosition(coord0, size);
14+
float3 worldposition1 = SampleWorldPosition(coord1, size);
15+
float3 worldposition2 = SampleWorldPosition(coord2, size);
16+
17+
float2 uv0 = ClipToUVW(mul(pk_MATRIX_L_VP, float4(worldposition0, 1.0f))).xy;
18+
float2 uv1 = ClipToUVW(mul(pk_MATRIX_L_VP, float4(worldposition1, 1.0f))).xy;
19+
float2 uv2 = ClipToUVW(mul(pk_MATRIX_L_VP, float4(worldposition2, 1.0f))).xy;
20+
21+
imageStore(pk_ScreenGI_Write, int3(coord0, PK_GI_DIFF_LVL), tex2D(pk_ScreenGI_Read, float3(uv0, PK_GI_DIFF_LVL)));
22+
imageStore(pk_ScreenGI_Write, int3(coord0, PK_GI_SPEC_LVL), tex2D(pk_ScreenGI_Read, float3(uv0, PK_GI_SPEC_LVL)));
23+
24+
imageStore(pk_ScreenGI_Write, int3(coord1, PK_GI_DIFF_LVL), tex2D(pk_ScreenGI_Read, float3(uv1, PK_GI_DIFF_LVL)));
25+
imageStore(pk_ScreenGI_Write, int3(coord1, PK_GI_SPEC_LVL), tex2D(pk_ScreenGI_Read, float3(uv1, PK_GI_SPEC_LVL)));
26+
27+
imageStore(pk_ScreenGI_Write, int3(coord2, PK_GI_DIFF_LVL), tex2D(pk_ScreenGI_Read, float3(uv2, PK_GI_DIFF_LVL)));
28+
imageStore(pk_ScreenGI_Write, int3(coord2, PK_GI_SPEC_LVL), tex2D(pk_ScreenGI_Read, float3(uv2, PK_GI_SPEC_LVL)));
29+
}
30+
31+
layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
32+
void main()
33+
{
34+
int2 size = imageSize(pk_ScreenGI_Write).xy;
35+
int2 basecoord = int2(gl_GlobalInvocationID.xy) * 2;
36+
int2 coord = basecoord + PK_GI_CHECKERBOARD_OFFSET;
37+
38+
if (Greater(coord, size))
39+
{
40+
return;
41+
}
42+
43+
float3 worldposition = SampleWorldPosition(coord, size);
44+
ReprojectNeighbours(basecoord, coord, size);
45+
46+
if (Greater(abs(WorldToVoxelClipSpace(worldposition)), 1.0f.xxx))
47+
{
48+
imageStore(pk_ScreenGI_Write, int3(coord, PK_GI_DIFF_LVL), float4(0.0f.xxx, 1.0f));
49+
imageStore(pk_ScreenGI_Write, int3(coord, PK_GI_SPEC_LVL), float4(0.0f.xxx, 1.0f));
50+
return;
51+
}
52+
53+
// Find a base for the side cones with the normal as one of its base vectors.
54+
const float4 NR = SampleWorldSpaceNormalRoughness(coord);
55+
const float3 N = NR.xyz;
56+
const float3 O = worldposition;
57+
const float3 V = normalize(worldposition - pk_WorldSpaceCameraPos.xyz);
58+
const float3 R = reflect(V, N);
59+
const float3 D = GlobalNoiseBlue(uint2(coord + pk_Time.xy * 512)).xyz;
60+
61+
imageStore(pk_ScreenGI_Write, int3(coord, PK_GI_DIFF_LVL), ConeTraceDiffuse(O, N, D.x));
62+
imageStore(pk_ScreenGI_Write, int3(coord, PK_GI_SPEC_LVL), ConeTraceSpecular(O, N, R, D.y, NR.w));
63+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#version 460
2+
#pragma PROGRAM_COMPUTE
3+
#include includes/Utilities.glsl
4+
5+
PK_DECLARE_SET_DRAW uniform sampler3D _SourceTex;
6+
layout(rgba16, set = PK_SET_DRAW) uniform writeonly restrict image3D _DestinationTex;
7+
8+
layout(local_size_x = 4, local_size_y = 4, local_size_z = 4) in;
9+
void main()
10+
{
11+
uint3 baseSize = uint3(textureSize(_SourceTex, 0).xyz);
12+
uint3 levelSize = gl_NumWorkGroups.xyz * gl_WorkGroupSize.xyz;
13+
int level = int(log2(float(baseSize.x)) - log2(float(levelSize.x))) - 1;
14+
float3 uvw = (float3(gl_GlobalInvocationID) + 0.5f.xxx) / float3(levelSize);
15+
imageStore(_DestinationTex, int3(gl_GlobalInvocationID), tex2DLod(_SourceTex, uvw, level));
16+
}

0 commit comments

Comments
 (0)