feat: 环境背景管线(IBL 阶段①)——HDR 等距柱状转 cube + Skybox pass
- Cubemap:stbi_loadf 加载 .hdr,CPU 双线性重采样 6 面(GL 规范方向表), f32→fp16 转换后整块上传 eCubeCompatible image(R16G16B16A16Sfloat) - SkyboxPass:HDRColor 的 first writer,承担清屏职责;无环境贴图自动 退化为纯清屏(Forward 不受影响) - frag 逐像素 NDC 反投影取世界方向(invVP push,投影变换不可线性插值) - Forward color 附件 Clear→Load:几何合成在天空之上 - SceneRenderer 产出 skyInvVP = inverse(proj × mat4(mat3(view)))
This commit is contained in:
@@ -12,8 +12,10 @@
|
||||
#include <Engine/Renderer/Passes/SceneGpu.h>
|
||||
#include <Engine/Renderer/Passes/FullscreenGpu.h>
|
||||
#include <Engine/Renderer/Passes/RenderPass.h>
|
||||
#include <Engine/Renderer/Passes/SkyboxPass.h>
|
||||
#include <Engine/Renderer/Passes/ShadowPass.h>
|
||||
#include <Engine/Renderer/Passes/ForwardPass.h>
|
||||
#include <Engine/Renderer/Cubemap.h>
|
||||
#include <Engine/Renderer/Passes/TAAPass.h>
|
||||
#include <Engine/Renderer/Passes/BloomPass.h>
|
||||
#include <Engine/Renderer/Passes/TonemapPass.h>
|
||||
@@ -38,6 +40,7 @@
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
#include <array>
|
||||
#include <filesystem>
|
||||
#include <limits>
|
||||
|
||||
namespace Engine
|
||||
@@ -71,6 +74,14 @@ namespace Engine
|
||||
m_FullscreenGpu = CreateScope<Passes::FullscreenGpu>(
|
||||
*m_Device, *m_DescriptorManager, *m_ShaderManager);
|
||||
|
||||
// 3.5 环境贴图(IBL 阶段①):HDR 等距柱状 → cube。
|
||||
// 文件缺失则跳过(SkyboxPass 自动退化为纯清屏,Forward 不受影响)
|
||||
const std::string envPath = "assets/textures/venice_dawn_1_4k.hdr";
|
||||
if (std::filesystem::exists(envPath)) {
|
||||
m_Environment = Cubemap::CreateFromHdrEquirect(
|
||||
*m_Device, *m_Allocator, envPath, 1024);
|
||||
}
|
||||
|
||||
// 4. Swapchain(只管呈现;渲染目标统一归 RenderGraph)
|
||||
m_Swapchain = CreateScope<Swapchain>(*m_Device, *m_Allocator, m_Window);
|
||||
m_Extent = m_Swapchain->GetExtent();
|
||||
@@ -228,6 +239,10 @@ namespace Engine
|
||||
FrameSceneData& frame = m_SceneRenderer->Frame();
|
||||
m_Passes.push_back(CreateScope<Passes::ShadowPass>(
|
||||
*m_SceneGpu, frame, m_ShadowMaps));
|
||||
// Skybox = HDRColor 的 first writer(清屏 + 画背景),先于 Forward 注册
|
||||
m_Passes.push_back(CreateScope<Passes::SkyboxPass>(
|
||||
*m_Device, *m_ShaderManager, *m_DescriptorManager, frame,
|
||||
m_HDRColor, m_Environment.get()));
|
||||
m_Passes.push_back(CreateScope<Passes::ForwardPass>(
|
||||
*m_SceneGpu, frame, m_HDRColor, m_Velocity, m_Depth, m_ShadowMaps));
|
||||
m_Passes.push_back(CreateScope<Passes::TAAPass>(
|
||||
|
||||
Reference in New Issue
Block a user