parent
8e98d10f74
commit
8c376121c3
16 changed files with 46 additions and 16 deletions
Binary file not shown.
Binary file not shown.
|
|
@ -6,10 +6,21 @@ layout (location = 0) in vec2 inUV;
|
||||||
|
|
||||||
layout (location = 0) out vec4 outFragColor;
|
layout (location = 0) out vec4 outFragColor;
|
||||||
|
|
||||||
|
layout (binding = 0) uniform UBO
|
||||||
|
{
|
||||||
|
mat4 projection;
|
||||||
|
mat4 view;
|
||||||
|
mat4 model;
|
||||||
|
mat4 lightSpace;
|
||||||
|
vec4 lightPos;
|
||||||
|
float zNear;
|
||||||
|
float zFar;
|
||||||
|
} ubo;
|
||||||
|
|
||||||
float LinearizeDepth(float depth)
|
float LinearizeDepth(float depth)
|
||||||
{
|
{
|
||||||
float n = 1.0; // camera z near
|
float n = ubo.zNear;
|
||||||
float f = 128.0; // camera z far
|
float f = ubo.zFar;
|
||||||
float z = depth;
|
float z = depth;
|
||||||
return (2.0 * n) / (f + n - z * (f - n));
|
return (2.0 * n) / (f + n - z * (f - n));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -11,7 +11,9 @@ layout (binding = 0) uniform UBO
|
||||||
mat4 view;
|
mat4 view;
|
||||||
mat4 model;
|
mat4 model;
|
||||||
mat4 lightSpace;
|
mat4 lightSpace;
|
||||||
vec3 lightPos;
|
vec4 lightPos;
|
||||||
|
float zNear;
|
||||||
|
float zFar;
|
||||||
} ubo;
|
} ubo;
|
||||||
|
|
||||||
layout (location = 0) out vec3 outNormal;
|
layout (location = 0) out vec3 outNormal;
|
||||||
|
|
@ -20,11 +22,6 @@ layout (location = 2) out vec3 outViewVec;
|
||||||
layout (location = 3) out vec3 outLightVec;
|
layout (location = 3) out vec3 outLightVec;
|
||||||
layout (location = 4) out vec4 outShadowCoord;
|
layout (location = 4) out vec4 outShadowCoord;
|
||||||
|
|
||||||
out gl_PerVertex
|
|
||||||
{
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
const mat4 biasMat = mat4(
|
const mat4 biasMat = mat4(
|
||||||
0.5, 0.0, 0.0, 0.0,
|
0.5, 0.0, 0.0, 0.0,
|
||||||
0.0, 0.5, 0.0, 0.0,
|
0.0, 0.5, 0.0, 0.0,
|
||||||
|
|
@ -40,7 +37,7 @@ void main()
|
||||||
|
|
||||||
vec4 pos = ubo.model * vec4(inPos, 1.0);
|
vec4 pos = ubo.model * vec4(inPos, 1.0);
|
||||||
outNormal = mat3(ubo.model) * inNormal;
|
outNormal = mat3(ubo.model) * inNormal;
|
||||||
outLightVec = normalize(ubo.lightPos - inPos);
|
outLightVec = normalize(ubo.lightPos.xyz - inPos);
|
||||||
outViewVec = -pos.xyz;
|
outViewVec = -pos.xyz;
|
||||||
|
|
||||||
outShadowCoord = ( biasMat * ubo.lightSpace * ubo.model ) * vec4(inPos, 1.0);
|
outShadowCoord = ( biasMat * ubo.lightSpace * ubo.model ) * vec4(inPos, 1.0);
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -3,10 +3,23 @@
|
||||||
Texture2D textureColor : register(t1);
|
Texture2D textureColor : register(t1);
|
||||||
SamplerState samplerColor : register(s1);
|
SamplerState samplerColor : register(s1);
|
||||||
|
|
||||||
|
struct UBO
|
||||||
|
{
|
||||||
|
float4x4 projection;
|
||||||
|
float4x4 view;
|
||||||
|
float4x4 model;
|
||||||
|
float4x4 lightSpace;
|
||||||
|
float4 lightPos;
|
||||||
|
float zNear;
|
||||||
|
float zFar;
|
||||||
|
};
|
||||||
|
|
||||||
|
cbuffer ubo : register(b0) { UBO ubo; }
|
||||||
|
|
||||||
float LinearizeDepth(float depth)
|
float LinearizeDepth(float depth)
|
||||||
{
|
{
|
||||||
float n = 1.0; // camera z near
|
float n = ubo.zNear;
|
||||||
float f = 128.0; // camera z far
|
float f = ubo.zFar;
|
||||||
float z = depth;
|
float z = depth;
|
||||||
return (2.0 * n) / (f + n - z * (f - n));
|
return (2.0 * n) / (f + n - z * (f - n));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -14,7 +14,9 @@ struct UBO
|
||||||
float4x4 view;
|
float4x4 view;
|
||||||
float4x4 model;
|
float4x4 model;
|
||||||
float4x4 lightSpace;
|
float4x4 lightSpace;
|
||||||
float3 lightPos;
|
float4 lightPos;
|
||||||
|
float zNear;
|
||||||
|
float zFar;
|
||||||
};
|
};
|
||||||
|
|
||||||
cbuffer ubo : register(b0) { UBO ubo; }
|
cbuffer ubo : register(b0) { UBO ubo; }
|
||||||
|
|
@ -45,7 +47,7 @@ VSOutput main(VSInput input)
|
||||||
|
|
||||||
float4 pos = mul(ubo.model, float4(input.Pos, 1.0));
|
float4 pos = mul(ubo.model, float4(input.Pos, 1.0));
|
||||||
output.Normal = mul((float3x3)ubo.model, input.Normal);
|
output.Normal = mul((float3x3)ubo.model, input.Normal);
|
||||||
output.LightVec = normalize(ubo.lightPos - input.Pos);
|
output.LightVec = normalize(ubo.lightPos.xyz - input.Pos);
|
||||||
output.ViewVec = -pos.xyz;
|
output.ViewVec = -pos.xyz;
|
||||||
|
|
||||||
output.ShadowCoord = mul(biasMat, mul(ubo.lightSpace, mul(ubo.model, float4(input.Pos, 1.0))));
|
output.ShadowCoord = mul(biasMat, mul(ubo.lightSpace, mul(ubo.model, float4(input.Pos, 1.0))));
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -56,7 +56,10 @@ public:
|
||||||
glm::mat4 view;
|
glm::mat4 view;
|
||||||
glm::mat4 model;
|
glm::mat4 model;
|
||||||
glm::mat4 depthBiasMVP;
|
glm::mat4 depthBiasMVP;
|
||||||
glm::vec3 lightPos;
|
glm::vec4 lightPos;
|
||||||
|
// Used for depth map visualization
|
||||||
|
float zNear;
|
||||||
|
float zFar;
|
||||||
} uboVSscene;
|
} uboVSscene;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
|
@ -384,7 +387,7 @@ public:
|
||||||
// Shared pipeline layout for all pipelines used in this sample
|
// Shared pipeline layout for all pipelines used in this sample
|
||||||
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
|
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
|
||||||
// Binding 0 : Vertex shader uniform buffer
|
// Binding 0 : Vertex shader uniform buffer
|
||||||
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0),
|
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0),
|
||||||
// Binding 1 : Fragment shader image sampler (shadow map)
|
// Binding 1 : Fragment shader image sampler (shadow map)
|
||||||
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1)
|
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1)
|
||||||
};
|
};
|
||||||
|
|
@ -409,6 +412,8 @@ public:
|
||||||
VkDescriptorSetAllocateInfo allocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayout, 1);
|
VkDescriptorSetAllocateInfo allocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayout, 1);
|
||||||
VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSets.debug));
|
VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSets.debug));
|
||||||
writeDescriptorSets = {
|
writeDescriptorSets = {
|
||||||
|
// Binding 0 : Parameters uniform buffer
|
||||||
|
vks::initializers::writeDescriptorSet(descriptorSets.debug, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.scene.descriptor),
|
||||||
// Binding 1 : Fragment shader texture sampler
|
// Binding 1 : Fragment shader texture sampler
|
||||||
vks::initializers::writeDescriptorSet(descriptorSets.debug, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &shadowMapDescriptor)
|
vks::initializers::writeDescriptorSet(descriptorSets.debug, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &shadowMapDescriptor)
|
||||||
};
|
};
|
||||||
|
|
@ -542,8 +547,10 @@ public:
|
||||||
uboVSscene.projection = camera.matrices.perspective;
|
uboVSscene.projection = camera.matrices.perspective;
|
||||||
uboVSscene.view = camera.matrices.view;
|
uboVSscene.view = camera.matrices.view;
|
||||||
uboVSscene.model = glm::mat4(1.0f);
|
uboVSscene.model = glm::mat4(1.0f);
|
||||||
uboVSscene.lightPos = lightPos;
|
uboVSscene.lightPos = glm::vec4(lightPos, 1.0f);
|
||||||
uboVSscene.depthBiasMVP = uboOffscreenVS.depthMVP;
|
uboVSscene.depthBiasMVP = uboOffscreenVS.depthMVP;
|
||||||
|
uboVSscene.zNear = zNear;
|
||||||
|
uboVSscene.zFar = zFar;
|
||||||
memcpy(uniformBuffers.scene.mapped, &uboVSscene, sizeof(uboVSscene));
|
memcpy(uniformBuffers.scene.mapped, &uboVSscene, sizeof(uboVSscene));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue