CuRast: Cuda-Based Software Rasterization for Billions of Triangles
作者: Markus Schütz, Lukas Lipp, Elias Kristmann, Michael Wimmer
分类: cs.GR
发布日期: 2026-04-23
🔗 代码/项目: GITHUB
💡 一句话要点
CuRast:基于CUDA的软件光栅化,高效渲染数十亿三角形
🎯 匹配领域: 支柱三:空间感知与语义 (Perception & Semantics)
关键词: 光栅化 CUDA 计算着色器 大规模模型 实时渲染
📋 核心要点
- 现有方法在渲染大规模三角形数据集时,通常需要预先构建加速结构,计算开销大。
- CuRast利用计算着色器高效光栅化小三角形的特性,设计三阶段流水线,无需预先构建加速结构。
- 实验表明,CuRast在渲染大规模三角形模型时,比Vulkan快2-12倍,但低多边形网格Vulkan更快。
📝 摘要(中文)
本文提出了一种基于CUDA的软件光栅化方法CuRast,旨在高效渲染大规模三角形数据集,无需预先构建加速结构。该方法利用计算着色器高效光栅化小三角形的特性,构建了一个三阶段光栅化流水线。第一阶段直接光栅化小三角形,使用atomicMin操作存储最近的片段。较大的三角形被转发到第二和第三阶段进行处理。实验结果表明,CuRast在渲染数亿三角形的模型时,比Vulkan快2-5倍(唯一实例)或高达12倍(实例化)。然而,对于低多边形网格,Vulkan仍然快一个数量级。目前该方法主要关注从摄影测量/3D重建中获得的密集、不透明网格,暂不支持混合/透明度,且对包含数千个低多边形网格的场景处理效率不高。未来的工作将致力于优化处理包含数万个节点/网格的场景,增加对分层聚类LOD(如Meshoptimizer生成)的支持,并添加对透明度的支持。
🔬 方法详解
问题定义:论文旨在解决大规模三角形数据集的高效光栅化问题。传统方法依赖于预先构建加速结构,这对于动态场景或超大规模模型来说,计算和存储开销巨大。现有的硬件光栅化器在处理大量小三角形时效率较低,成为性能瓶颈。
核心思路:论文的核心思路是利用计算着色器在GPU上直接光栅化三角形,避免预先构建加速结构。通过将三角形大小作为划分依据,采用多阶段流水线处理不同大小的三角形,从而优化整体渲染效率。针对小三角形,直接进行光栅化,利用原子操作保证深度值的正确性。
技术框架:CuRast采用三阶段光栅化流水线: 1. Stage 1 (Small Triangles): 直接光栅化小三角形,使用 atomicMin 操作更新深度缓冲区。 2. Stage 2 (Large Triangles): 处理较大的三角形,进行初步的光栅化。 3. Stage 3 (Large Triangles): 对 Stage 2 处理后的较大三角形进行精细光栅化。
关键创新:CuRast的关键创新在于: 1. 无加速结构:避免了预先构建加速结构的开销,更适合动态场景。 2. 多阶段流水线:针对不同大小的三角形采用不同的处理策略,优化整体性能。 3. 基于计算着色器的光栅化:充分利用GPU的并行计算能力,高效处理大量小三角形。
关键设计:论文中三角形大小的划分阈值是一个关键参数,需要根据具体的硬件和场景进行调整。atomicMin 操作的使用保证了深度值的正确性,但也会带来一定的性能开销。此外,各个阶段的线程组大小和缓冲区大小等参数也需要仔细调整,以达到最佳性能。
🖼️ 关键图片
📊 实验亮点
CuRast在渲染包含数亿三角形的模型时,性能显著优于Vulkan。对于唯一实例的模型,CuRast比Vulkan快2-5倍;对于实例化模型,CuRast比Vulkan快高达12倍。这些结果表明,CuRast在处理大规模三角形数据集时具有很高的效率。
🎯 应用场景
CuRast在摄影测量、3D重建、科学可视化等领域具有广泛的应用前景。它可以用于实时渲染大规模的3D扫描模型,例如城市级别的场景或高精度的文物模型。该方法还可以应用于游戏开发中,用于渲染静态的、高细节的场景,例如地形或建筑。
📄 摘要(原文)
Previous work shows that small triangles can be rasterized efficiently with compute shaders. Building on this insight, we explore how far this can be pushed for massive triangle datasets without the need to construct acceleration structures in advance. Method: A 3-stage rasterization pipeline first rasterizes small triangles directly in stage 1, using atomicMin to store the closest fragments. Larger triangles are forwarded to stages 2 and 3. Results: CuRast can render models with hundreds of millions of triangles up to 2-5x (unique) or up to 12x (instanced) faster than Vulkan. Vulkan remains an order of magnitude faster for low-poly meshes. Limitations: We currently focus on dense, opaque meshes that you would typically obtain from photogrammetry/3D reconstruction. Blending/Transparency is not yet supported, and scenes with thousands of low-poly meshes are not implemented efficiently. Future Work: To make it suitable for games and a wider range of use cases, future work will need to (1) optimize handling of scenes with tens of thousands of nodes/meshes, (2) add support for hierarchical clustered LODs such as those produced by Meshoptimizer, (3) add support for transparency, likely in its own stage so as to keep opaque rasterization untouched and fast. Source Code: https://github.com/m-schuetz/CuRast