
拆龙约里的大头娃娃时看到贴图就想到了UV表情,于是做了一点点研究。在自己摸索的时候参考了404佬的那个视频,无奈视频没声音也没有详细讲解,那就写个补充笔记吧。

如有谬误,欢迎私信...话是这么说,现在真的还会有人用UV表情这玩意么?
插段科普用的废话:“UV”这个词是怎么来的?

“The application of a texture in the UV space related to the effect in 3D.”,摘自英文维基上的“UV mapping”条目
众所周知,三维物体是由三轴坐标表示的,也就是p(x,y,z),而贴图映射到二维平面后,只剩下两个坐标了,为了和xyz区分开来,就取了另两个字母,也就是p(u,v)
说白了,就是给贴图上个平面坐标系,
而UV表情也就代表了“某物体在以大图像的其中一块作为贴图时的位置的改变”
也就是说,使材质贴图进行偏移,就是UV morph的作用了,以此就可以进行诸如表情、口型或者部分贴图的切换与位移。
科普结束,开始正文。
提一下UV表情的概念,不想看的直接跳到下一部分吧。
要说明的一点是,UV表情≠切换材质
后者可能涉及多材质与多贴图,表情的变化通过隐藏原脸部材质再显示对应表情材质来实现,而这个方法反而会经常用到,因为不少游戏中具有形态键表情的模型依然要实现例如“( O O )”或者“( > < )”的表情时,基本都会选择直接套个新材质上去。
就拿之前刚做的KF3的薮猫酱举例,

正常情况:

隐藏眼部相关材质:

再显示对应表情材质:

只要两步。
再来看看这次说的UV表情:
单材质,单贴图,表情的变化通过修改应用于材质上的贴图的位置来实现。而在游戏里就表现为序列帧——对,说的就是你,崩3。
如图所示,这是琪亚娜模型上给“Eye_L”和“Eye_R”两个材质用的表情贴图中的一张:

将其根据个体分割为十六份。

线是手画的,表示一下意思即可
可以理解为,需要某个表情的时候将对应那一小块的贴图贴给眼部材质上就行了:

因此,在崩3里实现一次眨眼=连续四次刷新贴图(睁眼→半闭眼→闭眼→半闭眼→睁眼),如果在Unity里尝试着拿Odin插件写一串Sprite[]序列还原表情的时候应该会对这个相当清楚,口型也是如此,所以这就是崩3“贴图表情”的原因。
而当看到这种多个表情集合存在于一张或几张贴图上,并且贴图材质用了其中一部分的情况时,有三条路可以走:
1.切分贴图并对应用到克隆材质上(常用方法,虽然累了点,但修起来也方便)
2.复制材质并重贴贴图
3.对单材质做UV-mapping,也就是这次要讲的东西
2.1.懒人版-用PE自动切割四等分/十六等分UV表情
注:以下的思路可以应用到任何可以被大卸四块/八块/十六块或者其他规则形状(包括不为正方形的矩形)的贴图上。
这次作为范例的模型是龙约里刚出一阵子的莉莉,本次头图里用的也是这只的模型。

看看(只有一张的)贴图,可以看到几个表情都在一张贴图里并且被十六等分:

并且面部材质目前正在使用其中一部分作为贴图:

这个时候就要UV表情上场了。
PmxView窗口—“編集”—“UV表情作成”—“UVモーフ作成”:

选中需要做UV表情的同一材质的顶点,不能同时选择多个材质上的顶点,依然有需求的话可以对使用同一贴图的材质进行合并。
这次以眼部材质为例,选中顶点:

然后选需要做UV的贴图,一般直接点“←材質Tex”自动选用当前材质的贴图(也就是上面那张),并在左侧“画像格数”里选好四等分或是十六等分:

旁边提供了对应分割的预览,可以确认一下切完后其中是否包含自己需要的那块:

比如这样
没问题的话,看向下面三个选项框:

“选择顶点的初期UV值设定”:针对未进行贴图拆分的材质使用,比如这种——

