基于GPU的自适应曲面细分方法技术

技术编号:15705355 阅读:153 留言:0更新日期:2017-06-26 13:06
基于GPU的自适应曲面细分方法涉及计算机图形学领域。现存的细分方法,随着细分的进行,顶点和边的数量会急剧增加,实际情况是,在细分迭代数次后,某些区域(如较平坦部分或者初始控制网格较稠密的部分)其控制网格已较好地逼近极限细分曲面,而在另外一些区域(如曲率变化较大的部分)其控制网格还比较粗糙,需要继续细分。为了减少不必要的计算资源的浪费,自适应的曲面细分算法就很重要了。本发明专利技术有效的解决曲面光滑度和数据量之间的矛盾,使得在保证曲面细分显示效果的前提下提高渲染帧率。采取了两种基于三角形面片的细分模式:PN三角形和Phong细分进行验证,实验证明,基于GPU的自适应曲面细分方法具有很好的现实和理论意义。

Adaptive surface subdivision method based on GPU

The adaptive surface subdivision method based on GPU involves computer graphics. The existing segmentation methods, with segmentation, the number of vertices and edges will increase dramatically, the reality is that in the subdivision iteration times, some regions (such as part of a flat part or the initial control mesh is dense) the control grid has a good approximation of the limit subdivision surface, and in some areas (such as the large curvature part) the control mesh is relatively rough, need to continue to breakdown. To reduce the waste of unnecessary computational resources, adaptive surface subdivision algorithms are important. The invention effectively solves the contradiction between the smoothness of the surface and the amount of data, so as to improve the rendering frame rate under the premise of ensuring the subdivision effect of the surface subdivision. Two subdivision patterns based on triangular patches are adopted: PN triangle and Phong subdivision for verification. The experimental results show that the adaptive surface subdivision method based on GPU has very good practical and theoretical significance.

