玩过游戏的应该知道,换装分为头和身体,先看几个身体的换装
简单比较可以得出:
1,身体模型没有变化
2,衣服裤子分为很多部分,每个部分能指定颜色或者贴图
3,最后一张的手臂贴图有变化,并且全身大部分都有反光
接着挂上GPA看看
Salvado's Duds
右边是渲染身体用的六张图,分别是
0:法线
1:“区域权重",用于区分身体的不同部分
2:未知,每个换装都有同样的图,也许是用于动态效果
3:diffuse,
4:未知,同2
5:未知,可能只是提供个颜色
比较重要的是Diffuse和区域权重,放大看一下
里面包含前身(颠倒的),后背(颠倒的),一个手臂(手臂是对称的),左腿、右腿等。衣服裤子基本都是灰色的,估计是用于和其他颜色混合。
“区域权重”图和diffuse图是有对应关系的,把diffuse图水平方向缩小0.5倍也就是“区域权重”图的一半了,估计是为了节省资源,不然可以分成2张,也说明权重图的精度降低一半后影响不大。与Diffuse用同一套uv,(0.5*u, v)用于sample左侧,(0.5+0.5*u, v)用于sample右侧。权重图中任意一个像素只有RGB中的一个分量,剩下都是0。
先看右侧权重图的RGB分别表示哪些区域,对照最终效果,R表示裤子(不包含弹夹和绑腿),G表示背带和袖子边缘,B表示上身衣服和绑腿。黑色部分使用了diffuse中的颜色。
再看左侧权重图,当一个区域同时被左侧标记了全绿或全红时就会完全独立于右侧区域,比如袖子和背带边缘,胸口的漏洞。颜色越浅则越受右侧权重图影响,全黑则完全受右侧影响。
分析一下可以猜出,每个颜色区域都可以用来指定一个颜色(或者贴图,后面其他换装再说),左侧权重优于右侧。
假设Difffuse是D,WL是左侧权重,WR是右侧权重,C1--CN是材质颜色参数
WR_SUM = Clamp01(WR.R + WR.G + WR.B) 是0或1的值,用于选择
WL_SUM = Clamp01(WL.R + WL.G + WL.B) 是0到1的值,用于过渡
RC = WR.R*C1 + WR.G*C2 + WR.B*C3 是根据右侧权重混合后的颜色,3选一
LC = WL.R*C4 + WL.G*C5 是左侧权重混合颜色,2选一
一个像素的颜色的公式大概是
D*(1-WR_SUM) + D*WR_SUM*(RC*(1-WL_SUM) + WL_SUM*LC)
Pandoran Legend
这套换装的前5张图跟salvado's duds完全一样,新增了2张贴图,第六张是
上半身的红黄斜条就是这张图,图里是垂直的。这里应该是用的第二套uv来sample整张图,估计是在shader里旋转了uv所以在身上就是斜条了。最后一张并非全白图,而是带alpha的
borderlands字样只有前身有,后身没有,而且字样贴图本身就是斜的,并不像第六张那样是垂直的,所以应该用的第三套uv来sample的字样图。
我之前做足球游戏,10个人的队服是一样的,但是号码不一样,为了节省drawcall就用了单独的uv来叠加号码。
把之前公式里的某些颜色换成sample贴图就可以把贴图应用到身体区域了。
Classiest Man Alive
前五张也是一样的图,第六张图应用到了裤子上,应该也是第二套uv,并且用tiling做重复的。最后一张图应用到前身,但比borderlands字样那张小,估计shader里调过tiling的。估计第二套uv的展开方式是前身、后身、左右腿各自都单独占0-1的空间,各部分在uv2上是有重复区域的。UV3估计只有前身的一块是0-1,其他部位都在0-1之外。
Skin of Steel
这套换的图比较多,权重、diffuse也变了,为了让手臂手指也都变成钢铁反光,最后一张图估计是用uv2来sample的。把几张图贴出来也就能猜出大概了。
总结
身体在不换模型的情况下
1,用区域权重图表示了身体各部分,可以分别指定颜色或贴图。
2,用uv2将一个小图应用到一个权重区域上,用uv3将某个图只映射到一小块模型区域。