章程

场景优化进阶(二) 进阶的灯光贴图,高光贴图教程,以及最后效果和负载效率的比对


这是lightmap进阶前的原图:

0

根据设定好的场景选择合适的 Hdr 贴图,作为ambient,有些软件自带的 sky 设置也同样可以:

hdr

在场景灯光里把hdr贴图上的主光源旋转到三维灯光里打灯的主光源的位置。然后用mental ray , Vray ,Arnold,种种渲染器渲染出光能传递的效果:

8

这里为了增加最终效果的层次感和柔和感,我专门另外渲染了一个AO层:

9

在PhotoShop里,把AO层用Multiply的方式,叠加到渲染好得lightmap上,根据美术需求,自行调节浓淡。

10

每张lightmap的AO都合成完毕的话,在引擎里,实时渲染的效果如下:

11

如果AO的范围和浓淡调节的好,在细节上即可以得到光能传递的色溢,把间接光照的照明提亮,又同时可以在该区域调节AO,把物体交接的,遮挡关系比较复杂的地方柔和的压暗一下。 层次更丰富,过度更加柔和。如果不是做纯写实类美术风格的游戏,这样做就可以弥补真实物理灯光渲染器在艺术上太过于真实的不足,可以提供一些对画面的风格化和舞台戏剧化效果的操控。

12

由于AO是在photoshop里合在lightmap上的,整个过程里我只是以相同的分辨率替换了几张lightmap,所以场景的所有功耗和资源和在 “场景优化进阶(一)”的原始场景完全一样的,在提升美术效果的同时没有花费任何的功效。

接下为了更好的强调细节,体积感,质感,但又出于效率考虑,我们尝试仅仅把高光贴图放到材质里,而同时不使用法线贴图。 因为没有法线贴图,所以模型和shader不需要做切线的运算,负载上是一种很廉价的解决方案。

在美术的工作量上,主要集中在一张rgba四个通道的贴图的绘制:

1

高光贴图并不是diffuse贴图简单的复制和调色, 高光贴图应该根据diffuse上的材质不同,把同一材质的物体分成一个层,同一材质但不同颜色的物体,只要他们材质的光泽度类似,在高光贴图上的差别不应该太大的。

贴图得RGB通道用来描绘高光的强弱以及色彩,而Alpha通道是控制引擎里高光的gloss参数的,也就是高光的范围.目前引擎的算法是,alpha通道越暗,高光的弥漫范围越广,alpha越亮,高光就越收拢,越小。 同理,这块完全是以材质的种类来进行描绘的,和diffuse里纹理机理的关系并不大,所以一般情况下,同一材质的元素是用一个纯平的灰度图来进行描述的,这里把复杂的机理带进来,会使同一材质上高光的范围光泽不统一,效果反而不好。

把高光贴图逐个在引擎里加入材质,最后效果如下:

7

和没有采用高光贴图的那个场景作一下视觉上的比较:

2

首先,物体的质感的表现,体积感上有了极大的提高。其次,由于这些高光是高光贴图产生的,并不是画上去的,所以在旋转摄像机的时候,这些高光都是“活”的,会随着摄像机的缩放,旋转,移动的变化而变化,细节的生动性也有质的飞跃。

最后,我们来比较一下 使用高光贴图前后的功耗和负载的不同:

3

由于高光贴图和法线贴图不同,高光不需要计算切线空间,不需要模型生成切线(Tangent),在模型上不增加新的数据量,所以客户端大小基本是完全没有变化的。

关于在引擎里负载的比较:

4

新场景 由于新增加了纹理(高光贴图)以及相应的运算,内存从228M升到232M, texture 从16.9M增加到18.4M.
但新增加的纹理还是依附于原来的材质球上,并没有生成新的材质,所以DrawCall并没有增加,自然ploygon数量和顶点流vertex数量也是没有变化的,这几个对帧率有比较敏感影响的参数,但都没有波动。
还有高光贴图的分辨率是可以做得很小的,如果diffuse是512的,那高光一般256就可以了。
所以总的来说,如果高光贴图画的好,材质高光参数调的合适的话,这是一种在负载上代价非常小的提升视觉效果的解决方案。