实验笔记 番外:阴影通道与贴图叠加

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

作者:岸田夏海MK2

记录下捣鼓马娘改模时的简易贴图分析与处理流程,以及一些发散出的想法。

记录下捣鼓马娘改模时的简易贴图分析与处理流程,以及一些发散出的想法。

不能保证看的懂,但退一万步说,给自己留个档也是好的。

-1. 太长不看版

阴影:把辅助贴图(base)的红色通道分离出来,作为 alpha 通道视情况锐化后,叠加给主贴图(diff)对应的阴影贴图(shad_c)并将其应用到复制的身体材质上,从而进行后续调色。

高光:分离辅助贴图(base)的绿色通道,并作为 alpha 通道贴图对目标高光颜色(一般是白色)进行蒙版。

如果看到只由三原色分图层构成的混色贴图,可以思考一下会不会是张辅助贴图。

0. 前言

在之前的某个视频里,收到了 @Croakfang 佬的一条建议:

光影贴图?研究马娘改模时确实发现在主颜色贴图外还有些其他贴图,但当时并不知道怎么用——然后看到 @LC_ilmlp 把马娘的 shader 在 unity 里进行了汇编与逆向。

**用解包的方式还原渲染,尊い。**于是没怎么接触过 unity 的自己也对游戏内 shader 的原理以及别人家的**重炮**有多可爱有了粗浅的理解。

结合另一篇同样高技术力的 GBVS 模型贴图分析 / 还原流程:

把 unity/UE4 内用算法实现的阴影贴图搬进 MMD?显然不可能。

不过,啊,至少可以依葫芦画瓢的应用一下思路——也就是编辑贴图和 MME。

本篇文章的**几乎全部内容**都将基于上述专栏中逆向出的贴图叠加方式。虽说是班门弄斧的拙劣模仿,但如果有更好的替代 / 改良方案,还请不吝赐教。

1. 概述 & 贴图整理

开始之前,先简单回顾下 Cygame Tech Conference 关于马娘那场中提到的 “模型与贴图构成”(时间轴约 8:20 处):

好歌剧(CV:徳井大爷)

从上到下分别为:

Color Map - Diffuse/Shadow Color

颜色贴图 - 扩散光 / 阴影色

Ctrl Map - Shadow/Specular/Cut-off/Environment/Rim

控制贴图 - 阴影通道 / 反射光 / 透明通道 / 环境光 / 轮廓光

这或许也是(在模型上集齐了全部贴图类型的)好歌剧被选作这一节的讲座目标的原因吧。

关于这些贴图的具体用处与 “分解方式”,同样也请移步上一节 LC_ilmlp 的系列专栏,里面有非常详尽的记述。

概括说来,Color Map 分为基本贴图(扩散光)与阴影贴图:

左:tex_bdy1015_00_diff.png  右:tex_bdy1015_00_shad_c.png

而 Ctrl Map 在分离了 RGB 通道后可以得到具有各种功能的 “通道贴图”:

左:tex_bdy1015_00_base.png  右:tex_bdy1015_00_ctrl.png

回到这边,以身体模型为例,对照一下现有的贴图:

同样是两张 Color Map 与两张 Ctrl Map(虽然 Ctrl Map 只会用到那张 base 贴图)。头发 / 脸部 / 尾巴也各有一套,在编辑贴图时最好一并处理。

这回的范例模型是**乌拉拉**,毕竟另外**两****只**已经在上一回出过场了。

实验开始。

2. 扩散光(Diffuse)

先从最基本的贴图开始:

和以往一样,把左边的扩散光贴图放模型上,大致凹个 pose 看看:

对比一下游戏里的效果:

抛开调色,还缺了点什么?

上衣拉链全黑,头发没有高光,缺少阴影,etc.

接下来就需要想个办法将这些东西逐一从辅助贴图里补到模型上。

3. 镂空 / 透明通道(Cut-Off)

参照第一节中的贴图分离方式,将 base 贴图的蓝通道分离出来:

注意:马娘(以及大部分手游)的颜色贴图尺寸为 1024*1024,但这里身体模型的辅助贴图却是 2048*2048,进行蒙版前请比较并调节大小。

将透明通道**反色后**作为 alpha 通道叠到颜色贴图上:

注意右图中变为透明的部分

往身体材质上应用一下新的带有镂空部分的贴图:

于是拉链不透明的问题解决了。

4. 反射光(Specular)

将头发 base 贴图的绿通道分离出来,就是头发的高光部分了。

