1 个不稳定版本

使用旧的Rust 2015

0.1.0 2017年5月1日

#6#vertex-shader

MIT 许可证

68KB
953

Softrender

正在进行的Rust软件渲染器

正在重写

我目前正在重写库以提高性能和功能,所以请您耐心等待。

目前实现了以下功能

  • 着色器管道
    • 基于类型的原语,用于编译时处理可变的网格原语
      • 也就是说,使用类型及其相关函数而不是对原语类型使用 match 语句。
  • 顶点着色器
    • 并行处理所有顶点
  • 几何着色器
    • 支持由几何着色器生成的点、线和三角形。
    • 目前仅支持替换变体,类似于OpenGL几何着色器。
    • 并行处理所有原语。
  • 裁剪
    • 裁剪是通过几何着色器实现的

尚未完成的部分

  • 基于瓦片的三角形光栅化器

旧的光栅化器为每个线程生成多个全尺寸帧缓冲区,并将三角形的部分渲染到其中,然后将部分帧缓冲区合并成最终的帧缓冲区。这很慢,因为利用rayon的迭代器和固定数量的全尺寸帧缓冲区很痛苦。

相反,帧缓冲区被分成更小的块,或称为瓦片,这些瓦片是并行渲染的。这种方法有大量的优化空间,并且应该扩展得很好。使用瓦片方法,我们在所有线程上渲染所有三角形,因此不需要分割数据。现代NVIDIA GPU(以及我认为的AMD),以及大多数大型光线追踪器,出于相同的原因更喜欢这种方法。

线条原语可能会用瓦片渲染,通过使用Bresenham算法或Xiaolin Wu算法,并简单地计算每个瓦片的边界框与瓦片的交点,并仅渲染线条的一部分。由于Xiaolin Wu算法可以处理分数像素位置,因此这不会导致线条的扭曲或其他伪影。因为线条会被裁剪到瓦片边界框,所以它们在屏幕空间中隐式地裁剪到视口。

点原语更简单,因为如果它们不在瓦片边界框内,就简单地跳过。

  • 额外的几何着色器功能

我想实现两个额外的几何着色器方法,用于修改/附加和仅附加操作,这将允许某些应用程序以不同的程度提高性能。

文档

示例

复杂,完整的示例 ~450 行代码

Full Example

有关以上信息的更多信息,请参阅完整示例

简单,单文件示例 ~200 行代码

Simple Example

依赖项

~4.5-7MB
~95K SLoC