光照贴图烘焙

Posted 小柏树

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了光照贴图烘焙相关的知识,希望对你有一定的参考价值。

转载自CSDN雨蒙一,简书自由的天空等人,感谢分享;

https://www.jianshu.com/p/3e1e002f5684

基础知识了解一下:

      1,什么是贴图(Texture)?

             贴图(texture)是一张不大的二维图像,它呈现了某个表面的最终信息。它被指定到线框多边形的表面,给予模型最终的外观。贴图的制作技巧是创建游戏真实度方面的关键因素。

      2,贴图格式及大小

             一般情况下,贴图的实现在图像处理软件中制作完成,纹理一般会包含很多信息和图层,也将随后被储存成PSD格式,当制作完成后,文件合并成一个图层,被存储为JPG格式,在游戏制作中,

       普遍被存储为TGA格式。这是因为这些文件格式包含一个ALPHA通道,可以实现其他的纹理效果。
       贴图的尺寸一般是正方形,2的N次方,256,512。。。由于游戏是实时渲染,像三维空间中的多边形数量一样,贴图大小也将需要处理的时间,贴图越大,处理时间就越长,因此,一般最多使用1024、2048大小的贴图。

       3,指定贴图
            为了制作准确的贴图,设计师需要执行一个叫做UVW展开的操作,以方便后期贴图的制作与修改。
       4,次世代游戏贴图的组成
            次世代贴图是由:法线贴图、AO贴图、固有色贴图、高光贴图、凹凸贴图、透明贴图及自发光贴图的组合而成的一整套贴图。 

                                            这里写图片描述

             1)法线贴图:记录凹凸信息的贴图
                   生成方法:通过3dmax 把同一个模型的高低版本对在一起,把高模细节通过烘焙的方法将生成法线贴图记录下来。

                                               这里写图片描述

         2)AO贴图:环境光遮蔽贴图,它是用来秒回物体和物体相交或者靠近时遮挡周围漫反射光线的效果。可以解决和改善漏光、飘和阴影不实的效果。它主要是通过改善阴影来实现更好的图像细节。
               AO贴图在模型制作完成后不直接贴在材质球上,而是用于绘制固有色。通常情况下,会在AO贴图上以正片叠底的形式放置在固有色材质上,会使得物体的明暗更加真实。

               ——Ambient Occlusiont简称AO贴图,中文一般叫做环境阻塞贴图。是一种目前次时代游戏中常用的贴图技术,很多朋友将其与全局光烘焙贴图混淆,其实二者本质是完全不同的。                   

                     首先,我们从简单的AO贴图的算法来讲:
AO贴图的计算是不受任何光线影响的,仅仅计算物体间的距离,并根据距离产生一个8位的通道。如下图所示,计算球形物体的AO贴图的时候,程序使每个像素,根据物体的法线,发射出一条光,这个光碰触到物体的时候,就会产生反馈,比如球右下方的一些像素锁发射的光,碰触到了旁边的正方体,产生反馈,标记这里附近有物体,就呈现黑色,而球上方的像素所发射的光,没有碰触到任何物体,因此标记为白色。

 
                  这里写图片描述

简单了解算法后,大家就明白,全局光的烘焙师模拟GI(全局光)所呈现的阴影效果,而AO贴图时模拟模型的各个面之间的距离。二者性质是完全不一样的。
我举例简单对比AO贴图和GI阴影贴图的区别。
根据这个低模,右边计算出的AO贴图的黑白关系,是根据物体模型距离产生的,不存在任何光源效果的影响,边缘部分等比较密集的结构,正确的产生了深色,强化了模型结构,在游戏引擎中,与其他通道贴图混合,可以提升游戏的效果。
右边的是全局光烘焙贴图的效果,是用MAX的天光计算结果进行烘焙,其阴影效果是模拟自然光线下的模型光影关系,在有结构接近的区域(比如裤袋、袖口)由于GI得光线跟踪计算会使其弱化,符合自然界光线效果,但是不是游戏所需要的效果。

 

在unity中,我们有两个地方可以调整AO,一个是在光照贴图渲染器中,有一个调整AO的参数,这个是确实渲染了一层AO。还有一个就是通过摄影机特效,有一个屏幕空间环境阻塞的特效screen speace ambient occlusion(SSAO).这两个都可以实现部分的AO效果,有兴趣的朋友可以自己尝试一下。

                                               
       3)固有色贴图:通常情况下,我们把白色阳光下物体呈现出来的色彩效果总和成为固有色。固有色是指物体固有的属性在常态光源下呈现出来的色彩。
                                               这里写图片描述
      4)高光贴图:就是光滑物体弧面上的亮点,而平面上则是一片光。与光源和摄像机的位置有关。但通常为一个小白点。

                       ——高光贴图是用来表现当光线照射到模型表面时,其表面属性的.(如金属和皮肤、布、塑料反射不同量的光)从而区分不同材质.

高光贴图再引擎中表现镜面反射和物体表面的高光颜色。

                       ——凸凹贴图可以通过高光贴图来改进成相当漂亮的贴图。(要记住的是,单单凭借高光贴图是无法充分的表现材质特性的,只有Didffuse,Normal,和Specular三张配合才能充分的表现材质特性.)

