9个版本

0.3.6 2022年10月18日
0.3.5 2022年10月5日
0.3.4 2022年9月30日
0.2.3 2022年9月29日
0.1.0 2022年9月18日

#278 in WebAssembly

每月21次下载

MIT/Apache

285KB
7.5K SLoC

wrend

Crates Version NPM Version CI Image Docs Image

此库目前处于早期开发阶段。您可以自由使用它,但请注意,API可能会在没有考虑向后兼容性的情况下进行更改。

关于

Wrend是原始WebGL2代码的包装库,使用Rust编写,然后编译成WebAssembly在浏览器中运行。其目标是使在编写Rust和/或JavaScript/TypeScript代码时使用WebGL更加方便。尽管大多数示例应用程序都是使用Yew构建的,但wrend本身是框架无关的,并设计用于在各种设置中使用,具有不同的渲染管线。请参阅仓库的示例目录中的示例。

关于名称,wrendWebGL2 Rendering Library的缩写。

为什么

这个库存在是因为我发现自己在反复编写相同的冗长、(偶尔的unsafe) WebGL代码,常常挣扎于找到适当的WebGL调用的抽象级别和类型。Wrend旨在减轻在Rust中处理低级WebGL编程的痛苦。这包括对requestAnimationFrame调用的抽象,使连续动画变得简单,只需调用start_animating并在内存中保留返回的句柄,停止也是如此简单,只需丢弃返回的renderer句柄/调用stop_animating

Wrend的另一个优点是其灵活性:而不是关注更常见的3D光栅化技术,Wrend允许构建独特的图形管线,用于光线追踪器、流场和其他非传统渲染方法。

演示

光线追踪器

从头开始编写的实时光线追踪器,受Peter Shirley的《一周之内学习光线追踪》系列作品的启发,并适应Rust & WebGL的使用。

最初,我将这个项目作为一个仅使用Rust/WASM运行的软件光线追踪器启动,但我所经历的渲染时间慢得令人沮丧,所以我很快开始实施一个可以利用GPU并行化能力的硬件光线追踪器。一旦我切换到使用WebGL2,渲染时间从大约1-6分钟的合理渲染降低到不到一秒,我能够通过平均许多低样本帧而不是一次性计算它们来实现实时光线追踪元素,例如移动相机等(渐进式渲染)。

Ray-traced image created using the Wrend library

粒子流场

100,000个粒子在画布上移动,移动过程中释放颜料。粒子的运动由在运行时生成的2D噪声纹理决定。

A particle flow field

康威的生命游戏

经典。

Screenshot of Conway's Game of Life simulation

大于生命

这与经典的康威生命游戏类似,但它使用一个11x11卷积核(而不是经典的3x3)来计算每个单元格的下一个状态。这导致了更有机的形态,其行为与原始形态惊人地相似。

Screenshot of the Larger Than Life simulation

依赖项

~8-10MB
~192K SLoC