1个不稳定版本

0.0.2 2021年1月17日

#2365游戏开发

每月 35次下载

MIT/Apache

3MB
65K SLoC

Rafx

这是一个基于 atelier-assets 资源管道的多后端渲染器。它旨在性能优异、灵活、工作流程友好,并适用于团队环境中的实际项目。

资源管道的设计考虑了用户的工作流程(包括专门的艺术师!),支持工作流程友好的功能,如热重载资源,包括在远程设备上。渲染器的架构旨在支持高级用例,如流式传输、LOD、可见性系统和多线程绘制调用。

该工具包包含几个层次

  • 低级图形API抽象
  • 高级资源管理和生命周期处理(通过 渲染图 和其他有用的工具)
  • atelier-assets 集成的资源层
  • 打包资源用于发布构建和 自动生成着色器绑定代码 的工具

注意:有些 cr

支持的平台

  • Windows
  • macOS(通过 MoltenVK)
  • iOS(通过 MoltenVK)
  • Linux

Android可能可以工作,但我没有硬件进行测试。

参考

Build Status

Video of Renderer in Use

^ 在iOS硬件上运行此渲染器的视频

Screenshot demonstrating realtime shadows

图表

状态

尚未准备好生产!

演示包括

  • 渲染线程与主线程解耦 (图表)
  • 异步资源加载
  • 资源可以被流式传输到远程硬件(例如手机)
  • 或者资源可以被编译成二进制文件以进行发布
  • 热重载资产(需要更多工作,一些资产类型工作不可靠)
  • 渲染图可用于高效且灵活地定义渲染管线,包括渲染到纹理和多摄像头。
  • 自动生成的着色器绑定使使用描述符集变得方便且错误率较低。
  • 支持多阶段的材质系统
  • 支持多摄像头(例如,用于生成阴影图)
  • 演示游戏状态存储在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
  • 演示包含一个shaderscrate来编译生成的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、调试绘制、精灵、动态光照/阴影的基本渲染管线。它还演示了如何从模拟中分离线程进行渲染。

许可

根据您的选择,许可如下

上游依赖

示例/字体目录包含受其自身许可证约束的几个字体

assets/blender 包含来自 https://freepbr.com 的某些着色器,在自身的许可下可用

某些依赖项可能在其他条款下获得许可。这些许可证包括 "ISC"、"CC0-1.0"、"BSD-2-Clause"、"BSD-3-Clause" 和 "Zlib"。在每个CI运行中,使用 cargo-deny 以尽力验证这些许可证。

贡献

除非您明确说明,否则根据 Apache-2.0 许可证定义的,任何有意提交以包含在您的工作中的贡献,都应按上述方式双重许可,不附加任何其他条款或条件。

请参阅 LICENSE-APACHELICENSE-MIT

依赖项

~4–6MB
~128K SLoC