Unity3D中的Grobal Illuminit…

来源:互联网 发布:vb.net 十秒后跳转 编辑:程序博客网 时间:2024/05/17 21:53
GrobalIlluminition,全局照亮,这个系统模拟了场景当中所有物体的表面对光线的反射,从而对其他物体造成的影响。普通的光照系统只是简单的计算光源对于某个表面的的影响,例如表面的颜色,表面对光线的吸收强度等,而GI在此基础上还要考虑来其他物体表面反射过来的光线,从而达到细致而真实的效果。
GI要计算物体之间的相互影响,这无疑要耗费大量的资源。所以最基础的GI方法是Bake。所谓烘烤,就是先设定好场景当中的staticlightmapping物体,这些物体在场景中是静态的,不会因为游戏运行而改变自身的状态。烘烤过后,物体表面因为漫反射而更加明亮,而且也会出现一些真实的细节。Unity3D中的Grobal <wbr>Illuminition学习

Unity3D中的Grobal <wbr>Illuminition学习
正如上图所示,两个光源之间的光线变化更加柔和真实。
Unity3D中的Grobal <wbr>Illuminition学习
把光源关掉,可以观察bake的实际效果。
然而这种烘烤效果是一种precomputed的方法,也就是提前计算好的,只能作用于静态物体之间。此时移动球体,球体表面不会发生任何变化。
可是,真正的游戏场景中,往往出现大量动态的物体,例如玩家的人物。这些动态的物体出现在烘烤过的场景,往往会出现一些disconnected的效果,显得人物和场景非常格格不入。
Unity3D中的Grobal <wbr>Illuminition学习
如图,把球体设置成动态物体,不参与烘烤。明显可以看出球体和场景的脱节。

正是因为这种原因,unity提供了一种可以是物体动态参与GI的方法,lightprobe系统。光源探头系统,可以在场景当做布置非常多光源探头,这些探头可以感知烘烤过的场景中,特点位置以及周围的光线情况,从而记录在系统当中。当动态物体启用lightprobe属性后,就可以利用这些光照信息动态的参与GI。
Unity3D中的Grobal <wbr>Illuminition学习
如图,黄色的小黄点就是场景中的光源探照。光源探照是可以附加在场景中任何一个物体上的,而且这些探照器是全局共享的。对于如何摆放探照器,总结的方法是,1)动态物体集中运动处放置比较密集的探照器,可以制造出更好的效果。2)探照器应该布置成一种层次结构,具体参考官方文档。
Unity3D中的Grobal <wbr>Illuminition学习
上图中,球体没有参加烘烤过程,但是使用了light probe系统,效果也接近参加烘烤。然而这时的球体是动态的。
Unity3D中的Grobal <wbr>Illuminition学习

Unity3D中的Grobal <wbr>Illuminition学习
上图可以看出来,关闭光源后,移动球体,球体表面会随着位置发生微妙的光照变化,这正是light probe系统的效果。


总结:GI可以通过预先计算,从而烘烤整个场景中所有staticlightmapping物体,使他们的表面反射光源,相互影响,造成真实的效果。其中包括两种主要方法:
1)bake,对于场景中不变的物体,使用bake。bake只对静态物体生效,然后会造成静态场景和动态物体脱节。
2)light probe,对于场景中的动态物体,使用这个系统。布置好所有lightprobe之后,参与烘烤。然后对动态物体启用这个属性,物体可以基本达到动态的烘烤效果。



0 0
原创粉丝点击