将分离出的贴图作为 alpha 通道,蒙版到预期的高光颜色上(也就是白色):

**新复制一份**头发材质(复制材质,而不是直接把高光叠加到颜色贴图上的原因后面再说),并应用上述的高光贴图:

不止头发,只要是材质中 “高光 / 反光” 的部分,都会在 base 的绿通道上存在对应内容,在金属类材质(以及雨天专用的 wet 类漫反射贴图)上尤其明显。

顺带一提,“发光” 类材质的发光区域与颜色,不是由 base 贴图绿通道,而是由关键字为 “emi”(emit)的额外贴图控制——比如换皮帝宝的羽毛,波旁的 LED 灯,以及微光飞驹的挂饰。

高光完成,于是现在缺的只有阴影了。

5. 阴影通道(Shade)

在处理阴影贴图之前,先理解一下关于阴影颜色的应用方式。

回到之前 LC_ilmlp 的专栏中,第 4.2 章第 15 节 “暗面贴图替换”

其中提到了:

说得再简单一点,就是把 Color Map 中的另一张,也就是 shadow color 贴图,叠加一个阴影通道后,覆盖到原贴图(diffuse)上从而形成 “特定区域变暗” 的状态。

以此为基准,分离出 base 贴图的红色通道:

反相,然后叠给 shad_c 贴图:

得到一张被 “镂空” 的阴影贴图:

脸部,头发,和尾巴同理:

然后把这一堆阴影贴图往模型上的复制材质上一套:

某些区域因为阴影贴图的叠加而变暗了,不过做到这里仍然没完。

6. 通道贴图的羽化 / 锐化

回头再对比一下游戏里的效果(右侧),会发现阴影是 “有棱有角” 的:

移步至 LC_ilmlp 的专栏中,第 4.1 章第 12 节 “获得阴影程度”

其中提到了:

因此可以选择对贴图进行锐化。虽说无法直接照抄算式的图像处理方法,但 PS 里有一个类似功能,那就是 “对之前分离出的通道调节对比度”,下图右侧就是将对比度设为 + 80 的效果:

继续将其叠到 shad_c 贴图上,右图为改过对比度的阴影通道产生的结果:

经过通道的调节,阴影贴图的边缘比起原先的左图很明显锐利了不少。

将其用到模型上:

于是现在阴影有了相对明显的区域。

7. 阴影调节

回到上文第 4 节中留下的问题:为什么不把通道(base)处理过的阴影贴图(shad_c)直接叠到主贴图(diff)上,而是复制了材质后再应用贴图?

在之前的效果图中,除了衣服和膝盖两个部位以外,其他区域的阴影似乎并不明显——

那如果把阴影加深点呢?

想必不用多说什么了。阴影贴图涉及的地方其实相当多:尾巴,头发,身体,皮肤,内阴影(头发,衣服,眉毛,脖子等),甚至还有上半的眼白。

这就是阴影贴图最重要的功能:通过阴影通道 / 贴图的调色与覆盖,可以很容易的控制固定区域阴影的样式。无论是主界面的淡色阴影,还是 Live 时的深色阴影,都可以借由这种方式来完成,通过反射光(specular)贴图控制高光效果也是如此。

以上,(在 MMD 里用得着的那部分)马娘贴图的解析到此结束。

8. 后期处理

剩下的用勇气 MME 去补足!

不过需要解决的也就是 toon、边缘光以及画面调色了,能看到这的同好,对于渲染的理解想必比我强了十万甚至九万倍,在此便不作详述。

最后,给阴影贴图调个色,加上和阴影颜色类似的 Toon,再补个阴影锐化用的 AlternativeFull,和产生边缘光的 PostRimLighting——本次专栏的 header 图就是结果了

没法说有多好,但作为 MMD 而言,能提取的东西或许已经到了尽头。

她真可爱,她真迷人,她真有趣. jpg

至于回头发现之前研究过的其他游戏也有需要补充的辅助贴图,那就是后话了。

本期专栏借物 & 参考

头图借物

Stage:ステップライトステージ by Cyalon

MME:AlternativeFull,AutoLuminous4,Diffusion,PostRimLighting2D,XDOF

↑这也是之前视频中每次必定会用到的 MME

感谢 LC_ilmlp 与_夏挽秋两位的 shader 逆向专栏,以及 LC_ilmlp 与 Croakfang 在 shader / 贴图通道处理上的宝贵意见与参考。

全部素材 Copyright©Cygames,说实话,马娘那教科书级的素材真的让人受益匪浅。

希望以后还能有机会用上这篇的内容吧。

评论