【问题标题】:How does Blender calculate vertex normals?Blender如何计算顶点法线?
【发布时间】:2014-09-25 19:57:00
【问题描述】:

我正在尝试计算各种游戏资产的顶点法线。我计算的法线用于“膨胀”模型(在真实模型后面画出粗轮廓)。

我目前计算每张脸的法线并对所有脸进行平均(Stack Overflow 上的其他几个问题建议使用这种方法)。但是,这不适用于像这样的尖角(相邻面的法线用橙色标记,我要计算的法线用绿色勾勒出来)。

该对象看起来像一个小基座,我们正在查看左前角。有三个相邻的面(底面不可见;它的法线指向正下方)。

Blender 计算出一个极好的法线,它正好位于三个面法线的中间;似乎它以某种方式计算了对三个面法线中的每一个具有最小旋转的法线。当对四边形进行不同的三角剖分时,Blender 的法线也不会改变。

平均面的法线会给我一个不同的法线,它在 Z 轴上略微向上(-0.45、-0.89、+0.08)。以这种方式膨胀我的模型不会产生良好的轮廓,因为轮廓的底面向上移动并且没有包围原始模型。

我试图查看 Blender 源代码,但找不到我要找的东西。如果有人可以指出 Blender 源代码中的算法,我也会接受。

【问题讨论】:

    标签: blender vertex vertex-attributes


    【解决方案1】:

    通过它们连接的面的角度来加权表面法线。这是表面渲染中的一种常见做法(请参阅此处的讨论:http://www.bytehazard.com/code/vertnorm.html),并将确保您的底面的权重比两个倾斜的侧面更强。我不知道 Blender 是否有不同的做法,但你应该试一试。

    【讨论】:

    • 这正是我所需要的!对于其他阅读本文的人,页面权重的第三个示例按角度和面部面积计算,但我只使用 Roberto 建议的角度获得了更好的结果。
    猜你喜欢
    • 2013-02-15
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2010-11-12
    • 2021-12-19
    相关资源
    最近更新 更多