论文部分内容阅读
在计算机图形学和可视化领域,一个经典问题是如何构造绘制管线以高效实现透明等多片元效果。现有管线通过光栅化将图元转化为离散的片元,着色后确定帧缓存中对应像素的颜色。每个绘制命令指定的所有图元一起提交,以流的方式通过管线的各个阶段。图元相互遮挡时会有多个片元覆盖同一像素,但片元缓存和测试仅保留一层片元。这个过程只针对不透明表面的绘制进行优化,例如在光栅化后尽早比较深度剔除被遮挡的片元。我们聚焦于在图元遮挡关系复杂情况下考察多层片元,开展了以下研究: (1)提出了一种面向几何结构复杂的大模型的多片元可见性求解方法 描述虚拟场景的三维模型包含了大量图元,以精确表达非流形几何等复杂结构。模型表面的可见性顺序对绘制多片元效果至关重要,这需要在物体空间拓扑排序和在屏幕空间深度排序。前者预先为绘制调用构造有向图,能确定图元提交顺序但相交时不存在全序关系。后者对光栅化的结果应用延迟着色,能处理非流形结构,但当片元层数较多时发生缓存溢出。 对此本文根据物体空间近似剖分和屏幕空间精确求交,联合求解复杂几何结构大模型的多片元可见性。我们使用类体素八叉树将场景剖分成图元簇,保证所有簇的全序关系存在。然后利用光栅化的八叉树网格,保留图元簇和相应深度桶相交的片元。与已有文献相比,我们的方法不但能直接求解复杂几何而且减少了包含大量图元的大模型的绘制时间。 (2)提出了一种在线剔除的多片元可见性预测方法 多片元效果只关注距离视点最近的几层表面时,虚拟场景中的所有图元仍会被提交和光栅化。在物体空间根据图元重心深度排序,能按近似相关性决定提交顺序但仍需处理无关图元。在屏幕空间维护动态缓存,能最后得到相关片元但引入过多更新操作。这两种方式都要访问不可见的表面,包含了大量无效计算。 对此本文利用帧间的时空一致性预测相关的图元和片元,基于前一帧直接剔除在当前帧被遮挡的表面。我们应用分摊到多帧的深度排序,使得视点和场景连续变化时渐进确定相关图元。使用不完整的大顶堆数据结构实现缓存,适应屏幕空间高度变化的片元数量,并据此反向重投影确定相关性边界。与已有文献相比,我们的方法提高了漫游时的绘制效率。 (3)提出了一种并行的多片元可见性复合拟合和采样方法 在植被等图元分布密集的虚拟场景中,每个片元对像素贡献较小但总数量很高。采用可见性的隐式表达,能准确描述但需要记录所有片元。另一方面显式表达应用经验函数逼近,能压缩存储但适用情况有限。特别是后者需要在临界区中评估误差,频繁引入忙等待而降低了任务并行度。 对此本文将可见性中的高频和低频成分分离,分别采用合适的表达形式拟合。我们采用基于原子操作的多深度测试,单遍绘制场景时抽取高频相关的片元。同时将剩余片元傅里叶级数展开,获得系数后直接混合到多绘制对象。再次绘制场景时复合两种形式,每个抵达片元随机采样可见性。与已有文献相比,我们的方法在同样的时间和空间开销卞有更好的图像质量。 (4)搭建了一个全部可编程的多片元效果绘制管线原型 虽然默认管线中的顶点、几何和像素等着色器已具有完全可编程性,但光栅化过程和后续的逐像素操作都固化在硬件中。由于对外仅暴露了少量可配置参数和选项,如何修改和复用已有功能尚不明确。如何充分发挥单指令、多线程体系架构的特点,仍需要更深入的性能分析。 对此本文实现了基于软件的光栅化,将管线中各个处理阶段封装为函数对象。为了均衡负载和减少同步,我们将图元和片元按组映射给计算线程。其中输入图元被打包为一维纹理,依次进行坐标变换、剔除和裁剪。而像素被划分为两级区块,用来判断粗、细粒度的覆盖情况和生成片元。在此基础上,改进的部分作为额外的处理阶段被直接集成。