anvilkit-render
渲染引擎 — 统一 2D/3D 渲染管线
anvilkit-render 是 AnvilKit 的核心渲染模块,基于 wgpu 提供统一的 2D/3D 渲染能力。
架构
渲染系统采用提取 (Extract) 架构:
主 World → Extract → RenderWorld → 各渲染器 → GPU每帧从主 ECS World 提取渲染所需的数据(变换、材质、可见性),然后由各渲染器独立处理 draw call。
渲染器
3D 渲染
- PBR 材质 — 金属度/粗糙度工作流,支持 albedo、normal、metallic-roughness 贴图
- HDR + Tonemap — Rgba16Float 渲染目标 + ACES Filmic 色调映射
- IBL — 基于 cubemap 的环境光照(漫反射辐照度 + 镜面反射)
- 阴影 — 方向光级联阴影贴图
- MSAA — 多重采样抗锯齿
- 视锥体剔除 — 基于 bounding sphere 的快速剔除
- GPU 实例化 — 相同 mesh 的批量绘制
2D 渲染
- Sprite — 精灵图渲染(支持图集、翻转、着色)
- Line — 线段绘制(调试、辅助线)
- Text — 文本渲染
- Particle — 粒子效果系统
- UI — 基于
taffy布局的 UI 元素
RenderPlugin
use anvilkit_render::prelude::*;
app.add_plugin(RenderPlugin {
window_title: "My Game".to_string(),
width: 1280,
height: 720,
vsync: true,
msaa_samples: 4,
..Default::default()
});资源管理
RenderAssets 通过 Handle 系统管理 GPU 资源:
// 上传纹理
let handle = render_assets.upload_texture(device, queue, &texture_data);
// 上传网格
let mesh_handle = render_assets.upload_mesh(device, &mesh_data);
// 查找资源
if let Some(texture) = render_assets.get_texture(handle) {
// 使用纹理
}自定义渲染管线
对于不需要 PBR 的场景(如体素游戏),可以绕过内置管线直接使用 wgpu。
详见 自定义渲染管线指南。