Files
HelloVulkan/Engine/include/Engine/Assets/IAssetUploader.h
T
atdunbg b25fa29fe5 feat: 透明材质 alpha blending——独立队列 + 线性 over 混合 + 距离排序
透明来源: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
多实例不做实例级排序。
2026-09-25 16:57:27 +08:00

55 lines
2.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// Created by atdunbg on 2026/9/23.
//
// IAssetUploader:资产层 → GPU 的上传接口。
//
// 资产层(AssetManager/AssetCache)只认这个接口,不感知 Vulkan 具体类
// (Device/Allocator/DescriptorManager)。实现由渲染层提供
// (VulkanAssetUploader),组合根(Renderer)装配后注入。
//
// 对齐 UE:资产系统(AssetManager/StreamableManager)与渲染资源创建
// (rendering thread / RHI)分离,资产层只拿到"可用的渲染资源"。
//
// 后续演进点:接口加返回 future / 回调即为异步加载
// (IO 线程解析 → 上传队列提交),本接口已是正确的接缝。
//
#ifndef HELLOVULKAN_IASSETUPLOADER_H
#define HELLOVULKAN_IASSETUPLOADER_H
#include <Engine/Core/Types.h>
#include <Engine/Renderer/Model.h>
#include <Engine/Renderer/Cubemap.h>
namespace Engine::Assets {
class IAssetUploader {
public:
virtual ~IAssetUploader() = default;
// 磁盘模型 → 解析 + GPU 上传(失败返回 nullptr)
virtual Scope<Model> LoadModel(const std::string& path) = 0;
// 异步路径:解析已在后台线程完成,此调用只做 GPU 构建(主线程)
virtual Scope<Model> LoadModel(const std::string& path,
ParsedModel&& parsed) = 0;
// 程序化纯色平面(size 为半边长)
virtual Scope<Model> CreatePlane(f32 halfSize, u8 r, u8 g, u8 b) = 0;
// 半透明纯色平面(alpha 0-255,透明绘制队列)
virtual Scope<Model> CreateTransparentPlane(f32 halfSize,
u8 r, u8 g, u8 b, u8 a) = 0;
// 环境 HDR → IBL 预积分四件套(compute 生成,毫秒级;失败返回 nullptr)
virtual Scope<Cubemap> LoadEnvironment(const std::string& path) = 0;
// 异步加载路径:解码已在后台线程完成,此调用只做 GPU 生成(主线程)
virtual Scope<Cubemap> LoadEnvironment(const std::string& path,
DecodedEquirect&& decoded) = 0;
};
} // namespace Engine::Assets
#endif //HELLOVULKAN_IASSETUPLOADER_H