精华内容
下载资源
问答
  • 顶点法线
    千次阅读
    2020-02-07 20:43:25

    首先,顶点法线都是从面法线加权平均计算得到。所以有两个维度,一是哪些面参与计算,二是权重如何计算。

    一 哪些面参与计算
    如果建模工具导出了光滑组,那么方案一是直接使用光滑组信息,属于同一个光滑组的面参与计算。
    方案二是同时使用光滑组信息以及面的夹角的阈值。
    方案三是只使用面的夹角阈值。此时需要注意的是,由于建模工具没有导出光滑组,也就是说所有三角形都是默认同一个光滑组,那么如果三角形有共享顶点,且满足夹角阈值,就需要将共享顶点复制出来,对应不同的法线。

    二 权重如何计算
    简单方案是没有权重,共享顶点的三角形对该顶点法线的贡献一样。但是这样会有一些问题。
    参考这个文章:Weighted Vertex Normals
    此文的作者开发了一个3dMax插件,可以计算顶点法线。在文章中作者提出如果没有权重存在两个问题:
    1)非常小的面也会对顶点法线产生比较大的影响。
    2)在同一平面上的两个三角形对顶点法线的影响重复了。
    所以在这篇文章里面,作者采用三角形面积作为权重解决第一个问题,采用共享顶点的三角形从该顶点出发的两条边的夹角作为权重解决第二个问题。这两个权重相乘即可。
    我一开始理解采用夹角作为权重,以为是两个面的夹角(即第一个维度用于阈值判断的夹角),但是实际操作时发现这个似乎没什么意义,而此篇文章作者讲述的方案比较有意义。只是文章中伪代码计算向量的地方似乎反了,或者说那不是减号而是一个记号。

    更多相关内容
  • 某些目的(如漂亮的渲染)需要每个顶点法线。 这些通常是通过平均面部法线来计算的。 该函数提供了两种方法,第一种是按三角形面积加权的平均法线,第二种是作为周围三角形面的平均值的法线。 第二个选项更快...
  • 3DMAX编辑法线插件
  • 因为要计算normal,了解这两种法线是必不可少的。...顶点法线与面法线有一定的关系,在“如何计算面法线和顶点法线?”中讨论会讨论二者的关系。 有时我们可以将顶点法线设置为与面法线相同,但是使用面法

    因为要计算normal,了解这两种法线是必不可少的。在网上看到一篇讲这两种normals的文章,但是是纯英文写的:
    Face Normals & Vertex Normals(面法线跟顶点法线的区别)
    这里把它翻译一下,也算是学习的过程,方便阅读。

    正文

    什么是面法线?

    面法线是描述多边形所面对方向的向量(见图 1)
    请添加图片描述

    图 1:表面的面法线

    什么是顶点法线?

    顶点法线与面法线有一定的关系,在“如何计算面法线和顶点法线?”中讨论会讨论二者的关系。 有时我们可以将顶点法线设置为与面法线相同,但是使用面法线作为顶点法线在使用三角形近似曲面时会产生不平滑的结果。请添加图片描述

    图2 面法线曲面近似结果

    请添加图片描述

    图3 顶点法线曲面近似结果

    顶点法线的作用:
    Direct3D 或 Opengl 需要知道顶点法线,用来确定光线照射到表面的角度,并且由于光照计算是针对每个顶点进行的,因此 Direct3D 或 Opengl 需要知道每个顶点的表面方向(法线)。

    如何计算面法线和顶点法线?
    对于立方体和球体等简单的物体,我们可以通过观察看到顶点法线。 对于更复杂的网格,我们需要更机械的方法。 假设一个三角形由顶点 po、p1 和 p2 组成,我们需要计算每个顶点 n0、n1 和 n2 的顶点法线。

    首先计算位于三角形上的两个向量:

    p1 - p0 = a
    p2 - p0 = b

    求得面法线:

    n = a * b (* 是叉乘运算)

    请添加图片描述
    由于每个顶点法线与面法线相同:

    n0 = n1 = n2 = n

    找到顶点法线的更好方法是计算平均法线: 为了找到顶点 v 的顶点法线 vn,我们找到共享顶点 v 的网格中所有三角形的面法线。然后通过平均所有这些面法线给出 vn。 这里有一个例子来说明。 假设三个三角形,其面法线由 n0,n1 和 n2 给出,共享顶点 v。然后通过平均面部法线给出 vn:

    vn = (n0 + n1 + n2) /3。

    在转换阶段,顶点法线可能会变为非法线(啥意思?)。 因此,最好是在转换阶段之后重新归一化所有法线。

    两种不同类型的顶点向量:
    顶点法线可以与面法线相同(见图5)。当我们将顶点法线设置为与面法线相同时,一个蓝色立方体将如下图所示,当我们直接面对它时,每个面都有它的最大亮度。请添加图片描述

    图5: 一个顶点有三个顶点法线

    当我们将顶点法线设置为三个面法线的平均值时,当我们旋转立方体时,角度将具有最大亮度。请添加图片描述

    图6: 一个顶点的顶点法线是三个面法线的平均值
    展开全文
  • 遇到的问题:使用Blender创建的模型,顶点法线都是默认的,或者说顶点法线是基于自身三角形(矩形)的。这就导致同一个空间位置上的一个(在图形学引擎中被视为多个)顶点拥有若干个不同的法线向量。当你使用程序...

    遇到的问题:使用Blender创建的模型,顶点法线都是默认的,或者说顶点法线是基于自身三角形(矩形)的。这就导致同一个空间位置上的一个(在图形学引擎中被视为多个)顶点拥有若干个不同的法线向量。当你使用程序进行顶点法线相关的计算时,会出现不同法线计算出的复数结果。

    实际问题介绍:

           如图,我在unity对一个圆柱模型的顶点进行沿法线方向的移动,希望得到闭合的膨胀体积光特效。但是,因为顶点拥有若干个不同的法线向量,每个三角形(矩形)都沿各自的法线方向延伸,导致出现断裂的平面。

    解决方法:

    使用Blender中的【法线编辑】修改器,来修改顶点的法线信息。

    解决步骤:

    1、用blender打开模型文件:

     

    2、选中要修改的模型,在【属性编辑器】中,点开【数据】一栏,在【法线】下拉框中,勾选【自动光滑】

    3、然后再点开【修改器】一栏,点击【添加修改器】,选择【法线编辑】

    4、得到如图的修改器,在修改器中选择【径向】————即以所有网格的中点为中心,经过顶点,向外发散的方向

    5.保存Blender中的修改,再来查看一下Unity中圆柱的法线情况。

    之前断裂的片段都闭合了,形成了一个完好的模型。

    展开全文
  • 不正常Blender Abnormal附加组件,用于顶点法线编辑该附加组件由BNPR社区和BEER开发基金资助。 请捐赠以使加载项保持更新: : 特征: 顶点法线编辑“模式” 镜像法线和轴对齐翻转法线方向并重置法线正常操作,例如...
  • unreal 顶点法线与 面法线

    千次阅读 2018-06-23 15:45:14
    (暂时是这样的,是否能导出顶点法线,后续确定)。 unreal 显示总是发现不对,要么该光照的没关照,或者直角面,背光处却透光了。开始未给定法线,经过对比分析,应该是法线没对。于是打算加入指定的法线。 1、为...

        当前revit 建筑模型软件导出的模型对象 three.js的json文件,都是面法线。(暂时是这样的,是否能导出顶点法线,后续确定,7-9 确定js文件可以标记顶点法线和面法线,同时revit可以通过返回的法线个数与顶点个数是否相等判断是面法线还是顶点法线)。

        unreal 显示总是发现不对,要么该光照的没关照,或者直角面,背光处却透光了。开始未给定法线,经过对比分析,应该是法线没对。于是打算加入指定的法线。

        1、为什么开始没给定法线?在测试自定义的模型时候,不给定法线,仍然可以显示物体。而且默认情况下,按照三角形顶点顺序,自然就可以确定顶点法线的。所以认为不给定也最多影响效果的好坏,而不应该影响渲染的正确错误。事实证明,不给定法线,影响的是渲染正确效果。

        在不给定顶点法线的情况下,(UProceduralMeshComponent),会设置顶点法线为 0, 0, -1. 而切线空间, tangentZ 使用的为该顶点法线。所以按照面的法线的渲染方式,那计算的光照肯定是有问题的。

      2、 打算指定顶点法线。

        模型数据只有面法线,没顶点法线,怎么办?

        2.1根据理解。顶点法线,可以使用与顶点相接的面法线综合计算均值得到顶点法线。按照这个方式计算了顶点法线,效果是变化很多。但是却不正确,平面不平了。。。分析原因为:渲染过程中,面的某一点法线,使用面顶点法线,经过插值计算得到。这样,平面的每个点的法线,使用综合得到的顶点法线反计算出,自然不是指向同一个方向。所以不正确。

        2.2那只有另一个办法,要保持平面平整,那顶点法线必须保持平面法线的值。这样一个顶点无法被几个面共享顶点数据了。那就对每个面单独生成顶点,以及顶点的法线。按照这个方式,那顶点数据量可能成倍增长。比如一个立方体,应该是8个顶点。使用顶点法线的方式,需要每个面的顶点独立,那么就应该是每个面(4边行面) 4个点,中共24个顶点。增加了三倍。用ue editor 查看 cube 立方体。查看其定点数量,果然,每个顶点,重复用了3个顶点数据。 经过独立顶点的方式,使用顶点法线,渲染结果,正确了。

        ue 模型都是使用顶点法线的方式渲染,不知道有没有方便的面法线的方式渲染。从通用的mesh类中 是没看见。也许有,现在没找到,哪位仁兄知道 可以告知下。

         顶点法线和面法线,渲染对象,是不同的。在平面立方体这种,会带来数据量的增加;但是渲染弧面的情况下,可以在更少的 顶点数据量下,渲染出好很多的平滑效果, 因为顶点之间的面,渲染效果,可以根据顶点法线,插值得到。这样原本的平面三角,可以渲染为弧面。

      

    展开全文
  • Unity中计算面法线与顶点法线

    千次阅读 2021-09-18 11:12:14
    2、面法线与顶点法线 在 Max Wagner 的 《Generating Vertex Normals》文章 中写到——严格意义上讲,点是没有法线的。点的法线是在使用Phone或Gouraud模型时计算光照使用。如果一个面上的所有法线都一样,他们的...
  • 载入.obj格式模型 .obj是文本格式的,相对比较好解析,而且可以查看,所以先暂时只...其实这个地方没什么好说的,主要解决的问题是顶点法线的计算。 顶点法线计算的时机 载入.obj格式的模型时,发现有的模型没有提...
  • 每一个面都有自己的法线,在3D游戏中一个三角形...再看下图:简单地说顶点法线就是把共享该顶点的几个面的法线想加,然后除以面的数量,得到的平均值法线,这就是顶点法线。比如:上图中s1,s2是两个面,ns1,ns2是这两
  • 顶点法线

    千次阅读 2013-01-08 17:33:22
    本来以为前一段时间写的3d max导出插件已经没有什么大的问题了,但有没有问题,完善不完善,真不是凭感觉就OK的,必须有足够广泛...这不,最近开始研究并写一些光线跟踪的例子了,这当然离不开模型的法线,于是在
  • maya小白笔记(1)——Maya2018多变形建模过程中顶点法线方向不一致问题的解决方法
  • Revit的顶点法线及threejs渲染圆弧面的渐变亮度。 法线有什么用的?没有法线能否成模型?可以的,没有法线,模型几何信息照样是完成的,把它送到threejs里面渲染没有问题,但是效果却让人很失望,没有法线,整个...
  • Denoise3 - 将双边滤波器应用于顶点,直接使用 OpenMesh 库中的法线顶点; LaplaceDenoise - 应用统一的拉普拉斯滤波器去噪; BiNormDenoise - 将双边滤波器应用于面法向量,​​然后更新面 [2] 中的每个顶点。 [1...
  • 在Direct3D中,三角形是构成实体的基本单位,因为一个三角形正好是一个平面,以三角形面为单位进行渲染...三角形平面有正反面之分,由顶点的排序决定:顶点按顺时针排列的表面是正面,如图。 屏幕剪辑的捕获时间:...
  • OPENGL渲染obj文件,2013编译通过,含gl库,这个下载文件更全,读取了obj里面的顶点法线,并用于渲染 缺点:加载大的obj文件,比较慢,未做处理。
  • 顶点法线和面法线

    千次阅读 2013-09-24 09:36:30
    一、问题描述: ...1. 设顶点法线与设面法线有什么区别? 面的法线是与面垂直的线(数学意义)。但在OpenGL中好像并非这样。严格意义上讲,点是没有法线的。点的法线是在使用Phone或Gouraud模型时计
  • 使用光照的时候,我们就无需描述顶点的颜色,Direct3D会将顶点送入光照计算引擎,然后引擎根据光源类型,材质以及物体表面和相对于光源的朝向等等,计算出内个顶点的颜色值。基于某种光照模型然后计算出顶点的颜色,...
  • 多变形建模过程中,反复的挤压、调整,容易造成多边形顶点法线方向混乱,有的指向所建模型的外部、有的指向模型内部,从而导致模型看起来一部分黑、一部分白,如下图所示。这个时候通过执行面的反转(Reverse)是不...
  • 在某些情况下,我们需要修改模型的顶点法线(Vertex Normal)信息,比如在SpeedTree中会修改植被的法线为球形法线来在光照计算中达成植被更好的团簇感; 当然也可以在3ds Max等建模软件中直接修改,比如使用Edit ...
  • 请首先查看右侧的示例选项卡 (.mlx 文档) 以获取完整说明。 下载后,在 Matlab 控制台中打字“helpdiscrete_contour_mesh_patch”或“docdiscrete_contour_mesh_patch”以获得支持。 对于准平面轮廓最有效,原因...
  • 传入顶点,计算顶点索引 /* *输入:vertexArray三角面片的顶点数组 *返回:顶点索引数组 */ osg::DrawElementsUInt* CalcVertexIndexs(const osg::Vec3Array* vertexArray) { //顶点去重 osg::ref_ptr<osg::Vec...
  • 对于2.80版,当“拆分模式”关闭时,您可以编辑在圆选择和矩形选择中选择的顶点法线。对于2.80版,当“拆分模式”关闭时,您还可以编辑通过圆选择和矩形选择选择的顶点法线。 如果使用A键或圆选择或边框选择,...
  • 顶点法线计算方式

    千次阅读 2018-01-11 20:08:07
    如果一个顶点法线共享多个三角形,我们还需要对此法线进行均值计算,如下伪代码 void CalculationNormalVector() { for(int i=0;i();i+=3) { Vector3D normal=CrossProduct( (m_Vertices[i+1].m_Position-m_...
  • 3ds max 中平滑组顶点法线的导出

    千次阅读 2011-08-16 10:17:06
    3ds max中导出顶点法线看似很容易,直接通过mesh->getNormal(i);可以获取,但实际上这样获取的法线不一定对。 实际在3ds max中会常常使用平滑组来对面法线进行指定。这样的结果是一个顶点可能处于多个平滑组中...
  • 顶点法线使用光照绘制3D场景时,计算物体顶点的颜色值除了需要知道光源和物体的材质信息外,好需要知道每个顶点的法向量,根据光线的入射方向与法向量的夹角,计算发射光线的最终颜色值。顶点法线和面法线面法线就是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,933
精华内容 7,973
关键字:

顶点法线