面向GPU基于Vertex Texture Fetch的细分曲面构想和初步实现
作者:张嘉华、王建光、梁成(女) 华南理工大学计算机科学与工程学院(510460) |
指导教师:李桂清 华南理工大学计算机科学与工程学院(510460) |
newzjh@126.com、Alceliang@163.net |
|
介绍:
近几年来,面向GPU的图形技术发展非常迅速,可编程着色(Programming Shader)而融入到许多实际应用中了,而细分曲面也已经发展了很久的一段时间,有很多成熟的方法。本文结合作者在做的项目简单地介绍了作者在GPU上通过Vertex Shader和Pixel Shader实现细分曲面的构想。该构想与其它方法网格建模渲染方法相比,只需要非常小的运行时存储空间,只存储模型最简单的能保持特征的三角形网格,在需要高分辨率时,在GPU上通过实时细分产生实际的网格。本构想仍没解决的问题是实时细分所产生的网格的渲染问题。
1、引子
细分曲面在计算机动画、多分辨率编辑分析等方面有广泛的应用。以往有很多计算机网格渲染方法,对于超大规模具有很多三角形面皮的模型,往往采用多分辨率LOD方法,也就是在读入模型的时候建立模型的多个分辨率,当模型接近的时候采用高的分辨率模型,远的时候采用低的分辨率模型,后来随着Huge Hoppe关于渐进网格的提出,微软的Direct 3D在API层实现了渐进网格、增强网格,并能设置LOD层次值,但其往往需要在模型读入时建立模型的各级分辨率或者在运行时需要CPU对模型根据一定的LOD准则不断Refinement和合并,占用很大的存储空间,理论上要存储原模型的33%倍的顶点,对于一个很多三角形面的模型来说,难以实现运行时Out-of-core。而相比之下,基于细分曲面的方法,可以形式化地表示为“基本网格+细分的拓扑规则+细分的几何规则”,在模型读入建立时简化模型到最基本的网格,然后在运行时通过GPU的Vertex Shader Texture Fetch技术不断读入显示缓冲中的以纹理形式存放的细分矩阵,以实时迭代的形式不断Refinement,直至模型分辨率可以接收。我们这种方法与地形的中点位移法分形生成、L-System下植物生成以及过程纹理很类似,也是给定一非常简单的初始素材,根据给定的参数、通过一系列迭代和启发式规则生成满意的目标,其不同点在于本构想是针对模型的,期盼运行时实时实现。
优点:本构想能够运行时实时实现细分、只需很少存储空间存储初始网格、具有可控的实时细分规则、能够易于实现Out-of-Core,无需CPU