透明来源:glTF alphaMode=BLEND(解析期读取,OBJ/FBX 恒不透明—— 资产格式定义写死);MASK 后续演进。Material 加透明语义(入缓存键), 程序化测试资产 CreateTransparentPlane(RGBA 纯色纹理)。 SceneRenderer:透明材质实例收集进独立 scratch(仅主视图,不投 阴影——alpha 阴影后续演进),batch 按平均距离降序排序(远→近, batchMats 同步重排),SSBO 扁平化顺序 = 排序后顺序。 ForwardPass 两段绘制:不透明(无混合 + 深度写)→ 透明(Shader Object 动态状态切 SRC_ALPHA/ONE_MINUS_SRC_ALPHA 线性 over + 深度 只测不写);velocity 附件透明段直写(透明表面 velocity 即自身运动)。 frag alpha = albedo 贴图 a 直通,预乘在 tonemap 段(hard constraint 不变)。已知边界:TAA alpha 时域混合(透明边缘几帧渐显);同 batch 多实例不做实例级排序。
55 lines
2.1 KiB
C++
55 lines
2.1 KiB
C++
//
|
||
// Created by atdunbg on 2026/9/23.
|
||
//
|
||
// VulkanAssetUploader:IAssetUploader 的渲染层实现。
|
||
//
|
||
// 属于渲染层对资产层提供的服务:持有 GPU 上下文,负责把解析后的
|
||
// 资产数据创建为 Vulkan 资源。资产层(AssetManager)只看到接口,
|
||
// 不知道 Device/Allocator 的存在——依赖方向:Assets → IAssetUploader
|
||
// ← VulkanAssetUploader(渲染层),永远不出现 Assets → Vulkan 具体。
|
||
//
|
||
|
||
#ifndef HELLOVULKAN_VULKANASSETUPLOADER_H
|
||
#define HELLOVULKAN_VULKANASSETUPLOADER_H
|
||
|
||
#include <Engine/Assets/IAssetUploader.h>
|
||
|
||
namespace Engine {
|
||
|
||
class Device;
|
||
class MemoryAllocator;
|
||
class DescriptorManager;
|
||
class IblGenerator;
|
||
|
||
class VulkanAssetUploader final : public Assets::IAssetUploader {
|
||
public:
|
||
VulkanAssetUploader(Device& device, MemoryAllocator& allocator,
|
||
DescriptorManager& descriptors,
|
||
vk::DescriptorSetLayout textureLayout,
|
||
IblGenerator& ibl)
|
||
: m_Device(device), m_Allocator(allocator),
|
||
m_Descriptors(descriptors), m_TextureLayout(textureLayout),
|
||
m_Ibl(ibl) {}
|
||
|
||
Scope<Model> LoadModel(const std::string& path) override;
|
||
Scope<Model> LoadModel(const std::string& path,
|
||
ParsedModel&& parsed) override;
|
||
Scope<Model> CreatePlane(f32 halfSize, u8 r, u8 g, u8 b) override;
|
||
Scope<Model> CreateTransparentPlane(f32 halfSize,
|
||
u8 r, u8 g, u8 b, u8 a) override;
|
||
Scope<Cubemap> LoadEnvironment(const std::string& path) override;
|
||
Scope<Cubemap> LoadEnvironment(const std::string& path,
|
||
DecodedEquirect&& decoded) override;
|
||
|
||
private:
|
||
Device& m_Device;
|
||
MemoryAllocator& m_Allocator;
|
||
DescriptorManager& m_Descriptors;
|
||
vk::DescriptorSetLayout m_TextureLayout;
|
||
IblGenerator& m_Ibl; // 环境 IBL 预积分的 compute 生成端
|
||
};
|
||
|
||
} // namespace Engine
|
||
|
||
#endif //HELLOVULKAN_VULKANASSETUPLOADER_H
|