README.md

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

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

    • CPU Rasterizer 完全使用C#编写,在CPU上实现的单线程软件光栅化
    • CPU Job Rasterizer 使用Unity的Job System和Burst Compiler,使用多个处理器核心执行经过编译优化的光栅化代码,性能大幅提升。
    • GPU Driven Rasterizer 使用Compute shader实现整个光栅化流水线。GPU Driven模式的性能和直接使用Unity渲染相当。

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

    支持特性

    (部分仅CPU Rasterizer支持)

    • Wireframe mode
    • Frustum culling
    • Clipping
    • Backfarce culling
    • Depth Test
    • 基于重心坐标的光栅化
    • 透视校正插值
    • 可视化Depth Buffer
    • MSAA
    • 纹理采样模式 Nearest & Bilinear
    • Blinn Phong着色
    • 可视化顶点色
    • 可视化法线
    • 自定义几何图元
    • 自定义顶点色

    关于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内存,直接交下一阶段使用。

    基本流水线

    • Clear Frame Buffer阶段:针对每个像素分配一个线程进行clear操作
    • 顶点处理阶段:针对每个顶点分配一个线程进行顶点变换
    • 三角形处理阶段:针对每个三角形分配一个线程进行clipping, backface culling, 光栅化以及像素着色

    存在的限制

    • 由于是基于三角形分配线程,如果三角形很大,比如全屏后期处理的两个三角形,会造成性能急剧降低。
    • 虽然每个物体是单独Dispatch的,但是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

    项目简介

    URasterizer: A software rasterizer on top of Unity. 在Unity中实现的软件光栅器,基于GAMES101课程光栅化理论实现,支持Compute Shader加速

    发行版本

    当前项目没有发行版本

    贡献者 2

    n5 @n5
    H happyfire @happyfire

    开发语言

    • C# 92.3 %
    • HLSL 6.5 %
    • ShaderLab 1.2 %