透明来源: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.2 KiB
C++
55 lines
2.2 KiB
C++
//
|
||
// 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
|