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-alpha | 2020 年 3 月 29 日 |
#551 in 图形 API
1.5MB
5K SLoC
萨雷克
概述
这是我第三次尝试在 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