忽然想到——No.2
好吧,还是SSS的东西。这次是法线贴图相关物。在最早的计划(CNB)中就试图用扭曲法线的方法来解决打肿脸的问题。(这里所谓扭曲法线,是指用非常规的normal map来扰动法线。) 不过收效甚微,嘛多半是方法不太对吧。而最近将SSS和原来扭曲法线的方法结合起来口胡,说不定可以得到个好点的效果orz。
以下的东西进过少量验证,还是不怎么可靠。
之前想到的方法仅仅是直接上法线贴图,结果是,之前“打肿脸”的的光照角度OK了,但是其他光照角度又“打肿脸”了。不过现在用法线贴图,是为了一定程度的模拟SSS的一些特征。在材质空间扩散这种模拟SSS的做法中,使用模糊来模拟光线在材质中的散射,而模糊这种做法,实质上降低了光照变化的频率。因此猜想,如果有其他方法可以降低这个频率的话,是否也可以一定程度上达到SSS的效果呢?
法线贴图一般用来添加表面细节,但是用作其他的目的也不错来着。比如用来扰动法线是表面看起来更加平滑(即是说,降低光照变化频率)。不过这个贴图该怎么做呢…烘焙就可以了。
提出以下两个方法制作这样的贴图:
1、高模(如果有)向低模烘焙法线,不过不是烘焙到常见的Tangent空间,而是烘焙到Local空间。接着在PS或者其他软件里面模糊处理这张法线贴图。最后用软件(比如万能的xNormal)把贴图从local空间转换到Tangent空间。
2、另外建立一个高模,修改这个高模降低其表面变化频率。比如,一张人脸,可以把鼻子、嘴巴都弄平把颧骨附近relax一下。然后用这个高模向低模烘焙法线贴图。
ok,贴图做好了,但是该怎么用呢。一开始,我直接将烘焙出的法线贴图(用第一种方法得到的贴图)用在模型上,结果是
…虽然看起来平滑了,但是有些想要平滑的地方没有平滑(比如嘴唇下边的较暗部分),某些不想平滑的地方被平滑掉了。而且,鼻子和嘴巴处出现黑块儿。黑块儿出现的原因是,从几何结构上来说那块地方应该是处于shadow之中。效果不理想。于是一次性放弃第一种烘焙材质的方法(可控性低)和上面的法线贴图运用方式(和shadow map不怎么友好)。
先设想法线贴图的用法。
如果我们的模型是一个球体,那么根据光线角度与表面法线的夹角我们倒是可以很方便的伪造出次表面反射的效果,像这样。
然而,这样的方法和shadow map不怎么友好。转变思路,次表面散射效果主要是由与光线进入表面以后在其内部散射,最后又离开表面进入摄像机。离开表面的光与在表面就被反射掉得光是叠加的。于是想,减弱普通光照模型的下的光照(光进入了表面),然后后在适当的地方加上一些光(光离开了表面)。对于球体,可以直接用dot(normal,lightDir)的方法找到适当的位置,而在更复杂的表面上,这个方法就不怎么好用了。like this…
(鼻子下部分应该有光透过,不过却没有)
于是,结合法线贴图降低表面变化频率的想法,用第二种方法烘焙贴图,这次建立的烘焙用高模把鼻子弄平了,嘴唇也平掉了,好吧其实是偷懒,实际上应该更仔细的对待这些部分。效果如下:
鼻子透过光了!虽然没有真正的SSS(或者比较接近真实的伪SSS)那么好,但是效果也不赖。
最后再加上glow。
好吧,glow是作弊,不过看起来还不错。
对比用的未扭曲法线版本(当然,也有glow)….感觉还是前者比较有通透感。
最后,其实嘛…我作弊了(拖
正面光时候的效果并不太好,是否能够通过一些调节来解决,就不清楚了╮(╯▽╰)╭。
不能继续偷懒了orz….
OK,可以吐槽了orz…
