1个不稳定版本
0.0.2 | 2021年1月17日 |
---|
#2365 在 游戏开发
每月 35次下载
3MB
65K SLoC
Rafx
这是一个基于 atelier-assets
资源管道的多后端渲染器。它旨在性能优异、灵活、工作流程友好,并适用于团队环境中的实际项目。
资源管道的设计考虑了用户的工作流程(包括专门的艺术师!),支持工作流程友好的功能,如热重载资源,包括在远程设备上。渲染器的架构旨在支持高级用例,如流式传输、LOD、可见性系统和多线程绘制调用。
该工具包包含几个层次
- 低级图形API抽象
- 高级资源管理和生命周期处理(通过 渲染图 和其他有用的工具)
- 与
atelier-assets
集成的资源层 - 打包资源用于发布构建和 自动生成着色器绑定代码 的工具
注意:有些 cr
支持的平台
- Windows
- macOS(通过 MoltenVK)
- iOS(通过 MoltenVK)
- Linux
Android可能可以工作,但我没有硬件进行测试。
参考
- 作业/阶段渲染设计灵感来自2015年GDC演讲 "《命运》的多线程渲染架构"。
- 渲染图的设计灵感来自2017年GDC演讲 "FrameGraph:Frostbite中的可扩展渲染架构"
- 另见 "渲染图和Vulkan - 深入探讨"
- 低级API与 "The Forge" 的API有些类似
图表
状态
尚未准备好生产!
演示包括
- 渲染线程与主线程解耦 (图表)
- 异步资源加载
- 资源可以被流式传输到远程硬件(例如手机)
- 或者资源可以被编译成二进制文件以进行发布
- 热重载资产(需要更多工作,一些资产类型工作不可靠)
- 渲染图可用于高效且灵活地定义渲染管线,包括渲染到纹理和多摄像头。
- 自动生成的着色器绑定使使用描述符集变得方便且错误率较低。
- 支持多阶段的材质系统
- 支持多摄像头(例如,用于生成阴影图)
- 演示游戏状态存储在ECS中(注意:演示使用legion,但渲染器是ECS无关的)
- PBR网格
- 精灵
- 调试绘图
- imgui
- 带辉光效果的HDR管线
- 点光、聚光灯和方向光
- 多个点光/聚光灯/方向光软阴影
运行演示
应从存储库的根目录运行此演示。以下命令会克隆存储库并运行演示。
git clone https://github.com/aclysma/rafx.git
cd rafx
cargo run --bin demo --release
以发布版运行会减少日志记录并禁用GPU验证。第一次运行会慢一些,因为它需要导入资产,包括具有大纹理的GLTF网格。强烈建议使用配置文件覆盖来优化上游crate。在调试模式下,资产处理速度极慢。(即30秒而不是2秒)
演示使用SDL2和在调试模式下的vulkan验证。如果您运行演示时遇到问题,请检查SDL2和vulkan的依赖项是否可用。
工具
渲染器包含一些用于处理着色器和将数据打包到二进制blob中的工具。
着色器编译器
此工具解析GLSL并生成相应的rust代码。这使得使用描述符集更容易且更安全!
- 此工具位于/shader-processor
- 演示包含一个
shaders
crate来编译生成的rust代码。它位于/demo/shaders。仅自动生成rust代码,不生成Cargo.toml。 - 在演示中“刷新着色器”的最简单方法是在此文件夹中运行compile.bat或compile.sh
CLI
此工具目前仅用于打包资产。
- 按以下方式打包文件:
run --package cli -- --pack out.pack
- 按以下方式运行演示:
run --package demo -- --packfile out.pack
特性
rafx-base
- 共享助手/数据结构。没有什么令人兴奋的rafx-api
- 渲染API抽象层。- 为windows/Linux提供Vulkan后端(本地/直接,不是通过翻译层)
- MoltenVK目前是macOS的必需品,但本机metal后端即将推出!
rafx-nodes
- 受2015年GDC演讲“Destiny的多线程渲染架构”的启发。(一个低成本的版本,并且工作实际上还没有是MT)- 具有提取、准备和写入阶段的作业系统
- 渲染通过模拟线程管线化,作业结构旨在高度并行
- 处理多个视图和阶段,允许像阴影图这样的高级功能
- 灵活的排序机制,用于交错和批量写入来自多个渲染功能的命令
rafx-visibility
- 占位符可见性系统。目前什么也不做(始终返回所有可见的事物)。请参阅GDC演讲以获取更多关于它将如何工作的信息。rafx-resources
- 图像、缓冲区、描述符集等资源管理。- 大多数事物都进行了哈希处理并进行了引用计数
- 提供渲染图
- 几乎所有Vulkan资产都来自可序列化和可哈希的结构,而不是硬编码。
- 缓冲区和图像在可用时将在专用传输队列上异步上传
rafx-assets
- 一个资源加载和管理系统。- 资源可以从文件中进行热重载(但请参阅 #14)
- 因为 atelier-assets 在资源变化时预处理和存储缓存资源,因此可以在保持极快的加载时间的同时实现自定义处理/打包。例如,可以将纹理压缩作为导入步骤实现。
- 为在运行时创建资源提供独立的线程友好路径
- 支持多通道材质抽象,具有可绑定参数
路线图
- 更好的阴影
- 更多渲染技术,如SSAO
- 支持更多渲染后端(主要是metal和dx12)
演示展示了具有GLTF导入器、PBR、辉光、imgui、调试绘制、精灵、动态光照/阴影的基本渲染管线。它还演示了如何从模拟中分离线程进行渲染。
许可
根据您的选择,许可如下
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
上游依赖
示例/字体目录包含受其自身许可证约束的几个字体
- 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 以尽力验证这些许可证。
贡献
除非您明确说明,否则根据 Apache-2.0 许可证定义的,任何有意提交以包含在您的工作中的贡献,都应按上述方式双重许可,不附加任何其他条款或条件。
请参阅 LICENSE-APACHE 和 LICENSE-MIT。
依赖项
~4–6MB
~128K SLoC