【建模】烘焙原理以及在3dsMax中的完美烘焙法-法线烘培

复制帖子链接

发贴时间:2020-10-09 15:36 

来自版块:共享教程

人气1646 评论2 点赞0
教程来源:
点击查看
教程语言:
中文(Chinese)



教程分类:
模型教程
下载方式:
在线阅读


我们先系统性的理解一下烘焙原理。

1532600521812870.jpg 图1
烘焙的目的是将物体高模上的法线信息尽可能完好的记录下来。而做好烘焙的三要素为:平滑组,UV和Cage。

1532600526103930.jpg 图2


1532600531623358.jpg 图3
什么是平滑组?如果两个面共享一条边并且共享一个平滑组,它们将被渲染成为平滑曲面。每个面片可以包含不超过32个平滑组。在一个平滑组中的面在它们相交的这个顶点的法线方向为它们三个面上法线方向的加权平均(见图3)。
我们看一下图1,UV没有完全切开的情况下,如果你把所有边设为软边,那么立方体的所有面都被设置在一个平滑组里,就会得到图1左上和图2右边的情况。一个正方形,边缘很光滑,但是面不平,而且轮廓很糟糕。

1532600535883012.png 2为分了UV分了平滑组,3为没分UV分了平滑组,4为分了UV没分平滑组,5为没分UV也没分平滑组(1为高模,其余的低模)
但如果我们把不同的面分到了不同的平滑组,立方体立刻就变好看了。表面平整,轮廓清晰。但是细看边角处,我们除了凹痕以外还看到了一条黑线。

1532600539794624.jpg 上图3的不足之处:边角处有黑线和凹痕
造成这条黑线的罪魁祸首是没有分UV所造成的面与面之间法线信息的溢出(bleeding)。解决方法就是在边的相接处把UV切开,再隔开一定距离。如上上图的2。


1532600555121190.jpg 解决了黑边以后我们得到这个结果
最后要讲的是cage。

1532600562134237.jpg
烘焙时,低模的面向外发射射线,如果两个相接的面呈90°角,那么射线就不会通过两个面的边角处。而cage的作用是让射线也通过两个面向量的加权平均方向,通过面之间的边角处,从而使低模获得高模完整的法线信息。

1532600570565093.jpg
知道这个原理后,在做高模时,为了让射线更容易通过面之间的边角处,高模上的细节要注意避免相连的两个面互相垂直,倒角也不要用力过猛。

讲完了原理,我展示一下3ds max中进行完美烘焙的流程。

预备工作:低模和高模的枢轴都位于世界原点,删除历史(maya)或collapse all(max),冻结变换,用到的法线贴图类型为tangent space normal。

上面讲的是理论,真到实践中有些东西要调整。我讲到要分UV,但实战中模型更复杂,我们能见到边就分UV吗?分那么多块材质怎么画呢?所以实战中除了分UV还要做倒角。方便一起上材质的部分不切UV,分开的UV要赋予不同的平滑组。

(题外话,即使不做倒角,带有平滑组的低模被放到游戏引擎中也会有和完全倒角的低模一样的顶点数,见下图)

1532600575976735.jpg
第一步,把做好预备工作的高低模的初始状态放在第0帧,在下一帧把零件之间隔开一段距离,高低模的零件的位置要保证重合。这样做的原因是:一,你可以马上返回第0帧查看带有法线贴图的低模的效果;二,零件之间有距离间隔能防止零件之间法线信息的相互溢出。这里特别要跟莲酱讲一句,UV在做好以后是不会变的,即使模型的零件发生了位移。在做到烘焙这一步时,跟模型和UV已经没有关系了,你现在所做的一切操作都只是为了制作一张有完整高模信息的法线贴图。


1532600579619313.png
第二步,选择低模,Modifier->Projection->Cage。在Cage菜单下勾选Shaded。


1532600589132550.png
第三步,选择某零件低模的顶点,在Cage菜单下上调Push里的Amount值,让低模的Cage刚刚好包裹住高模。有时候大部分区域都包裹好了,但有些地方却露了出来(如下右图)。这个时候只需将该区域的顶点选上后进行精调即可。


1532600594104141.jpg


1532600598102867.jpg
全部零件调完Cage以后进入第四步,烘焙测试(非最终渲染)。主菜单->Rendering->Render to Texture,选择输出路径,在Projection Mapping中选择Projection,pick里选择高模,点开Option,勾选Ray miss check以发现错误信息。暂时不选Global Supersampler,因为这不是最终渲染。(确保Light Tracer为开启状态)

1532600603675039.png
稍微讲一下padding。一个UV图上,除了UV shell以外的黑色区域称为gutters。如果UV shell和gutter的颜色差别很大,也会造成贴图信息溢出的情况。padding的作用是在UV shell和gutters之间做一个保护层,防止贴图信息的外溢。根据贴图大小不同,padding的值也需调整。如下表。

1532600607121853.jpg


1532600611113341.jpg
返回Render To Texture菜单,添加法线贴图,因为只是测试给个1k分辨率就可以了,点击渲染。

第五步,将渲染好到法线贴图放入shader,回到第0帧检查低模上的法线信息。我们勾选了Ray miss check,但贴图上没有小红点,说明烘焙时没有出现什么大错误。

1532600617964987.jpg


1532600621156936.png 右上的锯齿是因为贴图分辨率不够造成的,右下的波浪纹是因为Cage没有覆盖到造成的,都不是大问题
第六步,检查没有问题以后回到Render to Texture菜单,取消勾选Ray miss check,点击Global Supersampler进行如下操作。再渲染一张2k贴图作为最终结果。

1532600625929013.jpg
第七步,将法线贴图导入PS。用涂抹和印章工具优化一下。有些细节也可以直接在PS里制作,你也可以使用Quixel做,更省事。我自己其实全是在SP/SD里做的,从来不用cage。模型复杂到一定程度,cage就显得太费力了。


1532600629874190.png 1532600633106654.png
补充:

1532600638684635.jpg 左图为“完美烘焙”,右图为手调法线
当然了,如果你不是做游戏,而是影视渲染,那么我们这种所谓的“完美烘焙”也不是最完美的。最完美的是手调法线,附一个Max里的调法线工具。
Modeling_FaceWeightedNormals

复制以下链接分享到 QQ群 QQ空间 贴吧 或其他CG网站上,每进来一个人你将获得: 2微豆
B Color Smilies

全部评论2


客服
快速回复 返回顶部 返回列表