Realtime GI介绍

Bake GI, Progressive Lightmapper,Light Probes Reflection介绍

Mixed GI Bake indirect,ShadowMask,Subtractive介绍

 

unity黄昏的光影效果 unity 环境光_贴图

没有光线烘焙的场景,只有直接光照和环境光,场景偏暗 

unity黄昏的光影效果 unity 环境光_贴图_02

光线烘焙的场景,有直接光照和间接光,场景明亮且真实


unity中的光照系统

在Unity中,光照的计算中有两部分,一是直接光照,二是间接光照。

灯光有三种模式,分别是Realtime,Baked,Mixed。

物体分为两种模式Lightmap Static和Lightmap NonStatic。

 

直接光照,间接光照

直接光是成光线经过物体一次放射进入摄像机,而间接光是光源经过多次放射进入摄像机的效果。不做处理的情况下,unity场景中只有直接光照。但是间接光照使场景看起来真实,因为没有光线直接到达的地方也会被不同程度的照亮,就像真实的世界里的规则。

你会觉得有时候没有开启GI,物体背光面也会被照亮,那是因为开启了环境光,环境光会照亮所有面,当你关闭环境光会发现背光面是纯黑的。

静态物体,动态物体

对于物体,只有Lightmap static的物体参与光线烘焙,参与烘焙我们下称为静态物体,反之称为动态物体,动态物体想分享烘焙光的话,需要借助光探针。

 

灯光三种模式Realtime,Baked,Mixed区别

Realtime GI:使用Enlighten提前计算(非实时)多个表面之间的光路,所有可以提供实时的间接光。、

特点:Realtime光和Mixed光和静态物体的参与光照烘焙,烘焙结束后,直接光和间接光都会实时计算。

 

Bake GI:直接和间接光照以及阴影都被烘焙在一张额外的贴图上,场景中不会再实时计算光照。

特点:Baked光和Mixed光和静态物体的参与光照烘焙,烘焙结束后,场景中直接光和间接光都读贴图。

 

Mixed GI:保留直接光照的计算,间接光照被烘焙。

特点:所有光和和静态物体的参与光照烘焙,烘焙后直接光实时计算,而间接光读贴图。

 


重要参数

RealtimeGI的参数不能单个修改,所有参数在Lightmap Parameter中设置High,medium,low

下面是BakeGI的重要参数解释

Indirect Sample:每个像素点进行间接光采样的次数。

Lightmap resolution每个单位(一般是每米)的分辨率,越大效果越好。

 

当一个1米见方的cube,Indirect Sample设为10,Lightmap resolution设为4。1m对应4个像素,一个一平方米的UV对应16个像素,一个正方体6个面,则有6*16=96个像素,每个像素10词采样,则要96*10=960次采样。

 

Bounces:光线反弹的次数,每增加1,计算时间都会显著增加,最高为4.

LightMapPadding:光照贴图中不同面的间距。

Direction Mode选择方向性会增加额外的贴图,但是如果选择非方向性,当你转动已经完成光照贴图烘焙的物体是,光照会出错。

Filter:对噪点进行平滑度的处理,同时对物体连接处的阴影进行校正。

Filter Advance 两种模式

Gaussian(用过PS的都知道高斯模糊)阴影边缘柔和

Trous阴影边缘会变硬,同时对物体连接处的阴影进行校正。


Progressive向比较Elighten的优势:1.优先烘焙Scene中看见的区域2.可以一边烘焙一边看效果,可以暂停,可以强制结束。

参数的意义

 

值得注意的是,realtimeGI的UVchart大小不能单独修改,但是BakeGI的UVchart大小可以修改,你甚至可以修改不同的物体对应的UVChart的大小,数值越大,上边的光照贴图的纹理约精细。

 

UV Overlap的问题处理

就是在Unity生成光照贴图UV的时候,UV之间的间距过于接近,造成不同物体的UV共用了同一个像素点造成的错误。

解决:调整GenerateUV的间距。

模型ImportSetting中,GenerateUV-Advance-Pack Margin调大。

但是UV间距增加,每张图的UV容量会变少,可能导致贴图数量增加,从而导致内存增加。

 

光照贴图的接缝

同一个物体上的UV展开,有接缝,导致最后的效果,同一个物体上有一条明显的光照分界线。

解决:MeshRender中,勾选Stitch Seams。


光照探针

光照探针,对场景中个别的点接受的直接光照和间接光照进行记录,形成空间阵列,当物体出于阵列中间时,物体表面的光照数据,会根据它周围的光照探头,进行差值(或者某种算法)计算。

通常来讲,接受光照探头的物体,不应该大于八个光探针规定的正方体区域,当单个物体较大的时候,超过了区域的时候,上面的效果会失真,这时候需要使用Light probe Proxy Volume,可以为大型的动态物体提供预先计算的光照信息。

 

放射探针的使用

场景中某个点的视觉环境可以用Cubemap表示,用于着色器采样,实现反射效果;

放射探针都由在一个规定的范围,该范围内的所有物体的放射信息都由该探针记录,当场景中有很多金属物品时候要注意使用放射探头,因为金属对放射敏感。


Mixed GI保留直接光照的信息(可以变动),间接光照烘焙(固定不变)。

例子灯光小幅度的摇晃,对于全局的间接光照影响不大,但是直接光照的变动还是明显的。

Mixed的三种模式

Bake Indirect:只烘焙间接光照,直接光和阴影实时计算

Shadow Mask:对于静态物体,阴影会被烘焙到shadowmask贴图,没有实时阴影的效果。

Subtractive:对于静态物体,直接和间接光照都烘焙到贴图上。对于动态物体,高光动态,而且可以在静态物体上投射主方向光阴影。