diff --git a/res/shaders/BasePass.slang b/res/shaders/BasePass.slang index 19c199c..4f42b91 100644 --- a/res/shaders/BasePass.slang +++ b/res/shaders/BasePass.slang @@ -46,12 +46,12 @@ float4 fragmentMain(in FragmentParameter params) : SV_Target { uint cascadeIndex = 0; for (uint c = 0; c < NUM_CASCADES - 1; ++c) { - if (params.position_VS.z < pShadowMapping.cascadeSplits[c]) { + if (params.position_VS.z > pShadowMapping.cascadeSplits[c]) { cascadeIndex = c + 1; } } float4 lightSpacePos = mul(pShadowMapping.lightSpaceMatrices[cascadeIndex][i], float4(params.position_WS, 1)); - lightSpacePos = mul(biasMat, lightSpacePos); + lightSpacePos = float4(lightSpacePos.xy * 0.5 + 0.5, lightSpacePos.zw); float4 shadowCoord = lightSpacePos; int3 texDim; pShadowMapping.shadowMaps[cascadeIndex].GetDimensions(texDim.x, texDim.y, texDim.z); @@ -62,12 +62,12 @@ float4 fragmentMain(in FragmentParameter params) : SV_Target float shadowFactor = 0.0f; int count = 0; int range = 1; - for (int x = -range; x <= range; ++x) { - for (int y = -range; y <= range; ++y) { + //for (int x = -range; x <= range; ++x) { + // for (int y = -range; y <= range; ++y) { float shadow = 1.0f; if (shadowCoord.z > 0.0 && shadowCoord.z < 1.0) { - float dist = pShadowMapping.shadowMaps[cascadeIndex].Sample(pShadowMapping.shadowSampler, float3(shadowCoord.xy + float2(dx * x, dy * y), i)).r; + float dist = pShadowMapping.shadowMaps[cascadeIndex].Sample(pShadowMapping.shadowSampler, float3(shadowCoord.xy, i)).r; if (shadowCoord.w > 0 && dist < shadowCoord.z) { shadow = 0; @@ -75,8 +75,8 @@ float4 fragmentMain(in FragmentParameter params) : SV_Target } shadowFactor += shadow; count++; - } - } + // } + //} result = (shadowFactor / count) * pLightEnv.directionalLights[i].illuminate(lightingParams, brdf); } diff --git a/res/shaders/Skybox.slang b/res/shaders/Skybox.slang index 6137ca9..6fca6bf 100644 --- a/res/shaders/Skybox.slang +++ b/res/shaders/Skybox.slang @@ -78,6 +78,7 @@ VertexShaderOutput vertexMain( float4 worldPos = float4(mul(cameraRotation, vertices[vertexIndex]), 1.0f); //clip(dot(worldPos, clipPlane)); output.clipPos = mul(pViewParams.projectionMatrix, worldPos); + output.clipPos.z = output.clipPos.w - 0.0001f; // Push to far plane output.texCoords = normalize(vertices[vertexIndex]); return output; } diff --git a/src/Editor/main.cpp b/src/Editor/main.cpp index 523d479..9fc664e 100644 --- a/src/Editor/main.cpp +++ b/src/Editor/main.cpp @@ -63,6 +63,10 @@ int main() { // .filePath = sourcePath / "import" / "models" / "main1_sponza" / "sponza.gltf", // .importPath = "sponza", //}); + AssetImporter::importMesh(MeshImportArgs{ + .filePath = sourcePath / "import" / "models" / "cube.fbx", + .importPath = "", + }); AssetImporter::importMesh(MeshImportArgs{ .filePath = sourcePath / "import" / "models" / "rttest.gltf", .importPath = "rttest", diff --git a/src/Engine/Graphics/RenderPass/BasePass.cpp b/src/Engine/Graphics/RenderPass/BasePass.cpp index 1c9a1c8..59124a8 100644 --- a/src/Engine/Graphics/RenderPass/BasePass.cpp +++ b/src/Engine/Graphics/RenderPass/BasePass.cpp @@ -673,6 +673,10 @@ void BasePass::createRenderPass() { { .polygonMode = Gfx::SE_POLYGON_MODE_FILL, }, + .depthStencilState = { + .depthTestEnable = true, + .depthCompareOp = Gfx::SE_COMPARE_OP_GREATER, + }, .colorBlend = { .attachmentCount = 1, diff --git a/src/Engine/Graphics/RenderPass/ShadowPass.cpp b/src/Engine/Graphics/RenderPass/ShadowPass.cpp index 06ff2ac..1e5cc6b 100644 --- a/src/Engine/Graphics/RenderPass/ShadowPass.cpp +++ b/src/Engine/Graphics/RenderPass/ShadowPass.cpp @@ -50,10 +50,10 @@ void ShadowPass::beginFrame(const Component::Camera& camera, const Component::Tr float nearClip = camera.nearPlane; float farClip = camera.farPlane; - float clipRange = nearClip - farClip; + float clipRange = farClip - nearClip; - float minZ = farClip; - float maxZ = nearClip; + float minZ = nearClip; + float maxZ = farClip; float range = maxZ - minZ; float ratio = maxZ / minZ; @@ -63,8 +63,8 @@ void ShadowPass::beginFrame(const Component::Camera& camera, const Component::Tr float log = minZ * std::pow(ratio, p); float uniform = minZ + range * p; float d = cascadeSplitLambda * (log - uniform) + uniform; - cascadeSplits[i] = (d - farClip) / clipRange; - splitDepths[i] = farClip + cascadeSplits[i] * clipRange; + cascadeSplits[i] = (d - nearClip) / clipRange; + splitDepths[i] = farClip - cascadeSplits[i] * clipRange; cascades[i].viewParams.clear(); } cascadeSplitsBuffer->updateContents(0, sizeof(float) * NUM_CASCADES, splitDepths); @@ -111,7 +111,7 @@ void ShadowPass::beginFrame(const Component::Camera& camera, const Component::Tr Vector cameraPos = frustumCenter - lightDir * -minExtents.z; Matrix4 viewMatrix = glm::lookAt(cameraPos, frustumCenter, Vector(0, 1, 0)); Matrix4 projectionMatrix = - orthographicProjection(minExtents.x, maxExtents.x, minExtents.y, maxExtents.y, 0.0f, maxExtents.z - minExtents.z); + orthographicProjection(minExtents.x, maxExtents.x, minExtents.y, maxExtents.y, maxExtents.z - minExtents.z, 0.0f); Matrix4 viewProjectionMatrix = projectionMatrix * viewMatrix; viewParams = { .viewMatrix = viewMatrix, diff --git a/src/Engine/Graphics/VertexData.cpp b/src/Engine/Graphics/VertexData.cpp index b5d6523..5525096 100644 --- a/src/Engine/Graphics/VertexData.cpp +++ b/src/Engine/Graphics/VertexData.cpp @@ -619,7 +619,7 @@ void VertexData::loadMeshlets(MeshId id, const Array& loadedPositions, c // todo: use meshopt for bb generation m.bounding = AABB(); for (size_t j = 0; j < m.vertexIndices.size; ++j) { - m.bounding.adjust(loadedPositions[vertexIndices[meshoptMeshlets[i].vertex_offset + j]]); + m.bounding.adjust(loadedPositions[vertexIndices[meshoptMeshlets[i].vertex_offset + j + m.indicesOffset]]); } } registeredMeshes[id].meshData = MeshData{ diff --git a/src/Engine/Graphics/Vulkan/Descriptor.h b/src/Engine/Graphics/Vulkan/Descriptor.h index 2ba3b9c..44e1083 100644 --- a/src/Engine/Graphics/Vulkan/Descriptor.h +++ b/src/Engine/Graphics/Vulkan/Descriptor.h @@ -38,7 +38,6 @@ public: DescriptorSetHandle(PGraphics graphics, const std::string& name); virtual ~DescriptorSetHandle(); constexpr VkDescriptorSet getHandle() const { return handle; } - PGraphics graphics; VkDescriptorSet handle = VK_NULL_HANDLE; OBufferAllocation constantsBuffer; bool isUsed = false;