CN104157000B - 模型表面法线的计算方法 - Google Patents
模型表面法线的计算方法 Download PDFInfo
- Publication number
- CN104157000B CN104157000B CN201410400922.1A CN201410400922A CN104157000B CN 104157000 B CN104157000 B CN 104157000B CN 201410400922 A CN201410400922 A CN 201410400922A CN 104157000 B CN104157000 B CN 104157000B
- Authority
- CN
- China
- Prior art keywords
- normal
- model
- space
- pixel
- calculating
- 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
Landscapes
- Image Generation (AREA)
Abstract
本发明公开了一种模型表面法线的计算方法,对于有多个三角形拼接描述物体的表面结构的三角网络模型,经过GPU的光栅化,即对每个顶点和像素进行插值计算,转化为像素的位置和法线信息,则计算每个像素的法线的朝向能得出模型表面的光照信息,计算每个像素的法线的朝向分为两种情况;第一种情况:对不带有法线贴图的模型进行法线计算;第二种情况:对带有法线贴图的模型法线进行计算。达到了消除模型表面过渡不平滑,反差较小的目的。
Description
技术领域
本发明涉及计算机图像学领域,具体地,涉及一种模型表面法线的计算方法。
背景技术
随着计算机图形学不断发展,其包罗万象,来源广泛,主要包括虚拟现实、科学研究、三维动画、军事仿真和娱乐等。由于电子游戏和电影特效的广泛应用以及普及,计算机图形学越来越受人们的关注。尽管科技在不断的发展,但计算机图形学一些基本的原理和方法,却保持着稳定和连贯。在虚拟的三维世界中,采用3D建模软件塑造几何外型,这些模型一般都不含有表面法线信息,而法线信息对于实体的模型绘制有很大的作用,目前计算模型表面顶点法线也有很多方法,基本使用平均加权法来计算法线,对物体表现的形态进行更多细节的刻画,使观察者所得到模型更真实。目前计算模型表面的法线采用面法线来表示各个点的法线方向,这样的方法并不能使得模型更好的呈现其表面的形态,实体模型如果都是采用这种面法线绘制,那么这个面的亮度都是一样的,从而造成在各个面衔接的时候不够光滑,整个对象模型看起来如鳞片状的效果。
发明内容
本发明的目的在于,针对上述问题,提出一种模型表面法线的计算方法,以实现消除模型表面过渡不平滑,反差较小的优点。
为实现上述目的,本发明采用的技术方案是:
一种模型表面法线的计算方法,对于有多个三角形拼接描述物体的表面结构的三角网络模型,经过GPU的光栅化,即对每个顶点和像素进行插值计算,转化为像素的位置和法线信息,则计算每个像素的法线的朝向能得出模型表面的光照信息,
计算每个像素的法线的朝向分为两种情况;
第一种情况:对不带有法线贴图的模型进行法线计算;
第二种情况:对带有法线贴图的模型法线进行计算。
优选的,上述第一种情况对不带有法线贴图的模型进行法线计算具体步骤包括:
找到三角网络模型中所有共享顶点的所有面的步骤;
计算所有面中各个面的面法线的步骤;
将上述计算的各个面的面法线相加从而得出一个面法线和,将该面法线和除以三角网络模型中共顶点的三角形数量值。
优选的,第二种情况对带有法线贴图的模型法线进行计算具体步骤包括:
采集法线贴图中的法线的步骤;
上述采集法线为切面空间的法线,将该切面空间的法线方向转化为LOCAL空间的法线计算的步骤;
判断LOCAL空间的法线方向,使该LOCAL空间的法线方向为正方向的法线的步骤。
优选的,上述切面空间具体计算步骤为:
设定在切线空间的坐标方向为T,B,N;T代表切线方向,B代表副法线方向,N代表法线方向;且三个方向相互垂直;
设三角形ABC,中,基于切线空间的坐标为纹理u,v坐标,根据顶点的u,v坐标可以计算T,B,N,而T,B均在三角形所在平面上,设A(U1,V1)B(U2,V2),C(U3,V3);
其中,
ΔUBA=U2-U1,ΔUCA=U3-U1,ΔVBA=V2-V1,ΔVCA=V3-V1,,
有已知A,B,C三点的坐标,得到T,B向量,进一步得到N,从而得到三角形的切线空间。
优选的,所述法线方向判断具体为:
若:(T×B)*N<0,令T=-T,B=-B,使法线方向反正转为法线正方向。
本发明的技术方案具有以下有益效果:
本发明的技术方案,将法线计算分为两种情况,不带法线贴图的计算法线消除了面之间的不平滑的现象。而带有法线贴图除了计算还采用了判断法线的正反方向,使法线的方向始终朝向摄像机方向。而法线贴图除了能使渲染的图形显示更多的细节,并且对模型表面光照的计算也是有重要的作用。从而达到了消除模型表面过渡不平滑,反差较小的目的。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
图1为网格模型的顶点和三角形列表;
图2为一个简易网格模型构成示意图;
图3为网格模型中三角面的法线示意图;
图4为不带有法线贴图车的低精度模型示意图;
图5为图4所示的低精度模型的法线贴图;
图6为带法线贴图的车的低精度模型示意图;
图7为切线空间三角形各个顶点坐标方向和U,V坐标;
图8为不带有法线贴图的模型进行法线计算的流程图;
图9为带法线贴图的法线计算流程图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
一种模型表面法线的计算方法,对于有多个三角形拼接描述物体的表面结构的三角网络模型,经过GPU的光栅化,即对每个顶点和像素进行插值计算,转化为像素的位置和法线信息,则计算每个像素的法线的朝向能得出模型表面的光照信息,
计算每个像素的法线的朝向分为两种情况;
第一种情况:对不带有法线贴图的模型进行法线计算;
第二种情况:对带有法线贴图的模型法线进行计算。
优选的,如图8所示,第一种情况对不带有法线贴图的模型进行法线计算具体步骤包括:
找到三角网络模型中所有共享顶点的所有面的步骤;
计算所有面中各个面的面法线的步骤;
将上述计算的各个面的面法线相加从而得出一个面法线和,将该面法线和除以三角网络模型中共顶点的三角形数量值。
如图9所示,第二种情况对带有法线贴图的模型法线进行计算具体步骤包括:
采集法线贴图中的法线的步骤;
上述采集法线为切面空间的法线,将该切面空间的法线方向转化为LOCAL空间的法线计算的步骤;
判断LOCAL空间的法线方向,使该LOCAL空间的法线方向为正方向的法线的步骤。
切面空间具体计算步骤为:
设定在切线空间的坐标方向为T,B,N;T代表切线方向,B代表副法线方向,N代表法线方向;且三个方向相互垂直;
设三角形ABC,中,基于切线空间的坐标为纹理u,v坐标,根据顶点的u,v坐标可以计算T,B,N,而T,B均在三角形所在平面上,设A(U1,V1)B(U2,V2),C(U3,V3);
其中,
ΔUBA=U2-U1,ΔUCA=U3-U1,ΔVBA=V2-V1,ΔVCA=V3-V1,,
有已知A,B,C三点的坐标,得到T,B向量,进一步得到N,从而得到三角形的切线空间。
法线方向判断具体为:
若:(T×B)*N<0,令T=-T,B=-B,使法线方向反正转为法线正方向。
在有三维软件制作的模型应用到的游戏引擎中,计算机对三维图像进行了复杂的变换。描述如下:如图1所示,
在计算机图形学中采用最广泛的三维模型是三角网络模型,它是有多个三角形拼接描述物体的表面结构。为了满足这样的模型拼接要满足一定的规则:
每两个三角形最多只有一条边相邻,
每条边最多只有两个三角形相邻,
每个顶点的相邻三角形集合可以一一映射到一个平面上。
而模型中每个三角形面都定义了一个一致朝外的法线,按照这个法线的方向,以左手定则为准,将三角形的三个顶点按顺时针顺序做向量的运算。
因为网格模型保存有很多形式,这些都是图形学的最基本的原理。如图2中的网格模型描述其顶点列表和三角形列表中坐标情况。
在GPU中有这复杂的存储过程。因为现在所有的引擎都支持模型转化为一组拼接的三角面来构成图形,每个三角形有三个顶点,每个顶点具有模型的位置坐标信息,法线信息。经过GPU的光栅化,即对每个顶点和像素进行插值计算,转化为像素的位置和法线信息。此时的法线信息可以用根据光照的方向来计算光模型表面真实的光照信息。GPU光栅化是把之前主要对模型几何的运算转化为对每个三角形像素进行独立的颜色计算。在屏幕空间中所看到的是所有像素填充到三角形内部的,因此计算每个像素的法线的朝向就可以得出模型表面的光照信息。
第一种情况:不带有法线贴图的模型的法线计算
根据图形学的基本原理,首先需要先要找到共享顶点的所有面,由图3中a可以看出比V1是有4个三角形共享的。把网格模型中两个面的简化出来,如图3中b所示的面向量。
对于顶点的坐标是已知的,可以计算每个三角面的面向量。其方法为A向量=V2-V1,B向量为V3-V1,则A向量×B向量=NΔV1V2V3,这个向量就是ΔV1V2V3的法线向量。当V1点被多个面共享的时候,V1点的向量为相邻4个三角面的法向量的和除以4。
第二种情况:带有法线贴图的模型法线计算。
可以看出对于模型在游戏场景中有高精度和低精度模型,高精度模型所具有的三角面更多,模型表现细节丰富,同时这么多面在计算即处理的时候是相当的复杂,大大降低了游戏的运行的帧率,而低精度模型含有三角面少,只是不能表达出细节,视觉效果也就差了,为了在游戏中低精度模型能显示高精度模型的效果,使用了法线贴图来模拟实体的三维模型。既能满足视觉要求又能提高运行帧率。如图4、图5和图6所示。
首先从高精度模型上烘焙一张法线贴图,然后把这个贴图应用到低精度模型上,这样的效果比较逼真。
而法线贴图所存储的是基于切线空间的法线方向,法线贴图储存的纹理值是基于切线空间下的法线。因为每个三角形的每个顶点的切线空间不一样(切线原点,切线的坐标等),如图7所示。这些顶点信息是基于LOCAL空间下的顶点坐标,LOCAL空间即为本地空间,而本地空间是基于三维软件导出,该位置空间下规定为本地空间,当采样这些纹理中的法线进行光照计算时,必须要统一到统一坐标下才能正确的计算光照值。
即要把切线空间的法线空间转化为LOCAL空间。设定在切线空间的坐标方向为T,(切线方向),B(副法线方向),N(法线方向),这三个方向同在坐标中的X,Y,Z一样,都是相互垂直。
设三角形ABC,中,基于切线空间的坐标为纹理u,v坐标。根据顶点的u,v坐标可以计算T,B,N,而T,B均在三角形所在平面上。设A(U1,V1)B(U2,V2),C(U3,V3),
其中
ΔUBA=U2-U1,ΔUCA=U3-U1,ΔVBA=V2-V1,ΔVCA=V3-V1,,
有已知A,B,C三点的坐标,可以得到T,B向量,进一步得以得到N,从而得到三角形的切线空间。最后要使法线的方向始终是朝向观察者,做一下判断:
若:(T×B)*N<0,令T=-T,B=-B,使法线方向反正转为法线正方向。
当一个顶点法线被多个三角形共享的时候,就对这个切线空间的法线求其平均值。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (2)
1.一种模型表面法线的计算方法,对于有多个三角形拼接描述物体的表面结构的三角网络模型,经过GPU的光栅化,即对每个顶点和像素进行插值计算,转化为像素的位置和法线信息,则计算每个像素的法线的朝向能得出模型表面的光照信息,
其特征在于,为了使低精度模型能显示高精度模型的效果,使用了法线贴图来模拟实体的三维模型,计算每个像素的法线的朝向分为两种情况;
第一种情况:对不带有法线贴图的模型进行法线计算;具体为首先找到共享顶点的所有面,把网格模型中的两个面简化出来;第二种情况:对带有法线贴图的模型法线进行计算,具体步骤包括:
采集法线贴图中的法线的步骤;
上述采集法线为切面空间的法线,将该切面空间的法线方向转化为本地空间的法线计算的步骤;
判断本地空间的法线方向,使该本地空间的法线方向为正方向的法线的步骤;
首先从高精度模型上烘焙一张法线贴图,然后把这个贴图应用到低精度模型上;而法线贴图所存储的是基于切线空间的法线方向,法线贴图储存的纹理值是基于切线空间下的法线;因为每个三角形的每个顶点的切线空间不一样,把切线空间的法线空间转化为LOCAL空间;设定在切线空间的坐标方向为T,B,N,T代表切线方向,B代表副法线方向,N代表法线方向,这三个方向同在坐标中的X,Y,Z一样,都是相互垂直;设三角形ABC,中,基于切线空间的坐标为纹理u,v坐标;根据顶点的u,v坐标可以计算T,B,N,而T,B均在三角形所在平面上;设A(U1,V1)B(U2,V2),C(U3,V3),
<mrow>
<mover>
<mrow>
<mi>B</mi>
<mi>A</mi>
</mrow>
<mo>&RightArrow;</mo>
</mover>
<mo>=</mo>
<mi>T</mi>
<mo>*</mo>
<msub>
<mi>&Delta;U</mi>
<mrow>
<mi>B</mi>
<mi>A</mi>
</mrow>
</msub>
<mo>-</mo>
<mi>B</mi>
<mo>*</mo>
<msub>
<mi>&Delta;V</mi>
<mrow>
<mi>B</mi>
<mi>A</mi>
</mrow>
</msub>
</mrow>
<mrow>
<mover>
<mrow>
<mi>C</mi>
<mi>A</mi>
</mrow>
<mo>&RightArrow;</mo>
</mover>
<mo>=</mo>
<mi>T</mi>
<mo>*</mo>
<msub>
<mi>&Delta;U</mi>
<mrow>
<mi>C</mi>
<mi>A</mi>
</mrow>
</msub>
<mo>-</mo>
<mi>B</mi>
<mo>*</mo>
<msub>
<mi>&Delta;V</mi>
<mrow>
<mi>C</mi>
<mi>A</mi>
</mrow>
</msub>
</mrow>
其中,
ΔUBA=U2-U1,ΔUCA=U3-U1,ΔVBA=V2-V1,ΔVCA=V3-V1,
有已知A,B,C三点的坐标,得到T,B向量,进一步得到N,从而得到三角形的切线空间,最后使法线方向始终朝向观察者,则对法线方向进行判断;
所述法线方向进行判断具体为:
若:(T×B)*N<0,令T=-T,B=-B,使法线方向反正转为法线正方向;当一个顶点法线被多个三角形共享的时候,就对这个切线空间的法线求其平均值;
所述经过GPU的光栅化,即对每个顶点和像素进行插值计算,转化为像素的位置和法线信息,此时的法线信息可以用根据光照的方向来计算光模型表面真实的光照信息,GPU光栅化是把之前对模型几何的运算转化为对每个三角形像素进行独立的颜色计算,在屏幕空间中所看到的是所有像素填充到三角形内部的,因此计算每个像素的法线的朝向即可得出模型表面的光照信息;
将法线计算分为两种情况,不带法线贴图的计算法线消除了面之间的不平滑的现象,而带有法线贴图除了计算还采用了判断法线的正反方向,使法线的方向始终朝向摄像机方向。
2.根据权利要求1所述的模型表面法线的计算方法,其特征在于,上述第一种情况对不带有法线贴图的模型进行法线计算具体步骤包括:
找到三角网络模型中所有共享顶点的所有面的步骤;
计算所有面中各个面的面法线的步骤;
将上述计算的各个面的面法线相加从而得出一个面法线和,将该面法线和除以三角网络模型中共顶点的三角形数量值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410400922.1A CN104157000B (zh) | 2014-08-14 | 2014-08-14 | 模型表面法线的计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410400922.1A CN104157000B (zh) | 2014-08-14 | 2014-08-14 | 模型表面法线的计算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104157000A CN104157000A (zh) | 2014-11-19 |
CN104157000B true CN104157000B (zh) | 2018-04-06 |
Family
ID=51882488
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410400922.1A Active CN104157000B (zh) | 2014-08-14 | 2014-08-14 | 模型表面法线的计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104157000B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107316337B (zh) * | 2016-04-20 | 2020-11-10 | 网易(杭州)网络有限公司 | 顶点法线的处理方法及装置 |
CN106600712B (zh) * | 2016-12-20 | 2019-05-31 | 南京大学 | 一种基于二维图像的纹理替换方法 |
CN109427088B (zh) * | 2017-08-18 | 2023-02-03 | 腾讯科技(深圳)有限公司 | 一种模拟光照的渲染方法及终端 |
CN110310358B (zh) * | 2018-03-21 | 2023-10-03 | 杭州逍度网络科技有限公司 | 一种实现逐像素光照运算的方法 |
CN108564646B (zh) * | 2018-03-28 | 2021-02-26 | 腾讯科技(深圳)有限公司 | 对象的渲染方法和装置、存储介质、电子装置 |
CN113822992B (zh) * | 2021-11-23 | 2022-03-01 | 山东捷瑞数字科技股份有限公司 | 一种批量反转模型法线的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7843463B1 (en) * | 2007-06-01 | 2010-11-30 | Nvidia Corporation | System and method for bump mapping setup |
CN102402792A (zh) * | 2011-10-24 | 2012-04-04 | 克拉玛依红有软件有限责任公司 | 一种实时浅水模拟方法 |
CN102426691A (zh) * | 2011-10-24 | 2012-04-25 | 克拉玛依红有软件有限责任公司 | 一种基于gpu的实时火焰效果的模拟方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5949424A (en) * | 1997-02-28 | 1999-09-07 | Silicon Graphics, Inc. | Method, system, and computer program product for bump mapping in tangent space |
US7298376B2 (en) * | 2003-07-28 | 2007-11-20 | Landmark Graphics Corporation | System and method for real-time co-rendering of multiple attributes |
CN102117496B (zh) * | 2009-12-30 | 2015-02-18 | 新奥特(北京)视频技术有限公司 | 一种三维地形建模过程中法向量的计算方法及装置 |
-
2014
- 2014-08-14 CN CN201410400922.1A patent/CN104157000B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7843463B1 (en) * | 2007-06-01 | 2010-11-30 | Nvidia Corporation | System and method for bump mapping setup |
CN102402792A (zh) * | 2011-10-24 | 2012-04-04 | 克拉玛依红有软件有限责任公司 | 一种实时浅水模拟方法 |
CN102426691A (zh) * | 2011-10-24 | 2012-04-25 | 克拉玛依红有软件有限责任公司 | 一种基于gpu的实时火焰效果的模拟方法 |
Non-Patent Citations (3)
Title |
---|
A Practical and Robust Bump-mapping Technique for Today’s GPUs;Mark J. Kilgard等;《GDC 2000: Advanced OpenGL Game Development》;20001231;第1-39页 * |
一种三维实体模型表面法线计算方法研究;程 磊等;《沈阳理工大学学报》;20090831;第 2 8卷(第 4期);第24-27页 * |
基于OpenGL的规则格网地形法线计算优化研究;韩李涛等;《测绘科学》;20120930;第37卷(第5期);参见第17-19页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104157000A (zh) | 2014-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104157000B (zh) | 模型表面法线的计算方法 | |
Steinbrücker et al. | Volumetric 3D mapping in real-time on a CPU | |
WO2022111619A1 (zh) | 图像处理方法及相关装置 | |
KR101145260B1 (ko) | 3d 객체 모델에 텍스쳐를 매핑하는 방법 및 장치 | |
CN102768765B (zh) | 实时点光源软阴影渲染方法 | |
US9098930B2 (en) | Stereo-aware image editing | |
CN105556565A (zh) | 片段着色器执行顶点着色器计算 | |
US9684997B2 (en) | Efficient rendering of volumetric elements | |
CN112316420A (zh) | 模型渲染方法、装置、设备及存储介质 | |
US8294713B1 (en) | Method and apparatus for illuminating objects in 3-D computer graphics | |
CN103700134A (zh) | 基于可控制纹理烘焙的三维矢量模型实时光影延迟着色渲染方法 | |
CN113345063B (zh) | 基于深度学习的pbr三维重建方法、系统与计算机存储介质 | |
Okura et al. | Mixed-reality world exploration using image-based rendering | |
CN102819855A (zh) | 二维图像的生成方法及装置 | |
CN104700446A (zh) | 一种粒子系统中粒子顶点数据的更新方法 | |
CN109461197B (zh) | 一种基于球面uv和重投影的云实时绘制优化方法 | |
CN114375464A (zh) | 使用边界体积表示对虚拟空间中的动态单元进行光线追踪 | |
CN110400366B (zh) | 一种基于OpenGL的实时洪水灾害可视化仿真方法 | |
Bao et al. | Realistic real-time rendering for large-scale forest scenes | |
US20140306953A1 (en) | 3D Rendering for Training Computer Vision Recognition | |
CN110136238B (zh) | 一种结合物理光照模型的ar绘画方法 | |
CA2716257A1 (en) | System and method for interactive painting of 2d images for iterative 3d modeling | |
CN114049423A (zh) | 一种自动的真实感三维模型纹理映射方法 | |
CN115035231A (zh) | 阴影烘焙方法、装置、电子设备和存储介质 | |
US9639981B1 (en) | Tetrahedral Shell Generation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |