0.前序
没有前序…~_~
好的这篇文章将总结一下
在3dsMax的多边形建模中,针对复杂结构,如何基于环线切角正确的修正顶点成线走势,从而避免产生赘余拓扑(Part 1)
以及纯3dsMax展开UV,烘焙法线并应用到Unity中的技术要点(Part 2)
结合法线贴图&法线烘焙原理,正确理解顶点细分效应,法线计算的结果,法线突变可能带来的切角效应以及卷错问题,针对高模低模的软硬边如何正确设置低模平滑组和UV断连(Part 2)
章节目录
Part 1 环线切角理论
—1.1 复杂结构切角时的问题
—1.2 环线切角
—1.3 非环线切角
—1.4 切角后的平滑组设置
—1.5 向某一面光滑
—1.6 凸角与凹角的平滑处理
Part 2 法线烘焙
—2.1 3dsMax法线烘焙基础
—2.2 法线烘焙精髓
——2.2.1 经典立方体24顶点问题
——2.2.2 关于顶点细分
——2.2.3 法线贴图原理
——2.2.4 法线烘焙原理
法线分析
———2.2.4.1 背景色—不改变法向
———2.2.4.2 平滑过渡
———2.2.4.3 突变
硬边突变
有无突变
——2.2.5 法线应用的效果
———2.2.5.1 法线不变
———2.2.5.2 呈现曲面/弧面
———2.2.5.3 切角效应
———2.2.5.4 卷错
有无突变卷错
曲面卷错
———2.2.5.5 接缝效应
——2.2.6 总结
针对低模硬边
针对高模硬边
针对高模软边
—2.3 一个实例
——2.3.1 基于高模拓扑低模
——2.3.2 不要低模全软边
——2.3.3 拆解UV
——2.3.4 手排UV消除噪点
Part 1 环线切角理论
切角就是为了圆滑处理多边形上的一些硬边,或是尖角
让它们看起来光滑,像是被精心打磨过的,不会划伤手的
—1.1 复杂结构切角时的问题
我们做了一个按钮,但似乎边缘的地方比较生硬,可能会划伤用户的手
好的来切个角吧
嗯嗯,不错
但实际在多边形建模中,我们需要切角时,拓扑结构往往十分复杂
以至于我们在切角后往往会出现这样赘余的拓扑结构
那么应该如何避免出现赘余的拓扑结构,正确的进行切角呢?
—1.2 环线切角
首先我们在切角时尽量选择一圈成环线(闭塞线)
这样可以保证切角后,得到的两圈线也是成环(闭塞)的
就不会在末端出现这种情况
当然曲面建模调整拓扑中刻意的切角加线除外
其次是观察环线上的各个顶点,我们需要对成线走势不正确的顶点调整拓扑
那么如何判断成线走势的正确与否?又要改成什么样才算是改对了呢?
我们观察一下之前制作按钮时进行切角的圆柱体
对这个圆柱两个底面的圆环,无论切角多少次都不会出现拓扑赘余
我们也可以在中间加一圈线,不断切角,亦不会出现赘余拓扑
之所以不出现赘余拓扑,是因为圆柱体的环线上,各个顶点,以及形成各个顶点的交线走势满足以下特征:
1.各个顶点都是三星点,或是四星点
2.形成各个顶点的三条/四条交线满足,两线为环向走势,另外一线/两线为垂直于环向的走势(或者说另外两线位于环线的不同侧)
其实对结构线的切角,无非就是将各个顶点都切角打开,再想办法连接起来
正因满足了上述的两条特征,在切角时,一圈线的顶点都沿垂直于环线的方向打开形成两顶点,再在成环方向被连接起来,从而就不会产生赘余拓扑
好的我们返回到刚才相要切角的复杂多边形中,来分析处理一下成线走势不对的顶点
首先是下图中的五星顶点
其次是像这样的四星点,两线走势位于环线的同侧
这种情况不妨摁住 Ctrl点移除,将其改为三星点,暂时留五边面,切角之后再处理
如果我们保证所有环线上的顶点,成线走势均正确,那么就像圆柱的底圆,立方体的某个面一样,无论切角多少次,都不会出现赘余拓扑
—1.3 非环线切角
如果我们要切角处理的硬边无法构成一整个环线(当然尽量还是使用1.2的环线切角法)
例如对立方体的12棱切角处理
或者对于复杂多边形所有露出的硬边进行切角
这样的非环线切角中我们也应基于其中的一条/多条环线进行切角
例如上面的复杂多边形切角所有露出硬边,其中有一条大环线可作为基准
从而需要切角的边线就被我们化归为环线和环线的外延伸线
例如图中选中的切角边,蓝色为环线走势,绿色是环线外延伸出的一线走势
正方体可将上下底面看作两环线(蓝),4条侧棱连接两环线(绿)
我们也需要按照1.2中的规则对环线上的顶点调整成线走势
但我们在调整中又只能调整那些无需切角的边线,因而可能会出现,环线成线走势调整与选中切角边冲突的情况
对于环线上的五星点需要调整成线走势,恰好环线一侧的两边线无需切角,可进行调整
如果不调整就会在切角时产生四边形,这是我们要避免的
图中就是一个冲突情况,环线上的四星点必须调整走势,但一侧的边线又都是需要切角的边
切角时不可避免的出现四边形
另外特别的,如果选中的切角边在环线上构成了十字交点,虽然符合成线走势,但也会在切角时不可避免产生四边形
总之我们需要尽量避免在非环线切角时,在需要圆滑的角上出现四边形或者四边以上的n边型
尽量保证每个顶点都是环线上符合成线走势的顶点,我们只选择了两线环向,或是选中了两线环向一线外伸进行切角
从而不会产生赘余拓扑,或是形成一个三切圆滑角
蓝线为环线走势,红色圈出的两顶点符合成线走势,且我们只选择了两线环线切角不产生赘余拓扑,绿色圈出的两顶点,也在环线上且符合成线走势,我们选中了两环线和一外伸构成了三切圆滑角
在二次(及之后)切角时,对于三切圆滑角,我们还需选中其在环线上的所有边
从而每次切角都只有四边形和三角形,在二次及以上切角只需简单调整,设置平滑组(1.4节)就可以形成还算不错的光滑角效果
例如二次切角,选中方框中的边
二次切角形成图中的拓扑
我们再次选中环线上的边
三次切角拓扑
简单调整一下边的伸缩,设置平滑组
三次切角平滑效果
更加一般(复杂多边形)的情况,这个拓扑在二次以及三次切角下,可以在切角运算完成之后很好进行的自适配,只需简单设置平滑组就可完成切角平滑,无需手动调整拓扑
如果我们直接进行二次切角,三切圆滑角,拓扑就会变为
一方面这种拓扑平滑效果不好
并且中间还留了一个n边面,我们必须手动处理
我们这种基于环线,多次切角时连带环线边,尽量只起三切圆环角的方式,不敢说效果就有多么的好,但对于切角来说起码够用
在复杂n边形中,可能有很多这样的三切圆滑角的状况,依照我们的方法,只需在切角后调整平滑组即可完成平滑效果,无需针对每一个平滑角手动调整拓扑,从而节省大量的时间
当然更加细腻的光滑,就需要我们求助于涡轮平滑/网格平滑这样的细分算法
不过随之而来的是我们需要在一些倒角的地方加线对抗光滑半径,也可以使用网格平滑调整强度来保持倒角
并且原平面可能在平滑后被拉伸,这对于材质/贴图来说并不是个好消息
因此虽然细分算法的圆滑效果更细腻,但可控性较差,切角虽然比较粗糙,但可控性强
这里我们加了很多线来对抗光滑
位于缝隙处的多边形在平滑后被拉伸
另外对于四边形切角这种模式,其实它的初次切角在三切圆滑角上的拓扑表现很不错
但后续二切/三切不管是切换到普通切角,还是沿用四边形切角都显得比较weak
不妨记住这个拓扑构型,在曲面建模中处理三线相交走势时经常用到
这个拓扑符合平滑运算的结果
后续二切三切就不太行了…
并且既然中间加了那么一线,我们其实希望初切的中间线能向外推出,从而更好的圆滑,可它偏偏是个平的
复杂/一般多边形下我们可能需要耗费大量的时间成本去选中中间的顶点,并加推力推出
对于无可避免的出现四边形的状况,首先初切圆滑效果并不好,后续二切三切的拓扑也不理想
如果非要做这种四线及以上的光滑角,就不能单纯依靠Max的切角运算直接生成
而是需要我们用曲面建模的那一套东西,进行手工的拓扑,雕刻调整
—1.4 切角后的平滑组设置
在我们切角时注意取消平滑处理,并在切角完成后手动设置平滑组
先选中全部多边形,清除所有平滑组
注意针对切角产生的平滑面,我们不能单纯的只上一个平滑组
复杂多边形下,只上一个平滑组经常产生各种各样的扭曲问题
并且对于折角的地方也没有很好的圆滑
单纯只用一个平滑组,对于向某一面内的光滑,亦会出现扭曲问题
这里正确的做法是对于不同的折段上不同的平滑组,相互错开
这样可以先保证光滑边的圆滑效果不会出现问题,之后我们再来处理向某一面的光滑(1.5节),以及折角的光滑(1.6节)
—1.5 向某一面光滑
首先根据1.4的方法设置好切角面的平滑组(每一折段平滑组相互错开)
我们可能想要去掉某个方向的硬边,即向某个面光滑
向某个面光滑的方法并不是单纯的将接邻部分设置为一个平滑组,这经常会导致扭曲问题
正确的做法是在面内沿着切角边进行加线,从而形成断开的边缘平面
也可以通过插入/环线连接 快速生成,但插入/连接 运算后平滑效果经常不如手动切割加线
之后将加出的一道面与对应的切角面置为相同的平滑组即可(采取有限平滑的策略)
平滑效果
大块的内平面并不需要设置平滑组,因为我们加出的边缘面本身与内平面是法向一致的,之后再通过平滑组向切角面平滑过渡,这样的有限平滑策略,在产生平滑的同时,可以有效防止扭曲的产生
—1.6 凸角与凹角的平滑处理
由于我们每一折段的平滑组是互相错开的(防止扭曲)
因而在一些折角的地方会表现出下图的硬边
如图大角在外,小角在模型内,是一个凸角
如图小角在外,大角在内,是一个凹角
凸角的处理
在单面圆滑时我们可以如图加线,并将转角处的平面置为一个平滑组即可
若是双面圆滑的情况,凸角的处理就必须连同后方的硬边一起圆滑,否则会出现冲突的情况
双面圆滑,我们设置折角平滑后,要么向某一面的圆滑出现硬边,要么折角圆滑出现问题
如图拓扑,先删除平滑组,在无平滑组下先通过雕刻来圆滑处理,尽量消除四边形隐线
最终效果,只要会雕刻没有什么曲面是处理不好的^_^,当然比较费时间就是了
凹角的处理
需要如图加线,并将转角处的面置为一个平滑组即可
无论双面/单面,凹角圆滑都必须一起处理掉后方的硬边(需要一起切角)
先切角,再在外侧各切一线
凹角经常需要根据平滑效果反复调整布线走势,注意边约束的应用
单面圆滑凹角的平滑处理效果
这个拓扑,在凹角-双面圆滑时也能很好的应对,不会产生冲突
Part 2 法线烘焙
实际产业内的技术美术在进行法线烘焙时,都会使用一些能够一键完成的工具,只需将导入高低模即可,甚至法线UV的拆解也能自行完成
不过目前我只会用Max就是了
这里我们就来讲讲,纯Max,如何正确的手工拆解法线UV,从高模拓扑低模,完成法线烘焙并应用到Unity中
并结合法线贴图的原理,以及法线烘焙运算的原理,细说有关高低模硬边对应,法线突变分析,UV断连的意义
—2.1 3dsMax法线烘焙基础
首先准备好高模和低模,高模表现正确,低模展开对应的法线UV
将两个模型重叠到一起
渲染设置,开启抗锯齿,开启超级采样
选中低模数字0建打开烘焙面板
启用投影,选取高模
此时低模被添加了一个投影修改器,
勾选点到点,调高数量使蓝色点线框架撑开包裹住高模
一些折角的地方可能需要我们手动调整一下排布
有时渲染完成后我们会在弹出的着色图中看到这样显现红色的面
对应的法线贴图出现了这样高亮的部分,这是由于我们投影框架调整有无,一些地方没有撑开包裹住高模
投影选项,注意G通道正轴方向设置
如果法线贴图要被应用到Max中,应保持默认的下方向
如果法线贴图要被应用到Unity中,应选择上方向
事实上这里的G通道正轴方向设置,对应经典的 DX/GL 法线问题
如果我们在Unity中发现这种光影完全翻转了的情况,就是烘焙法线时没有调整G通道方向
使用现有UV展开,通道标号选取对应的法线UV标号
通常漫反射为uv1,法线为uv2,但也可以漫反射和法线共用uv1,这里简例中没有漫反射贴图,只展了一套法线uv
添加NormalsMap烘焙项
设置保存位置(保存为 tag格式)
目标贴图位置选择“凹凸”
下方设置尺寸
之后点击渲染等待运算完成
注意法线贴图渲染结果要到我们保存的位置去找对应的.tag格式纹理
并不是点击渲染后弹出来的这张着色贴图
法线贴图大概长这样,注意查看图片时会使用sRGB空间,导致原本处于线性空间的法线贴图一些地方显示错误,实际上法线贴图不过是一个巨大的三维向量数组,只不过映射为RGB按图片显示出来大致长这样
在Max中应用法线贴图
材质编辑器下方凹凸贴图,添加一张法线凹凸
之后进入法线凹凸中,添加位图,选择我们的法线贴图
在Max中需要通过渲染查看法线贴图的效果,视口中无法正确显示,还需结合打光调整
—2.2 法线烘焙精髓
——2.2.1 经典立方体24顶点问题
图形学中的一个经典问题,一个立方体具有8个顶点12个面
但是我们导入到Unity中进行一个测试
首先空场景下具有4个顶点(摄像机背景)
渲染一个立方体顶点变为28个(增加24个),也就是说渲染一个立方体需要24个顶点
这是由于渲染的时候其实是一个一个的三角形去组成的网格,渲染管线底层也只针对三角形进行插值生成片元
一个立方体有8顶点,但其实是12个法线方向不同的正方形拼成的,每个正方形又是两个三角形拼成的三角带
也就是说你应该这么想,由12个正方面组成
更进一步每个正方面是两个三角形构成的三角带
隔壁3D游戏数学的笔记…
立方体12条棱都是硬边,硬边的左右两平面法线方向是不同的,基于法线方向不同产生了顶点的细分
8个顶点都细分出了3个顶点,指向三个不同的法线方向
——2.2.2 关于顶点细分
顶点细分是基于顶点处某一属性的不同,从而原本在建模(DCC)中看到的合并在一起的顶点会在渲染时分化出更多的顶点来承载属性值的差异
硬边本身是由左右表面法线方向的不同(突变)而产生的,因而硬边处本身就存在顶点细分
而另一种创造顶点细分的方式,便是UV的断开,基于UV值的不同来产生细分
如果高模的硬边被烘焙进了低模的平面内,这种情况下若想正确的表现出高模硬边,低模就需要在对应的硬边处具有结构线并拆开UV,从而创造出顶点细分进而承载硬边处法线方向的突变(详见2.2.5.3节的测试)
——2.2.3 法线贴图原理
法线贴图基于纹理贴图技术,隶属于凹凸贴图的一种
在片段元(像素)着色阶段,将片元的法线方向替换为从法线纹理中索引到的法线向量,进而影响片元的着色计算,通过光照下的明暗来表现出凹凸效果
表面法向n,光照方向l,观察方向v,是片元着色计算中最基本的三个向量
片段元的着色计算是在片元对应的切线空间下进行的,因而法线贴图所存储的向量也是在切线空间下,替换片元法向后可直接进行光照计算
切线空间的原点就是每个片元的位置,Z+是片元的原始法向(由三角形顶点法向内插值得到的法向),另外两轴与片元相切并对应片元投影到纹理空间后UV坐标延伸的方向
法线贴图中大片的紫蓝色,对应片元的法线方向保持原本方向,即切线空间下的 (0,0,1) Z+方向
不过由于向量取值是在[-1,1],而纹理数据只能保存正值,因而还需要将纹理中索引到的RGB向量数据(范围[0,1])进行一个:
紫蓝色的8bitRGB色值是 (127,127,255) 对应的向量是(0.5,0.5,1) ,映射处理后变为(0,0,1)
而其它或红或绿的非背景色,便是需要让片元的法向做出一定的调整
——2.2.4 法线烘焙原理
在烘焙法线前我们需要拆解低模的法线UV,法线烘焙的结果会按照低模的UV模板生成法线贴图,之后在渲染管线应用法线贴图时,也是按照法线UV索引对应的数据
但法线烘焙时并不是依照法线UV去计算,法线烘焙是根据高模与低模之间的表面映射关系(在3dMax中就是我们添加的投影修改器)
根据投影修改器,高模的一些面会被映射到低模的一些面上,并参照低模表面各个位置片元的切线空间,计算投影而来的高模表面的法向量在低模片元切线空间下对应的向量方向,再根据低模的法线UV模板,将结果填入到对应的位置上,从而生成法线贴图(低模UV只是填写模板不影响计算过程和结果)
对于每个片元/表面而言,计算结果是针对每个片元各自的切线空间下的,与低模UV的拆解组合方式是完全无关的
法线分析
———2.2.4.1 背景色—不改变法向
如果投影时,高模表面法向在转入低模片元切线空间后,法向均是Z+方向(高模表面法线与低模表面法向处处一致)
那么烘焙出的法线贴图,对应位置就会呈现出背景色
例如图中低模上与高模法线处处一致的平面部分
渲染出的法线贴图对应的地方呈现背景色,无需改变法向
如图红色的两条硬边左右平面与高模法线处处对应,因而这两条硬边拆不拆UV就是无所谓的
我们取消UV的拆解,将平面组合到一起
如图,组合到一起后仍呈现背景色,法线计算结果与低模UV拆解组合方式无关
———2.2.4.2 平滑过渡
通过低模平面承载高模弧面,低模平面部分片元切线空间的Z+方向一致,而高模弧面部分法线平滑变化,最终呈现出的法线贴图就会表现为一块颜色平滑过渡的部分
例如图中,低模承载高模切角弧面的平面部分
渲染出的法线贴图上表现为一块颜色/法向平滑过渡的部分
———2.2.4.3 突变
我们需要在烘焙前就预估可能的法线突变位置,在后续的应用中法线突变的位置可能导致各种各样的问题,法线烘焙最重要的地方就是根据法线的突变位置,正确的设置低模的平滑组以及低模UV的断连
高模硬边突变
当高模的某些硬边被烘焙入低模的平面中时,在硬边的位置就会产生法线的突变
事实上我们经常这么做,在高模上制造一些凹凸的效果,并使用低模的一个平面来承载
例如我们将一个硬边凸出的砖墙高模烘焙进平面低模中
法线在硬边处就有明显的突变
低模硬边突变
在低模硬边的位置由于左右参考切线空间Z+方向不相同,除非低模硬边与高模硬边完全对应,左右平面法向处处一致,计算后左右均为背景色,否则一定存在突变
一种经典的情况是四边形内部的分割隐线呈现硬边,并且四边形承载了高模的曲面(左右法线都不是背景色),将会导致卷错的产生(2.2.5.4 卷错)
四边形内部的隐三角分割线,呈现硬边,而这个四边形会承载高模的切角曲面
计算出的法线存在突变
另一种经典情况是有无突变
当低模上硬边相交的平面AB一起被烘焙时,若平面A对应的高模表面法线处处一致,烘焙之后呈背景色(没东西),而平面B对应的高模表面法线不一致烘焙后为非背景色(有东西),而相交的硬边没有拆开UV
则法线纹理上AB交接的硬边地方就会出现有无突变,这种情况亦会导致卷错的产生(2.2.5.4 卷错)
图中环线切角单面平滑,蓝色箭头一侧切角弧面与内部平面相接
选中的内部平面与高模的平面法线处处对应,外圈平面对应高模切角弧面的部分,我们没有拆解UV
如图渲染出的法线贴图就产生了有无突变,内部与高模平面完全对应的部分呈背景色,而外圈对应高模弧面的部分呈现非背景色,相接的地方就出现了有无突变
——2.2.5 法线应用的效果
这里来分析一下当低模应用由高模烘焙来的法线贴图时能够产生的各种效果
———2.2.5.1 法线不变
高模法线与低模法线处处一致,法线贴图呈现背景紫蓝色,低模上对应的多边形无需改变法向,保持原样即可,这种效果是完全正确/自然的不存在任何问题
例如图中低模平面与高模平面法线处处一致
法线贴图对应的地方呈背景色
那部分的低模平面无需改变法向保持原样即可
———2.2.5.2 呈现曲面/弧面
可以由低模的某个平面来承载高模的曲面,从而在应用法线后低模平面就会产生曲面的光影效果,这种效果是完全正确的不存在任何问题
如图选中的低模平面圈用于承载高模的切角弧面
应用法线前的效果
应用法线后平面就变为了弧面的效果
也可以部分承载,将高模弧面的凹凸烘焙进低模的平面内部
应用法线后低模平面对应的部分就会呈现高模曲面的效果
———2.2.5.3 切角效应
当高模的硬边被烘焙入低模的平面内时,实际低模表现出的效果就像是高模对应的硬边被切角了一样,我称其为”切角效应“
例如我们准备一个有球形凹陷的高模,和一个平面低模
高模球形凹陷的边缘有明显的硬边,而低模仅仅是一个平面,对应的地方没有结构线也没有拆开UV
烘焙出的法线边缘部分明显存在突变
Unity中的效果,可以看到硬边的地方并不自然,像是被切角了一样
这里我们真的对高模硬边的地方做一个切角
之后将高模导入Unity中与低模比较
可以看到效果一致
切角效应的产生是由于纹理采样时的滤波对高频变化部分的阻断,导致硬边法线的突变无法正确的表现
硬边位置的突变法线被纹理采样进行滤波后,产生了一个过渡的中间值,而低模平面内部片元的切线空间Z+方向是处处平行一致的,因而过渡的中间值,恰好是被切角后所表现出的法线方向
这里我们需要要正确的理解和预估切角效应是否符合预期
其实切角效应在漫反射时的表现还算比较正常,事实上我们也经常将高模上带硬边的凹槽/突起烘焙入低模中
上面的例子,仅针对漫反射其实没有太大的影响,不贴脸细看也基本看不出破绽
一个砖墙硬边突变烘焙入平面的例子,同样针对漫反射效果没有过大破绽
当然如果非要贴脸,也还是能看出来切角边的光影明显不融合
但在高光效果,或是一些反射效果时,切角效应会带来较大的影响
若想避免切角效应,正常表现出高模的硬边
一种方法是我们直接在低模上保留完全一致的硬边,这种情况低模的硬边UV拆不拆是无所谓的,因为算出来左右平面都是背景色
图中低模本身就具有与高模相同的硬边,并且左右平面法向处处一致
则无论UV拆开与否,都能正确表现高模的硬边
另一种方法,针对高模硬边被烘焙入低模平面内时,我们需要在对应高模硬边的地方保留结构线并拆开UV
我们可以基于高模来拓扑低模,在硬边的部分保留结构线并拆开UV
烘焙得到这样的法线贴图
最终应用到unity的效果,高模的硬边被正确的表现
结合2.2.2节,其实这里是通过拆解UV来创造顶点细分,进而通过细分出的顶点,来承载高模硬边处法线的突变,从而正确表现硬边
———2.2.5.4 卷错
有时候我们会在低模硬边处看到这样的效果,如同被卷曲了一样
这种情况在漫反射下都会表现出很大的问题,是我们必须避免的情况,我将其称之为“卷错”
明显另一边的硬边是正常的,而红色箭头一侧本应是平滑相接,但却一侧发黑另一侧发亮,像是被卷曲了一样
发生卷错的原有是由于低模硬边处没有拆开UV,并在法线计算时,没有保证与高模硬边左右平面法线处处一致,从而在法线突变的高频位置,受到纹理采样的滤波影响,被强制统一了错误的过渡法线方向
可以这么理解,低模硬边处左右平面切线空间Z+方向是存在差异的,当进行烘焙时,硬边左侧的法线基于左边的切线空间,而右边的法线基于右边的切线空间,因而中间相接位置必然会有高频的突变
但纹理采样时,滤波生成的过渡效果,其实只考虑法线结果的差异进行过渡,没有考虑硬边左右切线空间的不同,从而产生的法线过渡结果,既不能让硬边左边表现正确,也不能让硬边右边表现正确
有无突变卷错
发生在低模硬边左右一侧法线呈现背景色,一侧为非背景色时
由于纹理采样时的过渡效果,导致两侧法线结果在中间硬边的地方产生过渡,生成了错误的法线
例如2.2.4.3中的例子
内部平面呈背景色,外圈对应高模切角弧面的平面呈非背景色,两者交接的地方存在有无突变
从而这一圈硬边就发生了卷错
因而针对有无突变,我们需要正确的预估,通过拆开UV,形成顶点细分来承载法线的突变
阻止纹理采样时错误的过渡
曲面卷错
卷错的另一种情况是低模硬边位于高模的曲面/软边内部(硬边两侧法线都是非背景色)
尤其是四边形隐线硬边的情况,经常在不经意的情况下导致出错
例如图中四边形对应高模的切角弧面
但四边形内部的隐线呈现硬边
可以看到计算出的法线也有突变(由于硬边左右切线空间基准不一致)
最终导致卷错
针对曲面卷错的情况,我们可以通过平滑组的设置来消除承载高模曲面的低模面内硬边,也可以通过拆开UV来解决
———2.2.5.5 接缝效应
2.2.5.4中提到的曲面卷错,如果承载高模曲面的低模平面内有硬边,且不拆开UV那么就会发生卷错
因此针对这种情况,要么拆开硬边UV,要么就通过平滑组消除硬边,来防止卷错
不过其实最好的方法是通过平滑组消除硬边,并且消除后的软边结构线UV拆不拆也是无所谓的(详见2.3中的例子最后手排UV时)
针对于拆开UV保留硬边的情况,受计算机浮点运算不精确的影响,一些情况下会表现出接缝破绽
例如高模的这一圆滑折角处
低模没有通过平滑组设置来消除硬边
当然为了阻止卷错,不消除硬边我们就必须拆开UV
最终效果,仍能隐约看见一条不自然的接缝
这是由于保留硬边,即保留了硬边的顶点细分,从而左右平面切线空间的朝向并不一致,因此法线运算的基准有一定的差异,虽然防止了卷错的发生,但由于计算机浮点运算不精确,导致最后拼起来的时候,会有一定的差异,无法形成平滑的曲面
我将其称之为“接缝效应”
——2.2.6 总结
针对低模硬边
—如果低模硬边与高模硬边,左右两平面法线处处一致,拆不拆低模的硬边UV就无所谓,因为算出来都是背景色即不改变法向(2.2.4.1)
—如果不能保证左右法线完全一致,法线计算结果一边有东西一边没有,或是两边都有东西
尤其是针对不经意的有无突变(2.2.4.3),必须拆开UV
或是承载高模曲面的低模四边形平面内的隐线必须拆开UV或者通过平滑组打掉硬边,防止出现卷错(2.2.5.4)
针对高模硬边
—可以被放入低模的平面内,在漫反射时仍能大致正确表现,但会受到切角效应(2.2.5.3)的影响,在高光反射/镜面反射时可能存在较大破绽
—如果想完美表现高模硬边,低模本身就具有完全相同的硬边(左右平面各个位置法向完全一致)
或是低模在对应的硬边处有相同的结构线并通过拆开UV创造顶点细分来承载硬边法线的突变(2.2.5.3节后)
针对高模软边
—高模软边应被烘焙进低模的平面中,且需要通过平滑组设置消除低模承载软边平面内的硬边防止卷错(2.2.5.4),被消除的低模硬边UV是否拆除无所谓(详见2.3中的例子最后手排UV时),如果不消除就必须拆UV防止卷错,但仍存在接缝效应的问题(2.2.5.5)
—注意高模软边与平面相接,对应低模连续承载平面可能出现的有无突变(2.2.4.3),以及带来的卷错(2.2.5.4)问题,低模需要拆开对应的UV
—2.3 一个实例
——2.3.1 基于高模拓扑低模
首先我们通过Part1中的环线切角方法,制作了一个复杂多边形的切角高模,并基于高模拓扑了低模
这里肯定是要基于高模拓扑低模的,直接使用切角前的低模很多地方是根本对不上的,比如切角软边的地方切角前就是一条硬边结构线,无法形成低模平面承载高模曲面的关系
图中圈出的几个角做了圆滑处理,我们希望最后低模对应的地方呈现圆滑,其它折角呈现硬边
几个圆滑折角通过平滑组设置消除硬边,需要表现硬折角的地方则保留硬边,从而这些边都是拆不拆UV无所谓的
圆滑凹角消除硬边
其它硬边均保留
——2.3.2 不要低模全软边
针对一些平面/硬边较多的机械类的模型不要上全软
应当是仅针对高模软边/弧面来消除低模承载平面内的硬边,并针对需要正确表现的,烘焙入低模平面部分的高模硬边,在低模平面中保留结构线
低模与高模本就一致的硬边应当保留
这样我们必须要拆的UV就只有有无突变的地方,以及平面中保留的对应高模硬边的结构线
从而大大提升拆解UV时的速度,和灵活性(保留的硬边,消除的硬边拆不拆无所谓),有利于法线UV和漫反射UV的统一
如果我们进行了低模全软边平滑,虽然好处是可以随意的拆UV不会发生卷错,但是高模所有硬边的地方低模都得拆开结构线
一个不经意的疏漏,结构线没拆UV,高模硬边就被切角扭曲了。把那些本身就和高模一致的硬边平滑掉(取消了基于法线的顶点细分),又要再把UV拆开创造出顶点细分承载硬边法线突变,这种做法真的有些微妙…
并且低模全软,另一个非常大的问题是
如图低模选中平面本身应当是与高模法线处处一致的
但是由于全软的扭曲,这里法线算出来出现大片的非背景色,为了将扭曲掉的平面,法线重新归为平面
其实这种法线贴上去可能也没问题
但法线贴图的空间利用率不高,这里我们需要重点表现的其实只有切角圆滑的地方,而这种法线大片的地方都是为纠正被全软扭曲了的平面
我们将在后面介绍一种手排UV的方法,利用保留的一致硬边左右平面计算结果为背景色,重点扩大我们需要表现的细节部分的法线面积,从而有效的消除噪点
——2.3.3 拆解UV
好的关于3dsMax UV展开的具体技法这里就不过多赘述了,有兴趣的话可以看看这篇文章
添加UVW展开,先选中所有平面,使用平面投影,从而消除预设接缝
法线UV这种强调UV接缝的拆解,自然我们选择剥离方法,这里我们必须要拆的UV如上图,是两圈承载高模切角部分平面的UV,都是为了防止有无突变导致的卷错
剩下的拆解就很随意了,都是拆不拆无所谓的,这里我们先拆下来再说
——2.3.4 手排UV消除噪点
我们先是烘焙出了图中的法线,可以看到空间利用率不高,大片的呈现背景色,需要重点表现的切角软边部分只占了很小
Unity中未贴法线的效果
贴了法线的效果,平滑效果还算正确,但是有很大的噪点
另一个问题是这里的面数有点少,转折复杂,导致效果出现扭曲
这一次我们保留了更多的结构线
我们对UV做出了调整,依托于我们的策略,其它结构线都是拆不拆无所谓的
这里圆滑角内的硬边通过平滑组消除防止卷错,因而拆不拆UV是无所谓的,这里我们希望尽可能的扩大环圈平面占法线纹理的面积,因而进行了更加细致的拆分
如图,尽可能的放大环圈平面所占的面积,而对于选中的这些法线处处一致,算出来全是背景色的平面,只要最后能塞进去就行了
通过手排UV,我们就得到了下图的法线烘焙效果,有细节的曲面部分尽可能的占用更大的面积
Unity中的效果,可以看到十分的细腻,噪点得到了有效的消除
之前扭曲掉的角也被很好的表现了出来
/*
好的其实起因就是监视官突然扔给我了一张枪械的概念设计图,并问我复杂结构怎么正确切角并烘焙法线。之前对于Max的切角也就做点四四方方的桌子的时候会切,对于赘余拓扑完全不知道怎么避免,对于Max的法线烘焙也是知其一不知其二
花了一晚上的时间才摸索出正确的方法,然后反手被追问各种错了的地方如何解释
于是便有了这篇文章,同样在写的过程中也出现了各种各样问题,到今天正好拖了一整周的时间才算是有了一个较好的总结
当然现在觉得还是有些地方讲的不是很清楚,可能以后有了更深的理解还会翻过来修改
总之鄙人学术不精,文章难免有所疏漏
还望各路神仙海涵
请登录之后再进行评论