【技术实现步骤摘要】
基于GPU的自适应曲面细分方法
本专利技术属于计算机图形学领域,涉及一种基于GPU的自适应曲面细分方法。
技术介绍
随着现代工业的发展,计算机辅助与制造发展迅速,其技术水平的发展已成为一个国家现代化水平的重要标志。其中计算机辅助几何设计(ComputerAidedGeometricDesign简称为CAGD)是对外形方面的几何信息的计算机表示,现在已经是计算机应用学科的一个重要分支。由于计算机离散化表示数据,计算机不能直接生成曲线,当然更不能直接生成曲面。我们在计算机屏幕上看到的曲线、曲面实际上是由无数个多边形构成的。当然多边形越多,那么曲面就会展现的更为真实。要得到精细的效果,需要提供包含大量控制点的实体模型,称之为高模模型,但这给模型设计带来了大量的工作量,提高了人力成本。曲面细分技术,是一种化繁为简的手段,在模型已有的表面上细分出顶点,逐步逼近理想曲面。1978年EdwinCatmull和JimClark提出经典的Catmull-Clark曲面细分算法,由于该算法的递归特性不适用于GPU编程,基于三角形的Loop细分算法也不适用GPU编程。近些年一大批适用于GPU编程的曲面细分算法被提出,比如:2008年CHARLESLOOP和SCOTTSCHAEFER两人于2008年提出了一种近似Catmull-Clark细分面的算法、同年TamyBoubekeur提出的Phong细分算法。由于细分曲面的顶点和面数以指数速度增长,绘制速度会随细分深度增加而迅速降低,所以在GPU技术出现之前细分曲面技术难以实用,直到由ATI公司基于GPU开发应用了曲面细分之后,曲面细分技术得以在工业设计、计算机动画和雕塑曲面等的设计加工中被广泛应用和研究。现存的细分方法,随着细分的进行,顶点和边的数量会急剧增加,所以对庞大复杂的网格模型进行细分时,将耗费大量的存储资源和运算资源。同时对后续的显示、传输或者数控加工编程增加负担。而实际情况是,在细分迭代数次后,某些区域(如较平坦部分或者初始控制网格较稠密的部分)其控制网格已较好地逼近极限细分曲面,而在另外一些区域(如曲率变化较大的部分)其控制网格还比较粗糙,需要继续细分。为了减少不必要的计算资源的浪费,自适应的曲面细分算法就很重要了。根据给定的局部细分准则,对整个控制网格上进行局部细分,力求以规模较小的网格来表示精度较高的细分曲面,这对于扩大细分曲面的应用具有重要的工程意义。基于以上背景,基于GPU的自适应曲面细分方法提出了一种自适应策略,将有效的解决曲面光滑度和数据量之间的矛盾,使得在保证曲面细分显示效果的前提下提高渲染帧率。采取了两种基于三角形面片的细分模式:PN三角形和Phong细分进行验证,实验证明,基于GPU的自适应曲面细分方法具有很好的现实和理论意义。
技术实现思路
专利技术目的:以有效的解决曲面光滑度和数据量之间的矛盾,使得在提高显示效果的前提下提高渲染帧率。本专利技术包括:至少支持Directx11的GPU。基于GPU的自适应曲面细分方法;其特征在于,在计算机中是依次按以下步骤实现的:步骤(1),Directx11初始化具体包括:1、设置输入布局,添加POSITION和NORMAL两个顶点语义。2、设置常量缓冲区,与GPU中HLSL常量缓冲区对应步骤(2),读取网格模型数据与初始化顶点缓存:在Directx11中集成了曲面细分管线,在GPU中实现PN三角形细分策略时,对于每一个三角形面片,由三个控制点生成一个有10个控制点的3阶贝塞尔三角形。在GPU中实现Phong细分算法时,对于每一个三角形面片,需要知道每个顶点的法向量。在自定义顶点结构中定义顶点的相关属性,PN三角形细分策略与Phong细分策略顶点格式相同,都包含一个坐标信息和法向量信息。步骤(3),创建顶点布局:在自定义顶点结构中定义顶点的相关属性,PN三角形细分策略与Phong细分策略顶点格式相同,都包含一个坐标信息和法向量信息。步骤(4),网格渲染:为了能启用Directx11的细分阶段,设置InputAssembler的图元拓扑类型,使其接收的是控制面片的结构,用IASetPrimitiveTopology设置D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,使得GPU以面片的方式读取顶点缓存。步骤(5),自适应曲面细分:准备好顶点缓冲后,在GPU中实现曲面细分算法,GPU以D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST组装方式对输入的顶点缓冲进行读取。在Directx11中,曲面细分阶段分为三个管线,分别为Hull着色阶段,Tessellator阶段以及Domain着色阶段。其中,Hull着色阶段由两部分构成,分别对应两个不同的hlsl程序,分别为Hull着色阶段和patch静态函数。在patch静态函数中决定了曲面片的细分程度,从而告知Tessellator阶段要细分出多少顶点。第一步:在patch静态函数中,进行自适应曲面细分算法的实现。自适应策略包括:背部剔除、距离自适应、垂直面自适应及面片大小自适应。计算出面片的细分因子后,需要进行裂缝消除。背部剔除:在进行计算细分因子之前,先做背部剔除测试,对于没有通过背部剔除测试的面片,只需要把该面片的每一条边的曲面细分因子置为0,那么渲染管线将不再渲染该面片。对于一个给定的三角形面片,对于每一条边,计算公式如下:其中edgedot为点积结果,Nj,Nk表示三角形面片中任意两个顶点的组合,V为视向量。对于左手坐标系,若该结果为负值,说明该面片的这条边为背向。当一个面片的三条边都为背向时说明该面片为背向。距离自适应:基于距离自适应的细分因子计算公式如下:Factor1=1-(Dis-minDis)/disFrange其中,Dis表示视点与面片边中点的距离,minDis表示使用最大细分因子的最小距离。disFrange表示近平面与远平面之间的距离,Factor1为使用距离自适应策略得到的调节因子这两个参数大小用户可以设定,对于不同的物体模型,取值不同。最终可以得到的Factor1的值位于[0,1]之间。得到调节因子后,使用线性差值公式:x1=1+Factor*(x-1)其中,x1为使用距离自适应策略调解后的细分因子大小,x为初始细分因子大小。垂直面自适应:一个面片如果与视线方向保持近似垂直时,由于3D场景在2D屏幕上显示时需要进行投影,对于这样的面片进行细分视觉效果变化不大,因此适当减小细分因子。对于每一个面片处理如下:其中edgedot为点积结果,Nj,Nk表示三角形面片中任意两个顶点的组合,V为视向量。其中edgedot为归一化后的两个向量之间的乘积。根据公式:Factor2=1-|edgedot|同样使用线性插值公式:x2=1+Factor2*(x1-1)其中,Factor2为使用垂直面自适应策略得到的调节因子。x2为经过垂直面自适应策略调解后得到的细分因子大小,x1使用距离自适应策略调解后的细分因子大小面片大小自适应:对于模型中的面片首先根据面片的每一条边进行细分因子的动态计算。对于一个给定的面片,计算公式如下:其中,P1,P2表示三角形面片的任意本文档来自技高网
...
基于GPU的自适应曲面细分方法

