overview
2020年发售的《对马岛之魂》可以说给行业带来不小的惊喜,也收到玩家的很大的喜爱;
开发商sucker punch,在对马岛之前的代表作是infamous系列(这个系列各种特技其实也挺赞的),是一个美国游戏公司;
公司规模巅峰时期是160人,25qa,ppt里看起来是6个渲染程序,这个规模放在国内已经是“小团队”;
销量超过500万份,并且tga上获得best art direction;
艺术方向本身是:stylized realism;所基于的技术本身就是非常的物理;
本文是含金量不错的一篇文章,覆盖了对马岛的很多的材质系统,主要包括:
- 各项异性的specular maps以及filtering(丝绸类材质)
- 各向异性的asperity scattering brdf(毛绒类材质)
- 皮肤shading
- detail maps
各项异性的specular maps以及filtering
suckerpunch之前的anisotropic specular就是顺着tangent这种做的ggx,这个最大问题就是这个方向美术没法控制;
(天刀的各项异性,顺着tangent和binormal来做specular,美术也很苦恼没法做方向控制)
所以首先sucker punch做的第一个事情,就是引入anisotropic specular的方向,可以看下贴图的组成:
可以看出各项异形的组成包括:u和v方向的gloss,以及定义方向的direction贴图;
这里首先完成的就是第一部分:让各向异性的方向可控,而不只是tangent和binormal的方向;
然后是filter的问题:通过sggx的算法encoding到一个aniso贴图中去;
然后接下来很重要一点就是要在mipmap filtering的时候保证物理正确性;
这里一个案例可以看下[sig18]《使命召唤:二战》的材质光照技术
这里的filter normalmap和gloss时候,不能直接去linear filter,需要将两者结合来保证NDF(normal distribution function)的正确性;
那么在anisotropic specular这里也面临类似的问题,需要能够做到正确的filtering(也就是生成正确的mipmap),这里用到的数学工具就是sggx;
sggx方法详见the sggx microflake distribution
简单描述就是,sggx是symmetric ggx简写,本来是用作计算volume render领域的方法,论文核心在于对normal distribution function使用了一个机遇project area的估算方式,进而使用椭球的方式来表达复杂解析公式,最终达到了可以支持filter的特性,极大地加速了volumetric data的lod渲染;
也就是核心在于椭球的表达normal distribution function,进而可以filter的特性;
而且ggx的NDF(normal distribution function)是sggx的一个特例,所以是妥妥的对原有的各向异性做了扩展;
原来anisotropic的ggx的case,表达出来这样的;
最后filter的计算过程变成:
1, 使用sggx matrix把normal和2x2 anisotropic ggx矩阵表达出来:
2,然后对sggx matrix做线性过滤得到sggx matrix s1
3,然后再把新的sub matrix从s1中反算出来
同时也有normal的计算;
4,把normal和各向异性的信息存到贴图里:
- normal:bc5 normalmap
- anisotropic map :bc7
上面sggx的各种推导有点绕,我们抓住一点:就是一个对于anisotropic case下的NDF filter的方法就好了;
小结
这里的各向异性的部分,sucker punch做了:
- 支持到了u & v两个方向的各自的gloss定义,以及direction的美术自定义,美术控制力进一步上升
- 使用sggx matrix的方式来让filter更加物理正确,结果也比较好,
- sggx的方式比能达到类似效果LEAN map的方式,使用的数据更少