6个版本
0.0.7 | 2021年2月6日 |
---|---|
0.0.6 | 2021年2月4日 |
0.0.5 | 2021年1月31日 |
#2283 in 游戏开发
2.5MB
56K SLoC
Rafx
Rafx是一个多后端渲染器,优先考虑性能、灵活性和生产力。它可以选择性地集成distill
资源管道,为多学科团队的实时项目提供工作流程和工具。
本包包含几个层次
rafx-api
:低级图形API抽象rafx-framework
:中级框架,简化资源管理、生命周期处理和绘制调用调度rafx-assets
:与distill
集成的资源层
Rafx还提供构建着色器和打包资源的工具。
Rafx通过vulkan
和metal
后端支持大多数主流平台。可以通过添加额外的后端来支持专有平台。
- 文档
- 在包根目录下运行
cargo doc --no-deps --open
(docs.rs由于不构建功能而不完整)
路线图
rafx-api
的API不太可能发生重大变化rafx-framework
和rafx-assets
可能会根据演示改进和其他项目中的试运行进行重构/改进- 对于近期未来,重点将放在
- 添加更多文档
- 完善现有后端
- 通过更多渲染技术扩展演示
在此项目0.1.0版本发布后,此包将使用语义版本控制规则。0.0.x版本不遵循语义版本控制规则。
运行演示
应从仓库根目录运行演示。以下命令应克隆仓库并运行演示。
git clone https://github.com/aclysma/rafx.git
cd rafx
cd demo
cargo run --bin demo --release --features "[BACKEND_FEATURE]"
BACKEND_FEATURE应设置为"rafx-vulkan"或"rafx-metal"
在发布版中运行会减少日志记录并禁用GPU验证。第一次运行会慢一些,因为它需要导入资产,包括带有大纹理的GLTF网格。**强烈推荐使用配置文件覆盖来优化上游crate。在调试模式下,资产处理速度极慢。(即30秒而不是2秒**)
演示使用SDL2,在调试模式下使用vulkan验证。如果您运行演示时遇到问题,请检查SDL2和vulkan的依赖项是否可用。
演示功能
- 渲染线程与主线程解耦 (图)
- 着色器构建管道 (图)
- 异步资产加载
- 资产可以流式传输到远程硬件(例如手机)
- 或者资产可以被烹饪成二进制blob以进行分发
- 热重载资产(需要更多工作,某些资产类型不可靠)
- 渲染图可用于高效且灵活地定义渲染管道,包括渲染到纹理和多个摄像头。
- 自动生成的着色器绑定使使用描述符集变得方便且错误率更低。
- 支持多遍的材质系统
- 多摄像头支持(例如,生成阴影图)
- 演示游戏状态存储在ECS中(注意:演示使用legion但渲染器与ECS无关)
- PBR网格
- 精灵
- 调试绘图
- imgui
- 带色彩溢出的HDR管道
- 点、聚光灯和方向光
- 多个点/聚光灯/方向光软阴影
工具
渲染器包括一些用于处理着色器和将数据打包到二进制blob的工具。
着色器处理器
此工具解析GLSL并生成相应的Rust代码。这使得使用描述符集更容易、更安全!
- 该工具位于 /shader-processor
- 演示包括一个
shaders
crate来编译生成的Rust代码。它位于 /demo/shaders。只自动生成Rust代码,而不是Cargo.toml。 - 在演示中“刷新着色器”的最简单方法是点击该文件夹中的compile.bat或compile.sh
- 您可以通过以下命令安装
cargo install rafx-shader-processor
。请确保安装与项目中包含的相同版本。另外,别忘了在更新项目依赖项时更新它!
着色器处理器生成以下资产工件
- API特定的,如编译后的SPIR-V或Metal源代码
- rafx在运行时使用的元数据
- 使处理着色器更容易的Rust代码
- 用于调试/检查的中间格式
着色器包可以作为资产加载,并包含加载编译后的着色器所需的所有内容。
打包资产
此工具目前仅用于打包资产。
- 按如下方式打包文件:
run --package cli -- --pack out.pack
- 按如下方式运行演示:
run --package demo -- --packfile out.pack
- 您可能需要为此工具从您自己的main.rs创建二进制文件。这样,您可以添加自己的资源类型。
功能
rafx-vulkan
:使用vulkan后端rafx-metal
:使用metal后端
crate
rafx-base
- 共享助手/数据结构。没有什么令人兴奋的rafx-api
- 渲染API抽象层。- Vulkan后端(Windows/Linux)
- macOS/iOS的金属后端
rafx-nodes
- 受2015年GDC演讲“《命运》的多线程渲染架构”的启发。(这是一个低成本版本,工作实际上还不是MT)- 具有提取、准备和写入阶段的作业系统
- 渲染通过模拟线程进行管道化,并且作业结构旨在高度并行
- 处理多个视图和阶段,允许高级功能,如阴影图
- 灵活的排序机制,用于交错和批量写入来自多个渲染功能的命令
rafx-visibility
- 占位符可见性系统。目前不执行任何操作(始终返回所有可见对象)。有关更多信息,请参阅GDC演讲。rafx-framework
- 图像、缓冲区、描述符集等资源的资源管理- 大多数内容都进行了哈希处理和引用计数
- 提供渲染图
- 几乎所有资产都是从可序列化和可哈希的结构中数据驱动的,而不是硬编码。
- 当可用时,缓冲区和图像将在专用传输队列上异步上传
- 具有可绑定参数的多遍材料抽象
rafx-assets
- 资产加载和管理系统。- 资产可以从文件中热重载(但请参阅#14)
- 由于distill预先处理并存储随变化而变化的缓存资产,因此可以实施自定义处理/打包,同时保持非常快的加载时间。例如,纹理压缩可以实施为导入步骤。
- 为在运行时创建资产提供单独的多线程友好路径
许可证
根据您的选择,许可权下
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
上游依赖项
demo/fonts目录包含几个字体,它们的许可证各不相同
- Feather,MIT
- Material Design Icons,SIL OFL 1.1
- FontAwesome 4.7.0,可使用SIL OFL 1.1
mplus-1p-regular.ttf
,可使用其自身的许可证。
assets/blender包含来自https://freepbr.com的一些着色器,可在其自身的许可证下使用。
某些依赖项可能具有其他许可证。这些许可证包括“ISC”、“CC0-1.0”、“BSD-2-Clause”、“BSD-3-Clause”和“Zlib”。这些许可证在每次CI运行中使用cargo-deny进行最佳努力验证。
致谢
Rafx受益于许多优秀想法和项目!
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何有意提交以包含在作品中的贡献,将按上述方式双许可,而无需任何额外条款或条件。
请参阅LICENSE-APACHE 和 LICENSE-MIT。
依赖项
~3.5MB
~102K SLoC