在该选项打勾即可重设该材质的使用贴图位置,而对于已经应用好切分贴图的材质(如本例子),则不需要打勾。
“对于空Morph名不进行表情创建”:在UV界面的“モーフ名”下面的空格里,可以通过换行来预先设定接下来创建的一系列UV morph的名字。对于“十六等分”,会创建15个UV表情;对于“四等分”,会创建3个UV表情。而勾选这个会使在切分时只处理设定了名称的UV表情,而跳过留空的部分,比起手动筛选,不如全部切好再把不需要的删掉,建议不勾。如果不选择该选项并且命名栏依然留空的话,那么会自动以UVSkinXX进行命名。
“统合”:勾了之后最后会多出来一个囊括所有UV表情的组表情,没卵用,建议不勾。
选项都设置好后,“UVモーフ作成”,开冲:

然后就能在TransformView里看到对应的效果了。

2.2.进阶版-uv表情的原理
本部分适合想自己做uv,或者打算用uv做出其他效果的人,阅读前可能需要对贴图作用于模型上的原理有一定了解。
点开以第一部分中方法切好的UV表情,可以看到右边类似顶点表情那样出现了一个两维的位移数据,这个就是(u, v):

那如何决定位移的数据呢?
为了说明这个问题,这里祭出一张坐标轴,并且把一张假设需要处理的大贴图放上去:

就像开头说的那样,u和v分别代表着横轴和纵轴,并且对于正方形的贴图,其单位长度为1。
(长方形的贴图同理,尽管长度不同但单位长度都为1)
接下来,假设某个材质在这张大贴图上使用了一小块作为自身默认的贴图(参考上面龙约的例子),且使用部分为将大贴图十六等分后最右下角的一块,在图上标记为黄框并命名为“表情1”:

该材质的顶点贴图坐标此时可以看做集合u∈(0, 0.25) v∈(,0 0.25)
再假设在大贴图上存在另外两个表情“表情2”和“表情3”,也处在十六等分的对应位置上:

如果要做从“表情1”到“表情2”的UV表情,那么就要把黄框沿v轴平移“0.25”个单位:

位移量为:u=0 v=0.25
因此在表情界面的框里填上(0, 0.25):

U轴同理,如果从“表情1”位移到“表情3”,那么位移就是(0.75, 0.75)
逆向移动时加上负号即可。
接下来说说uv值超过1的情况。
对于超过单位长度1的部分,会直接从贴图的另一侧绕回来:

也就是说,只要小数点后的数字相同,UV表情能达成的效果是相同的。但如果uv值高了,会看到材质上的贴图会随着UV表情的滑条绕上好几圈才会到正确的位置。
而当材质使用的是一整张贴图时,通过大于1的位移值的UV表情,可以造成贴图自旋转的效果,前面做的血舞的旋转就是用这一原理做出来的:

关于UV表情能用到且需要讲解的功能基本就那么多了,至于那个画像拼合功能,也用不着在PE里做。
用UV表情的游戏有不少,不过大部分都是有一定年头的游戏——比如动森,比如口袋妖怪,比如3.9版本前的崩3。

PM系改模的时候就用上了UV(顺带这个超级不可思议迷宫版本的小猫怪在我dA上有配布)
而PM正作系列,直到去皮/去伊/剑盾,以及作为手机游戏的Pokémon Masters,NPC的表情才开始部分应用了骨骼表情或者形态键表情。
现在用得上UV的情况基本也就是这一小部分的游戏改模了,所以真的会有人用得到么...
本次头图使用模型:龙约里的普通版莉莉&季限星龙祭莉莉,以及各自的首选彩武(淤美豆奴&久那斗),大概会在圣诞节时被我丢到dA上配布。
借物:ゆきやまちほーby キャベツ鉢
キラキラエフェクト by ビームマンP & 蒼すずめ
先来两张龙约和GBF里莉莉的立绘:

[氷晶宮の姫]リリィ

[氷国の希望]リリィ
然后GBF有圣诞莉莉,龙约也有圣诞莉莉。
真好,我一个都抽不到。

龙约这游戏本身也是,明明福利发的比cy家的那几个游戏还多,随随便便就能下井,甚至还支持中文在内的多国语言,但就是没什么人玩...