Adding prefiltered specular reflections
This commit is contained in:
@@ -14,10 +14,14 @@ class EnvironmentMapAsset : public Asset {
|
||||
Gfx::PTextureCube getSkybox() const { return skybox; }
|
||||
Gfx::PTextureCube getIrradianceMap() const { return irradianceMap; }
|
||||
Gfx::PTextureCube getPrefilteredMap() const { return prefilteredMap; }
|
||||
Gfx::PTexture2D getBrdfLUT() const { return brdfLUT; }
|
||||
Gfx::PSampler getLUTSampler() const { return lutSampler; }
|
||||
private:
|
||||
Gfx::OTextureCube skybox;
|
||||
Gfx::OTextureCube irradianceMap;
|
||||
Gfx::OTextureCube prefilteredMap;
|
||||
Gfx::PTexture2D brdfLUT;
|
||||
Gfx::PSampler lutSampler;
|
||||
friend class EnvironmentLoader;
|
||||
};
|
||||
} // namespace Seele
|
||||
@@ -79,8 +79,8 @@ BasePass::BasePass(Gfx::PGraphics graphics, PScene scene) : RenderPass(graphics)
|
||||
});
|
||||
}
|
||||
skybox = Seele::Component::Skybox{
|
||||
.day = scene->getLightEnvironment()->getEnvironmentMap()->getPrefilteredMap(),
|
||||
.night = scene->getLightEnvironment()->getEnvironmentMap()->getPrefilteredMap(),
|
||||
.day = scene->getLightEnvironment()->getEnvironmentMap()->getSkybox(),
|
||||
.night = scene->getLightEnvironment()->getEnvironmentMap()->getSkybox(),
|
||||
.fogColor = Vector(0, 0, 0),
|
||||
.blendFactor = 0,
|
||||
};
|
||||
|
||||
@@ -60,7 +60,7 @@ RayTracingPass::RayTracingPass(Gfx::PGraphics graphics, PScene scene) : RenderPa
|
||||
.useMaterial = true,
|
||||
.rayTracing = true,
|
||||
});
|
||||
skyBox = AssetRegistry::findEnvironmentMap("", "newport_loft")->getIrradianceMap();
|
||||
skyBox = AssetRegistry::findEnvironmentMap("", "newport_loft")->getSkybox();
|
||||
skyBoxSampler = graphics->createSampler({});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#include "LightEnvironment.h"
|
||||
#include "Asset/AssetRegistry.h"
|
||||
#include "Asset/EnvironmentMapAsset.h"
|
||||
#include "Graphics/Descriptor.h"
|
||||
#include "Graphics/Enums.h"
|
||||
#include "Graphics/Graphics.h"
|
||||
|
||||
using namespace Seele;
|
||||
@@ -40,6 +42,18 @@ LightEnvironment::LightEnvironment(Gfx::PGraphics graphics)
|
||||
.name = "irradianceSampler",
|
||||
.descriptorType = Gfx::SE_DESCRIPTOR_TYPE_SAMPLER,
|
||||
});
|
||||
layout->addDescriptorBinding(Gfx::DescriptorBinding{
|
||||
.name = "prefilteredMap",
|
||||
.descriptorType = Gfx::SE_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
|
||||
});
|
||||
layout->addDescriptorBinding(Gfx::DescriptorBinding{
|
||||
.name = "brdfLUT",
|
||||
.descriptorType = Gfx::SE_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
|
||||
});
|
||||
layout->addDescriptorBinding(Gfx::DescriptorBinding{
|
||||
.name = "lutSampler",
|
||||
.descriptorType = Gfx::SE_DESCRIPTOR_TYPE_SAMPLER,
|
||||
});
|
||||
layout->create();
|
||||
|
||||
directionalLights = graphics->createShaderBuffer(ShaderBufferCreateInfo{
|
||||
@@ -128,6 +142,9 @@ void LightEnvironment::commit() {
|
||||
set->updateBuffer("pointLights", 0, pointLights);
|
||||
set->updateTexture("irradianceMap", 0, environment->getIrradianceMap()->getDefaultView());
|
||||
set->updateSampler("irradianceSampler", 0, environmentSampler);
|
||||
set->updateTexture("prefilteredMap", 0, environment->getPrefilteredMap()->getDefaultView());
|
||||
set->updateTexture("brdfLUT", 0, environment->getBrdfLUT()->getDefaultView());
|
||||
set->updateSampler("lutSampler", 0, environment->getLUTSampler());
|
||||
set->writeChanges();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user