作者jorge jimenez,猛到飞起的一个R&D,现在在blizzard&activition, 这哥们blog:http://www.iryoku.com/
这篇文章介绍的是脸部皱纹渲染,上面的这个图是show的皱纹,不是表情,也不是皮肤渲染(不过提一下的是这个皮肤是screen space subsurface scattering,效果还是很赞的,而且效率很高很稳定)
基本的思路是使用另外的一个皱纹的normalmap混合到基础的normalmap上面,文章中花较多文字介绍的是如何高效低消耗的做到这一点:
- mask:
- 使用一个额外的wrinkle map,然后使用一个mask map来在不同情况下取不同的部分
- encoding0:
- 这里normalmap使用的是partial derivative normal map,非常酷
- normalmap的xy存的是一个encoding的xy,算法是:
- 然后在混合的时候就base的xy和wrinkle的xy直接加,z直接取1,然后normalize就好:
- 碉堡了
- 但是这个做法有一些劣势就是需要对pipeline做调整
- encoding2:
- 使用difference normalmap这个就比较直接了:
- 但是相对来说这个alu计算消耗多一些,但是这个消耗也就在8600gt这种显卡上面才能注意到,一些强一点的显卡,这点差距也无所谓了
- 所以虽然partial derivative很酷,但是后面这个更是用一点