1 个不稳定版本
使用旧的Rust 2015
0.1.0 | 2017年5月1日 |
---|
#6 在 #vertex-shader
68KB
953 行
Softrender
正在进行的Rust软件渲染器
正在重写
我目前正在重写库以提高性能和功能,所以请您耐心等待。
目前实现了以下功能
- 着色器管道
- 基于类型的原语,用于编译时处理可变的网格原语
- 也就是说,使用类型及其相关函数而不是对原语类型使用
match
语句。
- 也就是说,使用类型及其相关函数而不是对原语类型使用
- 基于类型的原语,用于编译时处理可变的网格原语
- 顶点着色器
- 并行处理所有顶点
- 几何着色器
- 支持由几何着色器生成的点、线和三角形。
- 目前仅支持替换变体,类似于OpenGL几何着色器。
- 并行处理所有原语。
- 裁剪
- 裁剪是通过几何着色器实现的
尚未完成的部分
- 基于瓦片的三角形光栅化器
旧的光栅化器为每个线程生成多个全尺寸帧缓冲区,并将三角形的部分渲染到其中,然后将部分帧缓冲区合并成最终的帧缓冲区。这很慢,因为利用rayon的迭代器和固定数量的全尺寸帧缓冲区很痛苦。
相反,帧缓冲区被分成更小的块,或称为瓦片,这些瓦片是并行渲染的。这种方法有大量的优化空间,并且应该扩展得很好。使用瓦片方法,我们在所有线程上渲染所有三角形,因此不需要分割数据。现代NVIDIA GPU(以及我认为的AMD),以及大多数大型光线追踪器,出于相同的原因更喜欢这种方法。
线条原语可能会用瓦片渲染,通过使用Bresenham算法或Xiaolin Wu算法,并简单地计算每个瓦片的边界框与瓦片的交点,并仅渲染线条的一部分。由于Xiaolin Wu算法可以处理分数像素位置,因此这不会导致线条的扭曲或其他伪影。因为线条会被裁剪到瓦片边界框,所以它们在屏幕空间中隐式地裁剪到视口。
点原语更简单,因为如果它们不在瓦片边界框内,就简单地跳过。
- 额外的几何着色器功能
我想实现两个额外的几何着色器方法,用于修改/附加和仅附加操作,这将允许某些应用程序以不同的程度提高性能。
示例
复杂,完整的示例 ~450 行代码
有关以上信息的更多信息,请参阅完整示例。
简单,单文件示例 ~200 行代码
依赖项
~4.5-7MB
~95K SLoC