Unity5-----------之GI设置简介
GI
global illumination 全局照明
indirect illumination 间接照明
模拟出光线追踪的效果
实现方法:
1.ssao系列
2.lightmap、辐射度
3.PBRT
实时GI:
LPV cryengine 《Cascaded Light Propagation Volumes for Real-Time Indirect Illumination》
SVO ue4 《Interactive Indirect Illumination Using Voxel Cone Tracing》 补充:UE4现在出来了,还是用的LPV,SVO应该跑不了!
KlayGE中用到的:VPL MSII RSM(reflective shadow map) 《Multiresolution Splatting for Indirect Illumination》
GI操作:
全局光照的特点在于能够捕捉间接光照,所以5以后,除开原来的direct light的效果,增加indirect light的效果,简单来说,就是除开光源之后,然后模型本身做为光源,幅射到别的模型上,层层递归后的效果。现不管是预计算实时GI还是烘培GI都只是针对静态模型。预计算Gi的实时光源与烘陪对应的烘培光源里的强度与反射强度都会影响幅射图与方向图的内容。需要注意,预计算Gi针对的是实时方向光,而烘培GI针对的是烘培方向光。
全局光源
Skybox :天空盒,参考材质Skybox/Cubemap,如果全局光源与全局反射探头都选择Skybox模式,则会把Skybox当做一个Cubemap,场景所有模型,静态与非静态的一部分光源从这个Cubemap反射上得到。
Sun:Skybox选择一个方向光,以这个方向光的方向做方向,这个方向光如颜色与强度不影响全局本身,如果没有设置方向光,选择强度最大的那个方向光源。
Ambient Source:全局光源,如果设置天空盒,但是天空盒本身没有设置,自动选择下面的全局颜色设置,全局反射探头以Ambient Source当做光源。
Ambient Intensity:全局光源强度,越高越亮,为0时,光源不起作用。
Ambient GI:当预计算GI与烘培GI二个都选择后,这个可以选择是用实时还是烘培。
Reflection Source:Unity默认放入的全局反射探头,选择Skybox会以Ambient Source里提供的光源颜色做反射,同时也可以自己提供cubemap当做反射源。
Resolution:反射探头解析度,应该是对应RTT的cubemap六张纹理的分辨率。
Compression:是否压缩。
Reflection Intensity:Reflection Source针对所有模型反射强度,值越大,相应的模型面上显示越清晰的Reflection Source。
Reflection Bounces:当设置多个Reflection Probe时,互相反射对方信息的次数,如二面镜子。
GI设置
Precomputed Realtime GI
预计算实时GI,针对实时静态物体之间的幅射光,故相应的幅射图与方向图都是低分辨率下的。动态物体可以使用光照探头来得到相应反射光源信息,注意动态模型与光探头的距离。
Realtime Resolution:预计算实时GI,把场景分成许多格,得到每个格的幅射信息。那么这个值越高,计算量将以平方增加,最终值还将和General GI里的光源参数里的Resolution相乘。
CPU Usage:生成相应GI的数据时,在游戏运行时分配多少CPU计算能力。
Baked GI
烘培GI,因此能得到更精确的模型之间的反射光信息,但是不能运行时更改相应的光源信息,如颜色,方向,预计算实时GI没有这个问题。
Baked Resolution:一般来说,是Realtime Resolution 10+,因为相应的幅射图与方向图精确度要高很多。
Baked Padding:网上说是光照贴图中分隔的距离,还需要验证。
Compressed:是否压缩
Ambient Occlusion:值越高,遮挡地区得到的光比差越大。
Final Gather:用FG技术来产生烘培数据,这种技术时间会长一些。参考http://blog.sina.com.cn/s/blog_46c56d9a0100gqbv.html
Ray Count:Final Gather所用的光线追踪光线数目。
Atlas Size:图集里贴图的大小,越低实际占用越精确也就是越小,但是贴图产生越多,应该选择一个合适的大小。
General GI
预计算实时GI还是烘培如何生成.
Direction Mode:幅射图/带方向光/加镜面,具体看Shader分析,其中预计算实时GI与烘培GI在这生成的相应幅射图,方向图等有所不同,后面会提到。
Indirect Intensity:间接光的强度。
Default Parameters:生成相应贴图所需要的信息。
其中全局预计算GI,烘培GI,全局反射探头相应的改动需要重新烘培,如果选择自动,相关改动会自动在后台烘培。
上面这些说实话,写这么操作没啥用,自己对着每项实践一篇,什么都清楚了。
Light Probe:
对于GI来说,不管是预计算GI与烘培GI,都不会对非静态模型计算间接反射,光探头的加入,可以使非静态模型得到周围静态模型的幅射光,主要技术原理使用一种球谐光照的技术,注意light probe一般不会对静态模型有影响,你看到的影响,只是因为非静态模型的颜色变化大造成的反差。
相关球谐光照的技术原理可以参见,本人也看不懂,只能说看了后有点印象是怎么回事:
http://www.yasrt.org/shlighting/
http://www.cppblog.com/init/archive/2012/09/19/191182.html
一种2D傅立叶级数的球形推广,可以把光照函数展开成SH基函数的叠加,类似傅立叶变换能把任何函数展开成正弦波的叠加,对光照图来说一般只用2 bands = 4 RGB textures,通过丢失高频细节来压缩存储。
Reflection Probe:
定义一个Cubemap用来影响周围模型的镜面反射,给镜面高光模型使用。
一般来说,我们想得到一个实时场景的Cubemap,只需要在一个点,用摄像机对着前后,左右,上下,各拍摄一次,形成6个面,组合成Cubemap.
Type:烘培,用户,自动。其中,烘培就是用户来控制生成一个当前的场景cubemap,用户就是用户自己提供一个cubemap,实时就是不断更新这个cubemap以映射最新的场景。
当选择实时,Refresh mode:On awake启动时,每桢,用户脚本控制,当每桢时,如下选择。
Time slicing:一桢先生成6个面,后面8桢每桢生成一个mipmap,一共9桢。
Individual face:6面6桢,加后面8桢每个mipmap,一共14桢。
No time slicing:一桢内把mipmap与cubemap全部生成。
Importance:当多个反射探头影响一个模型时,这个参数影响这个反射探头的比重。
Intensity:间接光强度,强度影响镜面反射,镜面反射越亮。
Box Projection:从着色代码来看,应该根据当前反射探头的源点与AABB影响是模型原来法线。
Size:大小,范围内的模型使用这个。
Probe Origin:原点。
Cubemap capture sttings:
Resolution:cubempa材质的大小。
HDR:高光。
Shadow Distance:阴影距离,数值越少,阴影越近。
下面就是RTT对应摄像机的属性。