顶点法向量
在计算机图形学中,顶点法向量(英语:Vertex normal,又称顶点法线[1])是三维模型顶点的一种属性,指计算机图形学的三维模型中与特定顶点关系的方向向量,目的是利用这个法向量来替代实际三维模型中物体的真实法向量。[2][3]通常会将其定为包含该顶点之面的法向量平均值,其平均值有时也会根据包含该顶点之面的面积来做加权。[4][5]
顶点法向量也可以透过以多边形面近似的曲面来计算,例如非均匀有理B样条曲面;亦可以为了特定艺术目标来指定特定明确向量。顶点法向量经常在各种基于光照模型得着色法中使用,例如古氏着色法与风着色法。使用顶点法向量进行渲染可以获得较平滑的效果;然而,如果不对其进行一些修改就不容易呈现锋利的边缘。[6]
与几何学的关系
在几何学中,顶点的属性只有位置以及关系几何体的顶点图[7],不存在法向量这个属性,因为仅有一个顶点无法计算法向量。几何学中的法向量一般由面定义,即垂直于该面的向量。在计算机图形学中,顶点的法向量可以视为是该顶点位于三维模型曲面上的切平面之法向量。
用途
在计算机图形学中,顶点的法向量主要用于推算物体被光照射后的反射强度。一般物体反射的光线强度会跟光线入射方向与物体表面的法向量相关[8][9],因此在许多基于光照模型的着色法中会使用顶点的法向量来进行计算。而由于仅在顶点上有法向量,因此许多着色法会透过不同的策略来推算物体被光照射后的反射强度,例如逐顶点光照和逐片段光照。其中逐顶点光照仅在顶点上计算光照模型的像素颜色,其余位置的像素颜色则是透过顶点上计算的结果进内联插,此种做法在遇到在较大的多边形模型中央有高光曲线区时会产生严重的问题,因为这些高光曲线区在多边形的顶点处会产生缺失,因而发生一定程度的失真,具代表性的逐顶点光照为古氏着色法。逐片段光照则是以多边形顶点上定义的法向量为基础,透过内插的方式推算多边形内部其他位置的法向量,并用内插补完的法向量计算光照模型[10],这种作法产生的效果会比逐顶点光照的效果更逼真,然而运算量也会有所提升。
-
在计算机图形学中,曲面基本上是由多面体近似
-
不使用顶点法向量绘制的曲面会因为曲面在计算机图形学中是由多面体近似而出现棱角感
-
逐顶点光照虽然使用顶点法向量计算光线强度,但其仅在顶点上计算,其余位置填入基于顶点运算的结果的内插,显得有些不自然
-
逐片段光照使用的法向量是将多边形内部透过顶点提供的法向量进内联插,其结果最为平滑。但相对的这种方法不易呈现有棱有角的立体结构
-
不使用顶点法向量绘制的立方体
-
使用逐顶点光照绘制的立方体
-
使用逐片段光照绘制的立方体。可以看到有棱角的立体在使用顶点法向量绘制时反而效果较不自然
顶点的法向量用于光照模型渲染时,通常一个顶点上只会定义一个法向量,这样的方式对曲面而言可以绘制出较平滑的结果,然而无法处理锐利的边角[6]。部分的软件会将相同顶点在不同面上绘制时给予不同法向量,以让不同面的公共顶点能呈现不同的光线反射方向,进而实现锐利的边角的光照模型渲染呈现。例如obj文件格式就支持这种顶点法向量的表达方式。[11]
顶点法向量也可以用于检查模型的流形性。若同一个面上具有2个方向完全相反的顶点法向量,代表模型的拓朴结构可能有问题,将会对这个模型的三维打印造成影响。检查模型中的顶点法向量可以找到模型中部分的非流形结构,但并不能保证模型满足流形的定义,仍需要搭配其他的方式进行检查。[12]
顶点切向量
顶点切向量是类似于顶点的法向量的另一种属性,可用于代表顶点在模型上之正切线的方向向量,其可透过与顶点法向量外积得到顶点的余切线方向向量(bitangent),这三个向量可以构成一个基于模型表面的空间座标系,可用于法线贴图实现物体表面的凹凸效果。[13]
参见
参考文献
- ^ 基本着色. www.opengl-tutorial.org. [2021-07-18]. (原始内容存档于2022-05-31).
- ^ Henri Gouraud. "Continuous Shading of Curved Surfaces." IEEE Transactions on Computers, C-20(6) : 623--629 (June 1971).
- ^ Andrew Glassner, I.6 Building vertex normals from a unstructured polygon list, in Graphics Gems IV, edited by Paul S. Heckbert, Morgan Kaufmann, 1994. pp. 60--74
- ^ Nelson Max, Weights for Computing Vertex Normals from Facet Normals, Journal of Graphics Tools, Volume 4, Issue 2, 1999 p. 1-6
- ^ Grit Thürrner and Charles A. Wüthrich, Computing Vertex Normals from Polygonal Facets. Journal of Graphics Tools, Volume 3, Issue 1, 1998. pp. 43-46
- ^ 6.0 6.1 Max Wagner. Generating Vertex Normals (PDF). emeyex.com. (原始内容 (PDF)存档于2013-05-31).
- ^ Weisstein, Eric W. (编). Vertex. at MathWorld--A Wolfram Web Resource. Wolfram Research, Inc. (英语).
- ^ RCA Corporation. RCA Electro-optics Handbook. RCA solid State. RCA/Commercial Engineering. 1974: p.18 ff [2021-07-16]. LCCN 75318901. (原始内容存档于2022-05-31).
- ^ Warren J. Smith. Modern optical engineering. McGraw-Hill. 1966: p.228, 256.
- ^ Phong, Bui Tuong, Illumination for Computer-Generated Images., The University of Utah, 1973
- ^ Object Files (.obj) (PDF). Advanced Visualizer Manual, Appendix B1. [2021-07-16]. (原始内容存档 (PDF)于2021-11-27).
- ^ How to fix non-manifold geometry issues on 3D models. sculpteo.com. [2021-07-16]. (原始内容存档于2022-06-25).
- ^ Normal Mapping. opengl-tutorial.org. [2021-07-16]. (原始内容存档于2022-12-06).