From 8027e6a48c276fad502d8048084904ff341cbd15 Mon Sep 17 00:00:00 2001 From: Alexander Gauggel <agauggel@uni-koblenz.de> Date: Sun, 20 Jun 2021 11:47:32 +0200 Subject: [PATCH] [#82] Load normal and specular textures --- .../resources/shaders/perMeshResources.inc | 4 +- projects/voxelization/src/main.cpp | 47 +++++++++++++++---- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/projects/voxelization/resources/shaders/perMeshResources.inc b/projects/voxelization/resources/shaders/perMeshResources.inc index 95e4fb7c..b1523713 100644 --- a/projects/voxelization/resources/shaders/perMeshResources.inc +++ b/projects/voxelization/resources/shaders/perMeshResources.inc @@ -1,2 +1,4 @@ layout(set=1, binding=0) uniform texture2D albedoTexture; -layout(set=1, binding=1) uniform sampler textureSampler; \ No newline at end of file +layout(set=1, binding=1) uniform sampler textureSampler; +layout(set=1, binding=2) uniform texture2D normalTexture; +layout(set=1, binding=3) uniform texture2D specularTexture; \ No newline at end of file diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp index 309c75d5..f679a345 100644 --- a/projects/voxelization/src/main.cpp +++ b/projects/voxelization/src/main.cpp @@ -186,24 +186,55 @@ int main(int argc, const char** argv) { std::vector<vkcv::Image> sceneImages; for (const auto& material : scene.materials) { - int baseColorIndex = material.baseColor; - if (baseColorIndex < 0) { - vkcv_log(vkcv::LogLevel::WARNING, "Material lacks base color"); - baseColorIndex = 0; + int albedoIndex = material.baseColor; + int normalIndex = material.normal; + int specularIndex = material.metalRough; + + if (albedoIndex < 0) { + vkcv_log(vkcv::LogLevel::WARNING, "Material lacks albedo"); + albedoIndex = 0; + } + if (normalIndex < 0) { + vkcv_log(vkcv::LogLevel::WARNING, "Material lacks normal"); + normalIndex = 0; + } + if (specularIndex < 0) { + vkcv_log(vkcv::LogLevel::WARNING, "Material lacks specular"); + specularIndex = 0; } materialDescriptorSets.push_back(core.createDescriptorSet(forwardProgram.getReflectedDescriptors()[1])); - vkcv::asset::Texture& sceneTexture = scene.textures[baseColorIndex]; + vkcv::asset::Texture& albedoTexture = scene.textures[albedoIndex]; + vkcv::asset::Texture& normalTexture = scene.textures[normalIndex]; + vkcv::asset::Texture& specularTexture = scene.textures[specularIndex]; + + // albedo texture + sceneImages.push_back(core.createImage(vk::Format::eR8G8B8A8Srgb, albedoTexture.w, albedoTexture.h, 1, true)); + sceneImages.back().fill(albedoTexture.data.data()); + sceneImages.back().generateMipChainImmediate(); + sceneImages.back().switchLayout(vk::ImageLayout::eShaderReadOnlyOptimal); + const vkcv::ImageHandle albedoHandle = sceneImages.back().getHandle(); + + // normal texture + sceneImages.push_back(core.createImage(vk::Format::eR8G8B8A8Srgb, normalTexture.w, normalTexture.h, 1, true)); + sceneImages.back().fill(normalTexture.data.data()); + sceneImages.back().generateMipChainImmediate(); + sceneImages.back().switchLayout(vk::ImageLayout::eShaderReadOnlyOptimal); + const vkcv::ImageHandle normalHandle = sceneImages.back().getHandle(); - sceneImages.push_back(core.createImage(vk::Format::eR8G8B8A8Srgb, sceneTexture.w, sceneTexture.h, 1, true)); - sceneImages.back().fill(sceneTexture.data.data()); + // specular texture + sceneImages.push_back(core.createImage(vk::Format::eR8G8B8A8Srgb, specularTexture.w, specularTexture.h, 1, true)); + sceneImages.back().fill(specularTexture.data.data()); sceneImages.back().generateMipChainImmediate(); sceneImages.back().switchLayout(vk::ImageLayout::eShaderReadOnlyOptimal); + const vkcv::ImageHandle specularHandle = sceneImages.back().getHandle(); vkcv::DescriptorWrites setWrites; setWrites.sampledImageWrites = { - vkcv::SampledImageDescriptorWrite(0, sceneImages.back().getHandle()) + vkcv::SampledImageDescriptorWrite(0, albedoHandle), + vkcv::SampledImageDescriptorWrite(2, normalHandle), + vkcv::SampledImageDescriptorWrite(3, specularHandle) }; setWrites.samplerWrites = { vkcv::SamplerDescriptorWrite(1, colorSampler), -- GitLab