17个版本
0.4.7 | 2024年6月3日 |
---|---|
0.4.6 | 2024年5月31日 |
0.2.6 | 2022年11月25日 |
0.2.3 | 2022年9月28日 |
0.1.0 | 2022年2月17日 |
#10 in 渲染
953 每月下载次数
用于 renderling_ui
575KB
13K SLoC
renderling 🍖
Renderling是一个创新的、由GPU驱动的渲染器,专为高效场景渲染而设计,重点关注利用GPU能力进行几乎所有渲染操作。通过Rust进行着色器开发,它确保了内存安全和跨平台兼容性,包括Web平台。目前处于alpha阶段的项目旨在快速加载GLTF文件,处理大型场景,并支持众多光源。开发侧重于性能、人体工程学、可观察性和使用现代渲染技术(如前向+渲染和基于物理的着色)。
该项目由NLnet作为NGI Zero Core的一部分赞助。
什么是
renderling
在GPU缓冲区中持有整个场景的几何形状、纹理、材质、光照,甚至场景图本身。除了少数渲染操作在GPU上发生之外,其他所有渲染操作都在GPU上完成。CPU用于与文件系统交互,将数据打包到GPU并更新变换。
着色器通过rust-gpu
在Rust中编写。
为什么我应该使用renderling
-
数据可以通过自动引用计数的slab分配器轻松地加载到GPU,该分配器提供从CPU的访问权限。
您的场景几何形状、材质、动画等所有内容都驻留在GPU上,而CPU可以轻松地读取和修改这些数据,无需借用 - 使您可以将数据通过线程发送到任何需要它的地方。
-
将所有内容都放在GPU上使
renderling
在渲染某些类型的场景方面非常有效。具体来说,
renderling
旨在擅长渲染具有中等独特几何形状的场景(可能是大量重复的几何形状),少量大纹理(或大量小纹理),以及大量光照效果。 -
与GLTF的紧密集成
- 加载场景、节点、动画等
- 包括控制动画的工具
- 支持的扩展
- KHR_lights_punctual
- KHR_materials_unlit
- KHR_materials_emissive_strength
-
基于图像的光照+分析光照
-
良好的文档
API功能
- 场景、实体(场景节点)、材质和光照的构建器模式
- 无头渲染支持
- 通过
image
包将渲染到纹理并保存
- 通过
- 文本渲染支持(货物功能
text
- 默认开启) - 具有本地变换的嵌套节点
- 通过
gltf
加载场景的紧密支持(货物功能gltf
- 默认开启)
尽可能使用 Rust 通过 rust-gpu
编写着色器,必要时回退到 wgsl
。
渲染功能/路线图
渲染采用 forward+ 渲染方法。
默认情况下,它使用单个超级着色器进行渲染。
- 纹理图集
- 视锥体裁剪
- 遮挡裁剪
- 光照贴图
- 阴影映射
- 3D
- 内置对常见光照/材料工作流程的支持
- 基于物理的着色
- 非光照
- 高动态范围
- 天空盒
- 基于图像的光照
- 漫反射
- 镜面反射
- MSAA(由于forward+而易于实现)
- “基于物理”的上采样+下采样模糊(光晕效果)
- SSAO
- 景深
- 对glTF的支持
- 场景
- 节点
- 摄像机
- 网格
- 材质
- PBR金属粗糙度(因素 + 纹理)
- 法线贴图
- 遮挡纹理
- PBR镜面光泽度
- 视差贴图
- 纹理、图像、采样器
- 动画
- 插值
- 蒙皮(仍在修复一个 问题)
- 形变目标(需要重新构建)
- 内置对常见光照/材料工作流程的支持
- 2D
- 文本
- 描边和填充路径
- 三次贝塞尔曲线
- 二次贝塞尔曲线
- 任意多边形
- 用图像填充
定义
renderling 名词
一个小巧玲珑的生物,近距离看起来很可爱,随时准备为您执行图形任务。
俳句
机器中的幽灵,用魔法照亮您的场景。可爱的技术。
项目组织
-
crates/renderling-shader
包含可以在CPU和GPU上共享的Rust着色器代码(使用
rust-gpu
编译为SPIR-V)。大多数着色器代码都在这里!某些任务需要原子操作,但这还不能从rust-gpu
到wgpu
实现。参见 NOTES.md。此包是工作空间的一部分,因此您可以在Rust中编写着色器时获得良好的编辑器工具。您还可以编写运行测试的测试,这些测试可以通过cargo test
执行。一切如常工作。 -
着色器
包含一个围绕
renderling-shader
的薄包封装。提供着色器的SPIR-V注释。包含一个程序,将Rust编译为SPIR-V,并将 .spv 文件复制到主renderling
包。 -
crates/renderling
主包。包含用于创建管线和管理资源的CPU Rust代码,创建渲染通道等。包含测试,其中一些使用实际帧渲染的图像比较以保持一致性和向后兼容性。
-
img
测试图像资产(纹理等)
-
test_img
用于测试的参考图像。
-
crates/example
包含使用
renderling
包创建应用程序的示例。
测试
测试在无头模式下使用 renderling
,并生成与预期输出进行比较的图像。
运行测试
cargo test
构建着色器
shaders/
文件夹是一个排除在 cargo 工作区之外的包。它编译成一个程序,可以运行以生成着色器
cd shaders/ && cargo run --release
在WASM上构建
RUSTFLAGS=--cfg=web_sys_unstable_apis trunk build crates/example-wasm/index.html && basic-http-server -a 127.0.0.1:8080 crates/example-wasm/dist
🫶 赞助这个项目!
这项工作将始终免费且开源。如果您使用它(直接使用或作为灵感来源),请考虑捐赠。
特别感谢
- James Harton (@jimsynz),捐赠了多个带有物理GPU的Linux CI运行器!
相关工作及衍生项目
许多项目都源于解决renderling
中的需求。其中一些解决方案后来衍生出自己的项目。
crabslab
跨CPU/GPU边界工作的内存分配器。loading-bytes
一种跨平台(包括网络)且非常小巧的文件加载到字节数组的方法。moongraph
DAG和资源图运行器。- 对
naga
的贡献- 在SPIR-V前端添加原子支持(进行中)
- 对
gltf
的贡献
赞助这个项目有助于推动生态系统的发展。
许可证
Renderling是免费且开源的。本仓库中的所有代码都采用以下双许可方式
MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
您可以选择。这意味着您可以选择您喜欢的许可!这种双许可方法在Rust生态系统中是事实上的标准,并且包含两者的原因非常充分。
除非您明确表示,否则您根据Apache-2.0许可证定义的,有意提交以包含在工作中的任何贡献,都将如上所述双许可,不附加任何额外条款或条件。
备注 & 开发日志
依赖关系
~5–46MB
~735K SLoC