我正在尝试计算各种游戏资产的顶点法线。我计算的法线用于“膨胀”模型(在真实模型后面绘制产生粗轮廓)。
我目前计算每张脸的法线并平均所有脸(Stack Overflow上的其他几个问题就是这种方法)。但是,这对于像这样的尖角不起作用(相邻面的法线标记为橙色,正常我试图计算的是绿色轮廓)。
物体看起来像一个小基座,我们正在看左前角。有三个相邻的面(底面不可见;其正常点直接向下)。
Blender计算出一个优秀的法线,正好位于三个面部法线的中间;似乎它以某种方式计算一个法线,它对三个法线法线中的每一个都有最小的旋转。当四边形不同时,Blender的法线也不会改变。
平均面的法线给出了一个不同的法线,它在Z轴上略微向上指(-0.45,-0.89,+ 0.08)。以这种方式给我的模型充气不会产生良好的轮廓,因为轮廓的底面向上移动并且不包围原始模型。
我试图查看Blender源代码,但找不到我要找的内容。如果有人能指出我在Blender源代码中的算法,我也会接受。
答案 0 :(得分:0)
将曲面法线按其加入的面的角度加权。这是表面渲染中的常见做法(请参见此处的讨论:http://www.bytehazard.com/code/vertnorm.html),并确保您的底面比两个倾斜的侧面更强。我不知道Blender是否采用了不同的方法,但你应该试一试。