5

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

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

例子

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

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

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

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

4

1 回答 1

3

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

于 2014-08-02T23:18:40.647 回答