实验笔记:UV 表情(UV Morph)的应用

本文由 简悦 SimpRead 转码, 原文地址 www.bilibili.com

作者:岸田夏海MK2

拆龙约里的大头娃娃时看到贴图就想到了 UV 表情,于是做了一点点研究。

拆龙约里的大头娃娃时看到贴图就想到了 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 有圣诞莉莉,龙约也有圣诞莉莉。

真好,我一个都抽不到。

GIF

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

评论