在UNITY中,高光贴图通常放在漫反射贴图的透明通道里,我们是用相关的SHANDER就可以达到高光的效果


           制作过程:高光的绘制一般把固有色贴图进行去色处理,再进行修整和调节。注意高光贴图不能出现纯黑和纯白。
                                               这里写图片描述
      5)透明贴图
            透明贴图是将不需要显示的部分现实出的颜色是当前对话框的背景色,类似于遮罩。
                                               这里写图片描述

       补充常用贴图介绍

       a.漫反射贴图diffuse map

           漫反射贴图在游戏中表现出物体表面的反射和表面颜色。换句话说,它可以表现出物体被光照射到而显出的颜色和强度。我们通过颜色和明暗来绘制一幅漫反射贴图,

           在这张贴图中,墙的砖缝中因为吸收了比较多的光线,所以比较暗,而墙砖的表面因为反射比较强,所以吸收的光线比较少。上面的这张图可以看出砖块本身是灰色的,而砖块之间的裂缝几乎是黑色的。

           刨去那些杂糅的东西,我们只谈明显的,漫反射贴图表现了什么? 列举一下,物体的固有色以及纹理,贴图上的光影。前面的固有色和纹理我们很容易理解,至于后面的光影,

           我们在绘制漫反射贴图的时候需要区别对待,比如我们做一堵墙,每一块砖都是用模型做出来的,那么我们就没有必要绘制砖缝,因为这个可以通过打灯光来实现。可是我们如果用模型只做了一面墙,

           上面的砖块是用贴图来实现,那么就得绘制出砖缝了。从美术的角度,砖缝出了事一条单独的材质带外,还有就是砖缝也是承接投影的,所以在漫反射图上,绘制出投影也是很有必要的,如下图:

 
                                                              
 

没有什么物体能够反射出跟照到它身上相同强度的光。因此,让你的漫反射贴图暗一些是一个不错的想法。通常,光滑的面只有很少的光会散射,所以你的漫反射贴图可以亮一些。

漫反射贴图应用到材质中去是直接通过DiffuseMap的。再命名规范上它通常是再文件的末尾加上“_d”来标记它是漫反射贴图。

        b.凹凸贴图Bump maps
          凸凹贴图可以给贴图增加立体感。它其实并不能改变模型的形状,而是通过影响模型表面的影子来达到凸凹效果的。
          在游戏中有两种不同类型的凸凹贴图,法线贴图(normalmap)和高度贴图(highmap)。                                                               

 

                       1. Normal maps法线贴图 ——              

法线贴图定义了一个表面的倾斜度或者法线。换一种说法,他们改变了我们所看到的表面的倾斜度。

法线贴图把空间坐标的参数(X,Y,Z)记录在像素中(R,G,B),上面的范例图就是这个意思。

 
                                                                                
 

有两种制作法线贴图的方法:

1.从三维的模型渲染出一张法线贴图 (用高模跟低模重叠在一起,把高模上的细节烘焙到低模的UV上,这里需要低模有一个不能重叠的UV)

2.转换一张高度贴图成为一个法线贴图。(是用NVIDIA的PS插件来转换一张图成为法线贴图)

                       2.Height maps高度贴图

                                                                                 

          什么是HeightMap呢?所谓高度图实际上就是一个2D数组。创建地形为什么需要高度图呢?可以这样考虑,地形实际上就是一系列高度不同的网格而已,这样数组中每个元素的索引值刚好可以用来定位不同的网格(x,y),而所储存的值就是网格的高度(z)。

           我们在这里叙述高度图,其实也是为了更好的绘制法线贴图,很多情况下我们的法线贴图只能在已有的漫反射贴图作为素材进行绘制,这样就是需要由一个HeightMap转换成法线贴图的一个过程,明白了这个原理,做起来也就可以更好的驾驭其效果。

高度贴图是一种黑白的图像,它通过像素来定义模型表面的高度。越亮的地方它的高度就越高,画面越白的地方越高,越黑的地方越低,灰色的在中间,从而表现不同的地形。

            当然在UNITY中也是有HightMap出现的,比如在Terrain菜单中,就有导入和导出HightMap的命令。

           高度贴图通常是在图形处理软件中绘制的。他们通常没有必要渲染这些,在DOOM3游戏中高度贴图是被转换成法线贴图来使用的。使用高度贴图仅仅是为了适应简单的工作流程。高度贴图通常通过“Heightmap”函数来调用到3D软件中去的,我们通常再文件名后面加一个"_h"来标示它。

                      Normal maps vs. height maps

                             法线贴图和高度贴图
一般来说,Normal Map来自于Height Map。

通常我们绘制一张具有足够细节的高度贴图要比建立一个足够细节的模型然后渲染成相应的法线贴图要实际的多。

法线和高度的凸凹贴图可以通过Addnormals函数来合并到一种材质中。

毫无疑问,高度贴图大多数游戏引擎中出现的不多。他们只是给电脑一种方法来计算曲面法线当使用动态灯光的时候。

这说明实际上,一张高度贴图被转换成一张法线贴图,以此可以计算出相邻两块不同高度的位置之间的倾斜面。高度贴图永远不能像法线贴图这样具有足够的细节,这是被肯定的。

很明显只有灰度的高度贴图并不能很好的表现应该有的细节,因为它是黑白的,RGB颜色就会遭到浪费,并且因此你只能只用256层级的强度。

相比较来言法线贴图的每一个图像通道都可以利用到,显而易见,法线贴图能够更好的来表现凸凹。

 
 




以上是关于光照贴图烘焙的主要内容,如果未能解决你的问题,请参考以下文章

光照贴图烘焙

max的贴图烘焙技术简易流程

Unity基础(四)渲染烘焙Lightmap光照贴图(未完)

2. 光照烘焙

Unity教程||Unity 渐进式光照贴图烘焙详解

Unity 光照系统