Grobal Illuminition,全局照亮,这个系统模拟了场景当中所有物体的表面对光线的反射,从而对其他物体造成的影响。普通的光照系统只是简单的计算光源对于某个表面的的影响,例如表面的颜色,表面对光线的吸收强度等,而GI在此基础上还要考虑来其他物体表面反射过来的光线,从而达到细致而真实的效果。
正如上图所示,两个光源之间的光线变化更加柔和真实。
如图,黄色的小黄点就是场景中的光源探照。光源探照是可以附加在场景中任何一个物体上的,而且这些探照器是全局共享的。对于如何摆放探照器,总结的方法是,1)动态物体集中运动处放置比较密集的探照器,可以制造出更好的效果。2)探照器应该布置成一种层次结构,具体参考官方文档。
GI要计算物体之间的相互影响,这无疑要耗费大量的资源。所以最基础的GI方法是Bake。所谓烘烤,就是先设定好场景当中的static lightmapping物体,这些物体在场景中是静态的,不会因为游戏运行而改变自身的状态。烘烤过后,物体表面因为漫反射而更加明亮,而且也会出现一些真实的细节。
![Unity3D中的Grobal <wbr>Illuminition学习 Unity3D中的Grobal <wbr>Illuminition学习](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
![Unity3D中的Grobal <wbr>Illuminition学习 Unity3D中的Grobal <wbr>Illuminition学习](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
正如上图所示,两个光源之间的光线变化更加柔和真实。
![Unity3D中的Grobal <wbr>Illuminition学习 Unity3D中的Grobal <wbr>Illuminition学习](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
把光源关掉,可以观察bake的实际效果。
然而这种烘烤效果是一种precomputed的方法,也就是提前计算好的,只能作用于静态物体之间。此时移动球体,球体表面不会发生任何变化。
可是,真正的游戏场景中,往往出现大量动态的物体,例如玩家的人物。这些动态的物体出现在烘烤过的场景,往往会出现一些disconnected的效果,显得人物和场景非常格格不入。
正是因为这种原因,unity提供了一种可以是物体动态参与GI的方法,light probe系统。光源探头系统,可以在场景当做布置非常多光源探头,这些探头可以感知烘烤过的场景中,特点位置以及周围的光线情况,从而记录在系统当中。当动态物体启用light probe属性后,就可以利用这些光照信息动态的参与GI。
![Unity3D中的Grobal <wbr>Illuminition学习 Unity3D中的Grobal <wbr>Illuminition学习](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
如图,黄色的小黄点就是场景中的光源探照。光源探照是可以附加在场景中任何一个物体上的,而且这些探照器是全局共享的。对于如何摆放探照器,总结的方法是,1)动态物体集中运动处放置比较密集的探照器,可以制造出更好的效果。2)探照器应该布置成一种层次结构,具体参考官方文档。
总结:GI可以通过预先计算,从而烘烤整个场景中所有static lightmapping物体,使他们的表面反射光源,相互影响,造成真实的效果。其中包括两种主要方法:
1)bake,对于场景中不变的物体,使用bake。bake只对静态物体生效,然后会造成静态场景和动态物体脱节。
2)light probe,对于场景中的动态物体,使用这个系统。布置好所有light probe之后,参与烘烤。然后对动态物体启用这个属性,物体可以基本达到动态的烘烤效果。