最近在做基于物理的卡通化风格渲染,听起来真是矛盾哈哈哈哈。
卡通渲染嘛,描边是一个很大的特征。因为现在项目某些原因,不适用图像后处理边缘检测的描边方法,只能用几何过程式生成描边。但在几何过程式生成描边中,对于有棱有角的物体(也就是硬边处)往往会出现硬边描边断裂问题,一种解决方法是需要把顶点的法线平滑即使得同一顶点的所有法线平均得到新法线,并用新法线来作为模型膨胀描边的依据。
昨天查了查资料,动手做了一个Unity 编辑器拓展工具。
完成功能:
1. 使得所有被选物体的网格顶点法线平滑(即使得同一顶点的所有法线平均得到新法线),并写入顶点色中。✔
2. 根据上述操作,生成新的网格资源并保存到本地。✔
原始网格与平滑法线并写入了顶点色的网格
左边为法线平滑膨胀描边和顶点色式平滑法线,右边为原始法线膨胀描边和顶点色式法线
挖个坑,如果有时间再补。
这问题困扰我很久,可惜我不是程序,束手无策
@ayunero:抱歉才看到回复,emm我记得某些DCC工具比如3dmax也可以进行法线平滑..不会程序也好像可以的。其实这里程序也不是很难辣,可以试试去学学嘛~
最近由 阿创 修改于:2020-06-10 16:32:09哦哦,谢谢啦,只要3d 软件把法线弄平滑,就可以吗?
@ayunero:嗯是这样的,不过如果即想要解决“描边断裂”问题,又想要保留原有棱角处硬边的法线用来光照计算,可能需要将法线平滑后的结果额外保存出来,比如得到一张平滑过的法线贴图、刷在顶点色上面,又或是存到模型的tangent等等,随后在着色器shader中获取它进行计算这样。
@阿创:谢谢您的解答