前言
最近在制作模型资产,其中在制烘焙过程中,遇到多个不尽人意的质量问题,拙笔记录,用做个人备忘录或初学者参考。
本人非艺术专业,因此某些环节模型制作可能并不规范,如存在问题还请指出。
模型使用Blender制作,Blender烘焙功能略不方便,使用Marmoset Toolbag烘焙贴图并展示效果。
高模部件展示
我选取模型中最具代表性的一个部件,此部件包含了多种复杂情况:
挖洞 | 对称结构 | 圆环 | 网格穿插 |
---|---|---|---|
![]() | ![]() | ![]() | ![]() |
开始前明确:低模制作规范
在制作低模时,实际上并无无硬性要求,但是高低模之间总存在三种情况:
①高模包裹低模 | ②低模包裹高模 | ③低模重叠高模 |
---|---|---|
![]() | ![]() | ![]() |
大多数情况下,低模略微包裹高模
最为通用,即②③情况,这样可减少烘焙时的渲染伪影、缓解接缝、烘焙效果最佳
如果没有理由,应该尽量避免①高模包裹低模
的情形
前置注意事项
在导出低模模型前,若模型不含锐利棱角,可以对模型进行一次基于面的面积
的平均顶点法向
.
在Blender
,使用Alt N
快捷键,可选择此功能:
重新计算法向后,可减轻Normal贴图纠正固有顶点法向的负担。
此举动有助于稳定烘焙后法线的质量,尤其是对于低分辨率、复杂布线下的表现(为突出效果,当前为256*256的极低分辨率):
平均后-烘焙效果 | 平均前-烘焙效果 |
---|---|
![]() | ![]() |
不含锐利棱角指的是:所有相邻面夹角>90°(即对所有边角做过倒角处理)
⚠️本文中所有解释仅为个人理解以供参考,可能并不准确,切勿当作教条。
1.烘焙挖洞类网格
🔒高模情况
使用表面细分流程制作高模,同时刻意保留了较明显的圆滑拐角(或称为高光边)
🔑最佳低模实践
- 尽量让
低模包裹高模
,在拐角处额外的添加一次倒角(内测外侧分别一次)。 - 沿着洞的
边缘
切割UV(设定裁剪线),并拉直UV - 将位于洞
边缘
的UV裁切线标记锐边
外侧 | 内侧 |
---|---|
![]() | ![]() |
高低模关系(黄色为高模,白色为低模):
外侧 | 内侧 |
---|---|
![]() | ![]() |
让洞的边缘落在倒角所形成的范围之内
尽量让边缘线完全包裹高模
⭐️效果:
❓解释
1️⃣.为什么要在洞边缘添加一阶倒角:
倒角添加新的面,洞边缘处的凹凸细节被烘焙到倒角产生的面上。
若不添加倒角,则表面的一部分凹凸细节将被烘焙在洞壁上,洞壁的凹凸细节将被烘焙到表面上。
1.如果不添加外侧的倒角,则烘焙效果如下图所示:
原因:
侧面观察时,对于能看到洞壁的一侧,可以保持极佳的效果。
由于有一部分的凹凸细节被烘焙洞壁上,因此在看不到洞壁的一侧,无法呈现部分边缘的Normal细节,显示出生硬的网格边缘。
2.如果不添加内侧的倒角,则烘焙效果如下图所示:
原因:
由于有一部分洞边缘的凹凸细节被烘焙洞壁上,因此无论在什么角度观察,只要能看到洞壁,都能看到洞边缘的凹凸细节。
如果模型没有特写要求,则可以忽略此细节,无需添加倒角
2️⃣.为什么要低模包裹高模
而不是高模包裹低模
如果你使用高模包裹低模
,则会收获如下效果:
1.低分辨率下严重失真:
原因:
高模表面积大于低模表面积,高模凹凸细节被迫压缩到更小的面积上,在低分辨率下这种影响尤为严重。
2.烘焙细节意外截断:
原因:
烘焙过程中,低模的射线检测从cage表面(位于低模表面外侧)向内发射,探测并捕捉高模的细节。低模表面上的某些区域探测不到高模,导致烘焙结果中出现“截断”或“漏烘焙”的现象。
3️⃣.为什么要在洞的边缘处切割UV?为什么要拉直UV?
如果不切割UV,让洞壁的UV与洞边缘相连接。
在低分辨率贴图中,则会出现明显的锯齿:
不切割UV | 切割UV |
---|---|
![]() | ![]() |
原因
UV存在拉伸,分辨率与相邻的UV面不同,边界处的一个normal像素被共享,因此出现异常的凹凸。
只要存在
UV裁切线
,则接缝通常只能通过提高UV面积、增加分辨率缓解
,因为分离的UV孤岛可能存在不同的拉伸、缩放,从而导致边界像素无法完美匹对。
如果在边缘UV和洞壁UV之间设定裁切线(点击查看大图):
左:裁切线位于边界与洞壁之间
- - - - - - - - - - - - 右:裁切线位于表面与边界之间
虽然没有UV裁切线
,但是由于边缘处UV存在拉伸,导致出现不太明显的边界
,这同样是由于UV边界处采样问题导致的。
此边界无法通过提高分辨率来解决,越高的图像分辨率,代表更多的边界处像素被采样,产生更加明显的痕迹:
此边界无法通过拉高分辨率
消除:
UV裁切线产生的边界可以通过拉高分辨率
缓解:
为什么要拉直UV?
如果不拉直UV,则会在边缘处粗糙 | 拉直UV,粗糙有所减少 |
---|---|
![]() | ![]() |
4️⃣.为什么UV裁切线要设定锐边?
在洞边缘处:
不标记锐边,UV接缝处光照突变明显 | 标记锐边,效果有所好转 |
---|---|
![]() | ![]() |
标记锐边在中高分辨率
下的表现:
标记锐边在低分辨率
的表现:
原因:
原因可能是
因为:
Normal | 效果 |
---|---|
在不标记锐边时,斜面需要额外考虑与平面的法向过渡:![]() | 这导致了边缘处额外的凸起:![]() |
当标记锐边后,斜面与平面视为独立的网格,互不相干,只需考虑高模法向:![]() | 这只会产生极其细微的裁切线导致的边界:![]() |
此处仅考虑了UV面积充足的情况。低分辨率中效果会有所不同。
⚠️并非所有UV裁切线都需要锐边标记,如果UV裁切线两侧都为圆滑的表面(可粗略的通过角度>90°判别,下文有额外的评判原则)
,并且UV比例均匀
,则无需标记锐边。
例如在洞璧上的UV裁切线,由于左右两侧都为光滑的表面,所以不标记锐边:
2.烘焙环状网格
🔒高模情况
🔑最佳低模实践
环状等包含圆形的形状,为维持网格形状,只能增加网格面数。
- 通常只需四段线即可维持各方向上的体积相似。
- UV接缝位于内侧减少视觉影响,将UV进行拉直。
- 根据需求增加或减少环体段数
纯粹的环形、球形是最为简单的结构,甚至无需烘焙,只需平滑法线就能得到最佳的结果。
⭐️效果
3.烘焙镜像类网格
🔒高模情况
🔑最佳低模实践
- 遵循②②规范,尽量包裹高模即可。
- 将左右两侧共用的线段标记为锐边
⭐️效果
❓解释
1️⃣.为什么要在对称轴上标记锐边
标记锐边,表面左右两侧的顶点将被视为独立的网格,左右两侧的顶点法向将不会试图平滑过渡。
不标记锐边,若两侧法向位置不同,顶点的法向会自动的平滑过渡。生成的Normal会试图补齐差异来符合高模的表面。
由于两侧共用的相同的UV数据,导致另一侧Normal是错误的。
4.烘焙穿插类网格
高模中不应出现网格穿插,因为Normal无法描述突变的值
应确保网格交界处受遮挡而不可见,因为交界处的Normal是不准确的
🔒高模情况
🔑最佳低模实践
- 遵循②②规范,尽量包裹高模即可。
- 对UV裁切线处理:
- 对于高锐度的结构,必须标记锐边
- 对于大平面与小圆角的交界处,可标记锐边提高细节质量
注意
:对于复杂结构的空心盒体
,可能会有模型面沿法向缩放
不均匀的问题,这将导致cage的计算错误,从而引发烘焙问题。在低模构建时应避免①类情况。
锐边标记 | UV裁切线标记 |
---|---|
![]() | ![]() |
内部尽量完整包裹高模,避免cage计算出错
⭐️效果
你可能注意到,虽然高模网格是交叉的,但是烘焙出的Normal却呈现出”连续“的视觉效果:
这是一种巧合,其生成的Normal
是不准确的,不能保证与上半部分的Normal
连续。
当更改分辨率
,或更改UV
重新烘焙时,则可能会出现不连续的接缝。
在实际工程中,你应该使用掩盖交界处,确保不可见。
❓解释
1️⃣.为什么锐度高的UV裁切线需要锐边
对于高锐度
的角落,若不标记锐边,则会出现异常的结果:
原因:
若不标记锐边,顶点的法向会自动的平滑过渡。烘焙时生成的Normal会试图补齐差异来符合高模的表面:
由于高锐度网格中法向差距大,Normal贴图所能表示的范围有限,因此不能烘焙出高模的表面细节。
2️⃣.为什么要给位于大平面
与小圆角
的交界处的UV裁切线标记锐边
若不标记此处锐边,则会在边界处出现光照瑕疵。
不标记锐边 | 标记锐边 |
---|---|
![]() | ![]() |
原因:
与第一节提到的原因一致,不标记锐边时,两侧的法向将自动的进行平滑过渡,这导致大平面一侧会有细微的法向偏移量:
未开启锐边 | 开启锐边 |
---|---|
![]() | ![]() |
此细微的偏移可能是
导致诡异高光出现的原因。
结语
⚠️本文中所有解释仅为个人理解以供参考,可能并不准确,切勿当作教条。
文章如有不当之处,还望指正