unreal 顶点法线与 面法线

    当前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类中 是没看见。也许有,现在没找到,哪位仁兄知道 可以告知下。

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

  

扫描二维码关注公众号,回复: 2047042 查看本文章

猜你喜欢

转载自blog.csdn.net/zsyddl2/article/details/80783903
今日推荐