【技术保护点】
基于GPU的自适应曲面细分方法;其特征在于,在计算机中是依次按以下步骤实现的:步骤(1),Directx11初始化步骤(2),读取网格模型数据与初始化顶点缓存:在Directx11中集成了曲面细分管线,在GPU中实现PN三角形细分策略时,对于每一个三角形面片,由三个控制点生成一个有10个控制点的3阶贝塞尔三角形;在GPU中实现Phong细分算法时,对于每一个三角形面片,需要知道每个顶点的法向量;在自定义顶点结构中定义顶点的相关属性,PN三角形细分策略与Phong细分策略顶点格式相同,都包含一个坐标信息和法向量信息;步骤(3),创建顶点布局:在自定义顶点结构中定义顶点的相关属性,PN三角形细分策略与Phong细分策略顶点格式相同,都包含一个坐标信息和法向量信息;步骤(4),网格渲染:设置Input Assembler的图元拓扑类型,使其接收的是控制面片的结构,用IASetPrimitiveTopology设置D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,使得GPU以面片的方式读取顶点缓存;步骤(5),自适应曲面细分:准备好顶点缓冲后,在GPU中实现曲面细分算法,GPU以D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST组装方式对输入的顶点缓冲进行读取;在Directx11中,曲面细分阶段分为三个管线,分别为Hull着色阶段,Tessellator阶段以及Domain着色阶段;其中,Hull着色阶段由两部分构成,分别对应两个不同的hlsl程序,分别为Hull着色阶段和patch静态函数;在patch静态函数中决定了曲面片的细分程度,从而告知Tessellator阶段要细分出多少顶点;第一步:在patch静态函数中,进行自适应曲面细分算法的实现;自适应策略包括:背部剔除、距离自适应、垂直面自适应及面片大小自适应;计算出面片的细分因子后,需要进行裂缝消除;背部剔除:在进行计算细分因子之前,先做背部剔除测试,对于没有通过背部剔除测试的面片,只需要把该面片的每一条边的曲面细分因子置为0,那么渲染管线将不再渲染该面片;对于一个给定的三角形面片,对于每一条边,计算公式如下:...

【技术特征摘要】
1.基于GPU的自适应曲面细分方法;其特征在于,在计算机中是依次按以下步骤实现的:步骤(1),Directx11初始化步骤(2),读取网格模型数据与初始化顶点缓存:在Directx11中集成了曲面细分管线,在GPU中实现PN三角形细分策略时,对于每一个三角形面片,由三个控制点生成一个有10个控制点的3阶贝塞尔三角形;在GPU中实现Phong细分算法时,对于每一个三角形面片,需要知道每个顶点的法向量;在自定义顶点结构中定义顶点的相关属性,PN三角形细分策略与Phong细分策略顶点格式相同,都包含一个坐标信息和法向量信息;步骤(3),创建顶点布局:在自定义顶点结构中定义顶点的相关属性,PN三角形细分策略与Phong细分策略顶点格式相同,都包含一个坐标信息和法向量信息;步骤(4),网格渲染:设置InputAssembler的图元拓扑类型,使其接收的是控制面片的结构,用IASetPrimitiveTopology设置D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,使得GPU以面片的方式读取顶点缓存;步骤(5),自适应曲面细分:准备好顶点缓冲后,在GPU中实现曲面细分算法,GPU以D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST组装方式对输入的顶点缓冲进行读取;在Directx11中,曲面细分阶段分为三个管线,分别为Hull着色阶段,Tessellator阶段以及Domain着色阶段;其中,Hull着色阶段由两部分构成,分别对应两个不同的hlsl程序,分别为Hull着色阶段和patch静态函数;在patch静态函数中决定了曲面片的细分程度,从而告知Tessellator阶段要细分出多少顶点;第一步:在patch静态函数中,进行自适应曲面细分算法的实现;自适应策略包括:背部剔除、距离自适应、垂直面自适应及面片大小自适应;计算出面片的细分因子后,需要进行裂缝消除;背部剔除:在进行计算细分因子之前,先做背部剔除测试,对于没有通过背部剔除测试的面片,只需要把该面片的每一条边的曲面细分因子置为0,那么渲染管线将不再渲染该面片;对于一个给定的三角形面片,对于每一条边,计算公式如下:其中edgedot为点积结果,Nj,Nk表示三角形面片中任意两个顶点的组合,V为视向量;对于左手坐标系,若该结果为负值,说明该面片的这条边为背向;当一个面片的三条边都为背向时说明该面片为背向;距离自适应:基于距离自适应的细分因子计算公式如下:Factor1=1-(Dis-minDis)/disFrange其中,Dis表示视点与面片边中点的距离,minDis表示使用最大细分因子的最小距离;di...

【专利技术属性】
技术研发人员:何震震肖创柏禹晶
申请(专利权)人:北京工业大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1