【露西亚-深红之渊】记录还原战双卡通渲染的尝试与思路(施工中)

【露西亚-深红之渊】记录还原战双卡通渲染的尝试与思路(施工中),第1张

这里写目录标题
    • 前言
    • 贴图简介
    • 描边
    • 漫反射
    • 镜面反射
    • 边缘光
    • PBR结合
    • 一些Tricky的小细节
      • 飘眉效果
    • 未解决的问题、想法

前言

仅供个人记录和学习、交流,侵删

贴图简介

战双的模型贴图除了官方给的MMD模型就有的Base Color和法线贴图以外,还可能会有一张LightMap(RGB),一张PBRMap(RGBA),一张Ramp贴图(类似LUT)。



Ramp的话,白毛只有一张头发的,而且只给了暗部的颜色。


其他人物大概率都会有一张皮肤的贴图来模拟3S效果(心疼两秒)。


剩下两张贴图各通道的作用,看过几篇讲战双渲染的说法不一,我自己做的时候也是边参考别人的文章边对着UV和贴图还有游戏画面比较连猜带蒙。


可能每个角色的shader都是定制的,所以这篇文章的贴图介绍也只针对露西亚——深红之渊 泛用式。



先看看这张绿乎乎的xxxAO.png

R:高光范围
G:RampOffset
B:高光强度
解释下G通道,就是对 从亮部变成暗部的那个阈值(下面会讲到) 进行偏移,(某种程度上也可以理解成AO),像铭牌后面的常暗、头发暗部的形状,都是这么做的。




再看看这张xxxPBR.png


啊喂,怎么这么糊啊?
是的,你没看错,这张图是32x32的。



在PS里面打开,放大到能看清楚,已经可以看见好大一块像素格子了。



当时就被震惊到了:还能这么省?
R:粗糙度
G:金属度
B:高光遮罩(用来区分是否PBR及其强度)
A:高光强度、材质区分
注意需要PBR的部分的镜面反射与普通的镜面反射相互独立

描边

最普通的BackFacing(法线外扩),其他文章已介绍得十分详尽故不赘述。


漫反射 镜面反射 边缘光

各部分的边缘光思路不一样,部分也加入了我自己的想法所以并没有完全照着游戏来hhh
先讲肉

我希望通过边缘光来实现皮肤次表面散射效果(SSS)。



关于3S效果,网上有许多大佬给出更加正确、完善的解释和做法。


我这里只是用最简单的方法来模拟最基本的3S效果。



先来看看日常生活中的次表面散射

两张图都是我拿着手机手电筒在比较近的距离照我的手,区别是一个是从后面照一个是从前面照
可以看到当有强光从后方射来时,肉比较薄的部分(即边缘)更容易观察到散射现象,即变亮变红。



从前方射来时,明暗交界线处在逐渐变暗的同时也会有饱和度加深的现象产生。



在刚才的漫反射部分,明暗交界线已经柔化过了,所以后者可以姑且不管
那前者就是菲涅尔乘上暗部,再smooth一下

然后是脸

二次元里经常在逆光的时候在面部边缘画一条比较硬的明部,来让画面更加通透。



实现和上面差不多,不过注意这里就不要给太多的柔化了,或者也可以直接clamp一下。



头发也会这么画,但鉴于效果不佳且游戏里本来也没有,所以想了想还是没加上去。


手:

照样是比较硬的边缘光,不过这里不是提亮而是直接变白
不知道为什么这条边缘光游戏里手臂上没有,为了保证材质一致所以我给手臂也加上了

衣服、绑腿等布料部分不加边缘光

PBR结合

其实就是把Cook-Torrance的BRDF拿过来用一用,光照模型已经在外面的.cginc写好了,直接把参数写进去就好

一些Tricky的小细节 飘眉效果


人物的头发下面可以把眉毛和眼睛显示出来,有透明度混合,而且并不是所有头发都是透的!左眼不透,右眼正前方那条毛比较透,然后转个角度让其他毛挡在右眼前面的时候又渐渐变得不透,应该是想做成薄的头发能透过头发看到眼睛和眉毛,厚的头发就只能看见头发。


神奇的是,头发和脸是仅有的有顶点色的部件,猜测和飘眉效果有关系






好吧我想了好久都没想明白怎么把算式写得像游戏里的一样,或许还计算了头发到眼睛(眉毛)的距离,距离越远混合中头发的比例越高

于是我自己画了张遮罩扔到了头发的Lightmap里,通过遮罩的数值来控制头发在哪里可以产生飘眉效果。


反正R和B的通道是空的,不用白不用。




下面就是实现了,方法很简单,正常的stencil加一个Pass来做透明的效果就好了
首先我先在ddc里面给右眼的眉毛单独分了个材质球,要透过的地方就给新的材质,其他部分比如说脸啥的该正常绘制就正常绘制,头发和要透过的地方(眉眼)在它们前面画好

先把眉毛(眼睛)正常画出来

然后正常画后面没有眉毛(眼睛)的头发

最后绘制后面有眉毛(眼睛)的头发并透明混合

未解决的问题、想法

关于贴图参数:
在调各种贴图的参数的时候,还花了蛮多时间的,或许美术在画各种高光贴图粗糙度图的时候只是在表达一种材质之间参数的大小关系,而并没有(那张粗糙度贴图我发现仅仅靠乘个倍数是调不出来的,我都在查sp的调色阶是怎么实现的了)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/563691.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存