Home

Awesome

URasterizer: 基于Unity平台的光栅化渲染器

本项目是在Unity上实现一套软件光栅化渲染,利用Unity的基础设施来读取模型、贴图,控制GameObject的变换,以及设置相机参数等,再通过软件光栅化来将场景渲染到一张贴图上。 URasterizer有三个独立的光栅化渲染器:

本项目的目的是学习研究光栅化以及利用多核和GPGPU加速光栅化,GPU Driven算法主要是针对小三角形比较有优势,并不适合通用的光栅化。

支持特性

(部分仅CPU Rasterizer支持)

关于Job System

仅仅使用Job System就可以比单线程计算获得数倍的性能提升(测试场景中FPS从4提升到13)。将顶点处理和三角形处理两个过程使用并行Job实现,Unity Job System会自动调度到多个核心上执行。 使用Burst编译加速后,在同样的代码下,性能进一步提升(测试场景中FPS提升到85)。Profile中,每个triangle job的执行时间不到1ms,而不使用Burst时是20多ms。 job profile

关于GPU Driven

每个渲染物体组织相应的输入数据Compute buffer,渲染时分3个阶段启动compute shader kernel执行并行计算。中间计算的结果也保存在compute buffer中,不读回CPU内存,直接交下一阶段使用。

基本流水线

存在的限制

项目截图

渲染控制选项

Rendering Config

CPU 渲染效果(BlinnPhong着色)

CPU BlinnPhong

Job System & Burst 加速

job

GPU 渲染效果

FPS极大提高

GPU BlinnPhong

在测试机上,远远没到瓶颈,渲染更多的三角形也不影响帧率

GPU BlinnPhong2

线框模式,使用自定义顶点色

wireframe

可视化顶点色

vertex color

可视化法线

cpu normal

可视化深度缓冲

depth view

MSAA

关闭MSAA

MSAA disable

MSAA 4x

MSAA 4x

关闭MSAA,局部放大

disable MSAA enlarge

MSAA 2x, 局部放大

msaa 2x enlarge

MSAA 4x,局部放大

msaa 4x enlarge