CN106887042B - 基于gpu的自适应曲面细分方法 - Google Patents
基于gpu的自适应曲面细分方法 Download PDFInfo
- Publication number
- CN106887042B CN106887042B CN201710058646.9A CN201710058646A CN106887042B CN 106887042 B CN106887042 B CN 106887042B CN 201710058646 A CN201710058646 A CN 201710058646A CN 106887042 B CN106887042 B CN 106887042B
- Authority
- CN
- China
- Prior art keywords
- subdivision
- patch
- triangle
- strategy
- factor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000003044 adaptive effect Effects 0.000 title claims abstract description 54
- 238000000034 method Methods 0.000 title claims abstract description 25
- 238000009877 rendering Methods 0.000 claims abstract description 20
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 19
- 239000013598 vector Substances 0.000 claims description 27
- 230000006978 adaptation Effects 0.000 claims description 23
- 238000004040 coloring Methods 0.000 claims description 14
- 238000004364 calculation method Methods 0.000 claims description 12
- 230000008030 elimination Effects 0.000 claims description 9
- 238000003379 elimination reaction Methods 0.000 claims description 9
- 230000003068 static effect Effects 0.000 claims description 9
- 238000012360 testing method Methods 0.000 claims description 9
- 238000012545 processing Methods 0.000 claims description 4
- 230000017105 transposition Effects 0.000 claims description 3
- 230000001105 regulatory effect Effects 0.000 claims 1
- 230000000694 effects Effects 0.000 abstract description 9
- 238000002474 experimental method Methods 0.000 abstract description 3
- 239000002699 waste material Substances 0.000 abstract description 2
- 238000013461 design Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000001404 mediated effect Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000003754 machining Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/30—Polynomial surface description
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Algebra (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
基于GPU的自适应曲面细分方法涉及计算机图形学领域。现存的细分方法,随着细分的进行,顶点和边的数量会急剧增加,实际情况是,在细分迭代数次后,某些区域(如较平坦部分或者初始控制网格较稠密的部分)其控制网格已较好地逼近极限细分曲面,而在另外一些区域(如曲率变化较大的部分)其控制网格还比较粗糙,需要继续细分。为了减少不必要的计算资源的浪费,自适应的曲面细分算法就很重要了。本发明有效的解决曲面光滑度和数据量之间的矛盾,使得在保证曲面细分显示效果的前提下提高渲染帧率。采取了两种基于三角形面片的细分模式:PN三角形和Phong细分进行验证,实验证明,基于GPU的自适应曲面细分方法具有很好的现实和理论意义。
Description
技术领域
本发明属于计算机图形学领域,涉及一种基于GPU的自适应曲面细分方法。
背景技术
随着现代工业的发展,计算机辅助与制造发展迅速,其技术水平的发展已成为一个国家现代化水平的重要标志。其中计算机辅助几何设计(Computer Aided GeometricDesign简称为CAGD)是对外形方面的几何信息的计算机表示,现在已经是计算机应用学科的一个重要分支。
由于计算机离散化表示数据,计算机不能直接生成曲线,当然更不能直接生成曲面。我们在计算机屏幕上看到的曲线、曲面实际上是由无数个多边形构成的。当然多边形越多,那么曲面就会展现的更为真实。要得到精细的效果,需要提供包含大量控制点的实体模型,称之为高模模型,但这给模型设计带来了大量的工作量,提高了人力成本。
曲面细分技术,是一种化繁为简的手段,在模型已有的表面上细分出顶点,逐步逼近理想曲面。1978年Edwin Catmull和Jim Clark提出经典的Catmull-Clark曲面细分算法,由于该算法的递归特性不适用于GPU编程,基于三角形的Loop细分算法也不适用GPU编程。近些年一大批适用于GPU编程的曲面细分算法被提出,比如:2008年CHARLES LOOP和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的细分阶段,设置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,那么渲染管线将不再渲染该面片。对于一个给定的三角形面片,对于每一条边,计算公式如下:
其中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表示三角形面片的任意两点。D表示用户给定的距离大小。Factor3为求得的调节因子。
得到调节因子Factor3后,同样使用线性差值公式:
x3=1+Factor3*(x2-1)
其中,x3为面片大小自适应策略调解后的细分因子大小,x2为经过垂直面自适应策略调解后得到的细分因子大小
裂缝消除:
对于相邻三角形的相邻边,设置该边的细分因子为相邻三角形中最大的细分因子。
第二步:hull着色程序,对每个输出控制点执行一次,设置细分domain为三角形,输出控制点的数量为3,并指定patch函数为第二步中的patch函数。
第三步:domain着色程序,在该程序中分别实现了PN三角形细分策略及Phong细分策略。
使用PN三角形细分策略时,对于给定u,v,w,u+v+w=1,使用三阶贝塞尔三角形公式:
求出细分得到的顶点的三维坐标。
使用二阶贝塞尔三角形公式得到各个顶点的法向量。公式如下:
对于给定的uvw坐标,求出顶点的法向量。
使用Phong细分模式时,三角形面片的控制点为:pl,pm和pn,各个顶点对应的法向量分别为nl,nm和nn。对于给定的uvw坐标,使用以下公式:
其中,
p(u,v,w)=pl*u+pm*v+pn*w
令q=p(u,v,w),那么:
πl(p(u,v,w))=πl(q)=q-((q-pl)Tnl)nl
πm(p(u,v,w))=πm(q)=q-((q-pm)Tnm)nm
πn(p(u,v,w))=πn(q)=q-((q-pn)Tnn)nn
T表示转置;
即可求出细分得到的顶点的三维坐标。
本发明使用Directxll编程工具,基于距离自适应、垂直面自适应、面片大小自适应及背部剔除四种自适应策略,实现了曲面细分的自适应方法。对于每个面片,基于四种策略做细分因子的计算,因此可以动态的根据不同的三角形面片的特征调整每个三角形面片的细分因子大小。从而有效的解决了曲面光滑度与数据量之间的矛盾。
附图说明
图1为物体模型的网格图
图2为模型在细分因子为9是的网格图
图3为模型结果俯视图
图4为模型在细分因子为9时的渲染结果俯视图
图5为模型在细分因子为9时的使用面片大小自适应策略的渲染结果俯视图
图6为模型在细分因子为9时的使用距离自适应策略的渲染结果俯视图
图7为模型在细分因子为9时的使用垂直面自适应策略的渲染结果俯视图
图8为模型在细分因子为9时的使用面片大小自适应策略的渲染结果图
图9为模型在细分因子为9时的使用距离自适应策略的渲染结果图
图10为模型在细分因子为9时的使用垂直面自适应策略的渲染结果图
图11为模型在细分因子为9时的使用背部剔除测试的渲染结果图
图12为为模型在细分因子为9时,未使用自适应策略渲染结果图
图13为基于GPU的自适应曲面细分方法的总体流程图
图14为在计算细分因子时使用自适应策略流程图
图15为相同边由于不同大小的细分因子导致的裂缝的效果图
图16为使用裂缝消除策略后的效果图
具体实施方式
下面结合附图对本发明做进一步的说明。
图13,14是本发明的流程图,在计算机中按如下步骤进行:
1、基于GPU的自适应曲面细分方法;其特征在于,在计算机中是依次按以下步骤实现的:
步骤(1),Directx11初始化
具体包括:
3、设置输入布局,添加POSITION和NORMAL两个顶点语义。
4、设置常量缓冲区,与GPU中HLSL常量缓冲区对应
步骤(2),读取网格模型数据与初始化顶点缓存:
在Directx11中集成了曲面细分管线,在GPU中实现PN三角形细分策略时,对于每一个三角形面片,由三个控制点生成一个有10个控制点的3阶贝塞尔三角形。在GPU中实现Phong细分算法时,对于每一个三角形面片,需要知道每个顶点的法向量。在自定义顶点结构中定义顶点的相关属性,PN三角形细分策略与Phong细分策略顶点格式相同,都包含一个坐标信息和法向量信息。
步骤(3),创建顶点布局:
在自定义顶点结构中定义顶点的相关属性,PN三角形细分策略与Phong细分策略顶点格式相同,都包含一个坐标信息和法向量信息。
步骤(4),网格渲染:
为了能启用Directx11的细分阶段,设置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,那么渲染管线将不再渲染该面片。对于一个给定的三角形面片,对于每一条边,计算公式如下:
其中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表示三角形面片的任意两点。D表示用户给定的距离大小。Factor3为求得的调节因子。
得到调节因子Factor3后,同样使用线性差值公式:
x3=1+Factor3*(x2-1)
其中,x3为面片大小自适应策略调解后的细分因子大小,x2为经过垂直面自适应策略调解后得到的细分因子大小
裂缝消除:
对于相邻三角形的相邻边,设置该边的细分因子为相邻三角形中最大的细分因子。
第二步:hull着色程序,对每个输出控制点执行一次,设置细分domain为三角形,输出控制点的数量为3,并指定patch函数为第二步中的patch函数。
第三步:domain着色程序,在该程序中分别实现了PN三角形细分策略及Phong细分策略。
使用PN三角形细分策略时,对于给定u,v,w,u+v+w=1,使用三阶贝塞尔三角形公式:
求出细分得到的顶点的三维坐标。
使用二阶贝塞尔三角形公式得到各个顶点的法向量。公式如下:
对于给定的uvw坐标,求出顶点的法向量。
使用Phong细分模式时,三角形面片的控制点为:pl,pm和pn,各个顶点对应的法向量分别为nl,nm和nn。对于给定的uvw坐标,使用以下公式:
其中,
p(u,v,w)=pl*u+pm*v+pn*w
令q=p(u,v,w),那么:
πl(p(u,v,w))=πl(q)=q-((q-pl)Tnl)nl
πm(p(u,v,w))=πm(q)=q-((q-pm)Tnm)nm
πn(p(u,v,w))=πn(q)=q-((q-pn)Tnn)nn
T表示转置;
即可求出细分得到的顶点的三维坐标。
经过以上步骤后,实现了基于GPU的自适应曲面细分方法,图2展示了物体模型在进行曲面细分后的显示效果,与图1相比,可以看出在原有的控制点的基础上,新生成了大量的新的控制点。图4与图3相比,细分后的结果面片更加光滑。图7中展示了使用垂直面自适应策略时的俯视图,因为是俯视图,所以该面近似与视线方向垂直,因此结果图与图4结果类似。图8,9及10分别展示了使用不同自适应策略后的渲染效果。图15为产生裂缝示意图,图16为消除裂缝示意图。如果所示,左侧三角形细分每个边的细分因子都为4,右侧三角形每条边的细分因子都为3,所以在共享边上产生了裂缝,使用裂缝消除算法解决该问题,右侧三角形的共享边细分因子取4,其他边保持不变,如图16 所示,消除了裂缝。为验证自适应算法的有效性,本文对各个自适应策略分别做了实验,并从客观指标帧率(FPS)对其验证,帧率越高表示绘制场景需要的资源更少,帧率的提升反映了自适应曲面细分的有效性(实验机器的配置:NVIDIA Quadro K600图形卡),结果如下:
背部消隐测试
表1
距离自适应测试
表2
表3
垂直面自适应
表4
面片大小自适应
表5
从表1-5可以看出,随着细分因子的增大,绘制的面片的增加,使用自适应策略后,能大幅度提升帧率。此外,结合图8,9,10,11及12可以看出,在渲染效果几乎相同的情况下,使用自适应曲面细分方法能大幅度提升帧率。
Claims (1)
1.基于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,那么渲染管线将不再渲染该面片;对于一个给定的三角形面片,对于每一条边,计算公式如下:
其中edgedot为点积结果,Nj,Nk表示三角形面片中任意两个顶点的组合,V为视向量;对于左手坐标系,若该结果为负值,说明该面片的这条边为背向;当一个面片的三条边都为背向时说明该面片为背向;
距离自适应:
基于距离自适应的细分因子计算公式如下:
Factor1=1-(Dis-minDis)/disFrange
其中,Dis表示视点与面片边中点的距离,minDis表示使用最大细分因子的最小距离;disFrange表示近平面与远平面之间的距离,Factor1为使用距离自适应策略得到的调节因子;得到的Factor1的值位于[0,1]之间;
得到调节因子后,使用线性插值公式:
x1=1+Factor1*(x-1)
其中,x1为使用距离自适应策略调解后的细分因子大小,x为初始细分因子大小;
垂直面自适应:
对于每一个面片处理如下:
其中edgedot为点积结果,Nj,Nk表示三角形面片中任意两个顶点的组合,V为视向量;其中edgedot为归一化后的两个向量之间的乘积;
根据公式:
Factor2=1-|edgedot|
同样使用线性插值公式:
x2=1+Factor2*(x1-1)
其中,Factor2为使用垂直面自适应策略得到的调节因子;x2为经过垂直面自适应策略调解后得到的细分因子大小,x1使用距离自适应策略调解后的细分因子大小;
面片大小自适应:
对于模型中的面片首先根据面片的每一条边进行细分因子的动态计算;对于一个给定的面片,计算公式如下:
其中,P1,P2表示三角形面片的任意两点;D表示用户给定的距离大小;Factor3为求得的调节因子;
得到调节因子Factor3后,同样使用线性插值公式:
x3=1+Factor3*(x2-1)
其中,x3为面片大小自适应策略调解后的细分因子大小,x2为经过垂直面自适应策略调解后得到的细分因子大小;
裂缝消除:
对于相邻三角形的相邻边,设置该边的细分因子为相邻三角形中最大的细分因子;
第二步:hull着色程序,对每个输出控制点执行一次,设置细分domain为三角形,输出控制点的数量为3,并指定patch函数为第二步中的patch函数;
第三步:domain着色程序,在该程序中分别实现了PN三角形细分策略及Phong细分策略;
使用PN三角形细分策略时,对于给定u,v,w,u+v+w=1,使用三阶贝塞尔三角形公式:
求出细分得到的顶点的三维坐标;
使用二阶贝塞尔三角形公式得到各个顶点的法向量;公式如下:
对于给定的uvw坐标,求出顶点的法向量;
使用Phong细分模式时,三角形面片的控制点为:pl,pm和pn,各个顶点对应的法向量分别为nl,nm和nn;对于给定的uvw坐标,使用以下公式:
其中,
p(u,v,w)=pl*u+pm*v+pn*w
令q=p(u,v,w),那么:
πl(p(u,v,w))=πl(q)=q-((q-pl)Tnl)nl
πm(p(u,v,w))=πm(q)=q-((q-pm)Tnm)nm
πn(p(u,v,w))=πn(q)=q-((q-pn)Tnn)nn
T表示转置;
即能求出细分得到的顶点的三维坐标。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710058646.9A CN106887042B (zh) | 2017-01-23 | 2017-01-23 | 基于gpu的自适应曲面细分方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710058646.9A CN106887042B (zh) | 2017-01-23 | 2017-01-23 | 基于gpu的自适应曲面细分方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106887042A CN106887042A (zh) | 2017-06-23 |
CN106887042B true CN106887042B (zh) | 2020-05-19 |
Family
ID=59176698
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710058646.9A Active CN106887042B (zh) | 2017-01-23 | 2017-01-23 | 基于gpu的自适应曲面细分方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106887042B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108346177B (zh) * | 2018-01-15 | 2020-09-08 | 浙江大学 | 一种基于Unity3D的虚拟陶瓷设计方法 |
CN115170600B (zh) * | 2022-09-05 | 2022-11-22 | 南京砺算科技有限公司 | 用于曲面细分的缝合方法及装置、存储介质、终端设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101510226A (zh) * | 2009-03-26 | 2009-08-19 | 山东理工大学 | 产品stl模型快速自适应细分方法 |
CN101639946A (zh) * | 2009-08-26 | 2010-02-03 | 北京农业信息技术研究中心 | 植物叶片三维模型几何描述和曲面重建方法及系统 |
US8471852B1 (en) * | 2003-05-30 | 2013-06-25 | Nvidia Corporation | Method and system for tessellation of subdivision surfaces |
CN103810756A (zh) * | 2014-01-17 | 2014-05-21 | 浙江大学 | 基于不规则区域的自适性的Loop细分曲面的绘制方法 |
CN105676290A (zh) * | 2016-04-03 | 2016-06-15 | 北京工业大学 | 基于曲面细分的地震数据三维显示方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070247458A1 (en) * | 2006-04-11 | 2007-10-25 | Samsung Electronics Co., Ltd. | Adaptive computation of subdivision surfaces |
-
2017
- 2017-01-23 CN CN201710058646.9A patent/CN106887042B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8471852B1 (en) * | 2003-05-30 | 2013-06-25 | Nvidia Corporation | Method and system for tessellation of subdivision surfaces |
CN101510226A (zh) * | 2009-03-26 | 2009-08-19 | 山东理工大学 | 产品stl模型快速自适应细分方法 |
CN101639946A (zh) * | 2009-08-26 | 2010-02-03 | 北京农业信息技术研究中心 | 植物叶片三维模型几何描述和曲面重建方法及系统 |
CN103810756A (zh) * | 2014-01-17 | 2014-05-21 | 浙江大学 | 基于不规则区域的自适性的Loop细分曲面的绘制方法 |
CN105676290A (zh) * | 2016-04-03 | 2016-06-15 | 北京工业大学 | 基于曲面细分的地震数据三维显示方法 |
Non-Patent Citations (4)
Title |
---|
Feature-adaptive GPU rendering of Catmull-Clark subdivision surfaces;MATTHIAS NIEßNER,etc;《ACM Transactions on Graphics》;20120131;第31卷(第1期);第6:1-6:11页 * |
PN三角形在基于GPU曲面细分中的应用;陈驰,等;《太赫兹科学与电子信息学报》;20150430;第13卷(第2期);第297-301页 * |
基于GPU曲面细分的研究与应用;覃飏;《中国优秀硕士学位论文全文数据库 信息科技辑》;20130515(第5期);第I138-2050页 * |
基于图像处理单元的古建筑构件快速绘制;黄明,等;《测绘科学》;20160531;第41卷(第5期);第111-115页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106887042A (zh) | 2017-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kobbelt et al. | A survey of point-based techniques in computer graphics | |
Piponi et al. | Seamless texture mapping of subdivision surfaces by model pelting and texture blending | |
US7412362B2 (en) | River modeling | |
US20070247458A1 (en) | Adaptive computation of subdivision surfaces | |
US20110310102A1 (en) | Systems and methods for subdividing and storing vertex data | |
EP3379495B1 (en) | Seamless fracture in an animation production pipeline | |
US20240185503A1 (en) | Displacement-centric acceleration for ray tracing | |
CN106887042B (zh) | 基于gpu的自适应曲面细分方法 | |
Reshetov | Cool patches: A geometric approach to ray/bilinear patch intersections | |
US20020118212A1 (en) | Shading polygons from a three-dimensional model | |
Li et al. | Approximation of Loop subdivision surfaces for fast rendering | |
Li et al. | An alternative method for constructing interpolatory subdivision from approximating subdivision | |
Boubekeur et al. | QAS: Real-time quadratic approximation of subdivision surfaces | |
Linsen et al. | Fan clouds-an alternative to meshes | |
CN107578821B (zh) | 一种用于虚拟手术系统中的实时的高效gpu渲染方法 | |
Cui et al. | GPU-based smooth free-form deformation with sharp feature awareness | |
Tatarchuk | Real-time tessellation on GPU | |
Brainerd | Catmull-clark subdivision surfaces | |
Valentine et al. | GPU Accelerated Modelling and Real-time Rendering of Fluid Motion | |
Settgast et al. | Adaptive Tesselation of Subdivision Surfaces in OpenSG | |
Runions et al. | Ribbons: A representation for point clouds | |
CN118247410B (zh) | 一种基于可微渲染的外观驱动的建筑模型简化方法 | |
Amresh et al. | Methods for approximating Loop subdivision using tessellation enabled GPUs | |
Lanquetin et al. | Generalized SCODEF deformations on subdivision surfaces | |
Husain et al. | Iterative Process to Improve Simple Adaptive Subdivision Surfaces Method for Triangular Meshes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |