#vulkan #ash #vulkan-graphics #graphics #rendering #rendering-engine

萨雷克

一个基于 Vulkan 的渲染引擎,但也可以扩展到其他图形 API 后端,如 Metal 或 D3D12

5 个版本

0.0.4 2020 年 5 月 5 日
0.0.3 2020 年 5 月 4 日
0.0.2 2020 年 5 月 2 日
0.0.1 2020 年 4 月 9 日
0.0.1-alpha2020 年 3 月 29 日

#551 in 图形 API

Apache-2.0

1.5MB
5K SLoC

萨雷克

Crates.io

screenshot

概述

这是我第三次尝试在 Vulkan 上做些东西。我认为我已经积累了足够的知识和能力来做一些有价值的事情。

这是一个以 Vulkan 为后端的渲染器,我希望保持其相对底层。我认为它一开始会暴露很多,然后慢慢地开始用另一个名为 "Shran" 的包装器再次包装。

Shran 包装器。懂了吗?

设置

作为一个库,只需包含该软件包并安装 Vulkan SDK(需要它通过 glslc 编译着色器以及验证层)。

  • 确保 VulkanSDK/版本/Bin 文件夹的路径已被包管理器处理(如果 Lunar's 网站上有)。
  • 此外,请记住按照shaderc-sys 中描述的方式设置 libshaderc 路径,这涉及到设置 SHADERC_LIB_DIR。

示例需要额外一步:我以前使用 LFS,但由于人们开始克隆并使用我的最大带宽,所以它变得很贵。如果不是分享这个项目,我会使用 Azure Devops 或其他东西,但由于它在 github 上,所以我将资源托管在 gcs 上。

我非常希望您不要使用 git LFS 来拉取文件。我不会续订带宽,因此如果您想获取资源文件,请使用该设置。

现在您需要运行 setup.sh 脚本,它只是使用 curl 命令下载并解压 zip 文件。如果您使用 Windows,请使用 git bash 或 mingw 运行它或类似的东西(就像我这样做)。

使用方法

这个说明文件很简单。Cargo 文档是你的朋友。这还远远没有完成。

获取最新文档/使用方法的最佳方式是检查示例(越晚越好)。

Sarekt 可以加载任意模型、纹理和统一变量并显示它们。

纹理可以是任何由 image crate 支持的图像格式,并将被转换。

只有一个管道和渲染通道类型。

主要依赖项

查看此项目的依赖项。说真的,Rust 社区真是太棒了。

  • ash 几乎完美无缺的 Vulkan 绑定,拥有构建器和稳定的速度。
  • vk-mem 在一个令人惊叹的分配库周围的稳定的 Rust 包装器,这样我就可以不用自己手动进行 GPU 分配,并且可以开始编写 Vulkan 代码!我修复了一个错误,并且不知何故成为了这个项目的贡献者。
  • vk-shader-macros 将 GLSL 编译成 SPIR-V 的着色器宏,并为我包含字节。真美味。
  • log 编译时日志抽象。
  • winit 平台无关的窗口和 Vulkan 上下文创建。
  • slotmap 一个出色的代际索引存储,对句柄非常有用。
  • wavefront_obj obj 模型加载器。
  • gltf GlTf 模型加载器。
  • image 加载图像数据。

还有更多,但这些都是我最依赖的,请查看它们的所有内容。

名称

"Sarek" 是《星际迷航》中角色 "Spock" 的 Vulcan 父亲。添加的 t 也使其成为一个与矩形相关的词组。

我知道,我很抱歉。

示例

所有这些参数直接且无需参数的示例都没有在此处提供章节,只需使用 cargo run --example NAME 运行即可。

那些有参数的,只需按如下方式传递
cargorun --example06_textures --colors

示例 6,纹理

从这里开始,事情开始变得有趣,有一个参数可以启用与纹理的颜色混合。

从本例开始,应用程序坐标空间为右手系 y 向上,为了简单起见,紫外光库透视函数会对其进行纠正以适应适当的后端。

参数

  • colors - 启用从原始颜色进行的颜色混合,默认前向着色器中的一种简单的乘性颜色混合

示例 7 深度缓冲区

在这里我们可以看到深度缓冲区正在工作。相机移动,你可以看到三维效果。

标志

  • fps -- 显示 fps

示例 8 模型加载

加载真实 3D 模型(仅预烘焙光照)

标志

  • glb -- 加载模型的 glb 版本。
  • fps -- 显示 fps

示例 9 米映射

启用米映射。

示例 10 MSAA

启用 MSAA。默认为 2x

标志

  • 2x -- 2x MSAA
  • 4x -- 4x MSAA
  • 8x -- 8x MSAA
  • noaa -- 关闭抗锯齿。

依赖关系

~51MB
~884K SLoC