实验笔记 番外:阴影通道与贴图叠加
本文由 简悦 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,说实话,马娘那教科书级的素材真的让人受益匪浅。
希望以后还能有机会用上这篇的内容吧。