Unity學(xué)習(xí)筆記02渲染系統(tǒng)
渲染管線(Rendering Pipeline)
著色器(shader):運(yùn)行于GPU上面的代碼,用于執(zhí)行渲染過程中的具體計算。
就是渲染系統(tǒng)的工作模式
1.傳統(tǒng)的Forward(正向)渲染。一般用于移動端游戲開發(fā)。
2.較新的Deferred(延遲)渲染。一般用于PC或是Consoles主機(jī)開發(fā)。
Forward渲染
每個物體受每個燈光的影響,都會在各自的pass中被渲染(每個物體可能會被渲染多次,次數(shù)取決于影響物體的光源數(shù)目)
優(yōu)勢是速度快,對于硬件要求低
缺陷是,對于光源較多的游戲,渲染效率將會受到影響
如果場景中光源數(shù)目可控,為一種快速解決方案
Deferred渲染
將著色和光照計算放到最后來進(jìn)行(物體經(jīng)過一次pass之后,表面位置,法線和材質(zhì)信息渲染到geometry buffer(幾何緩存)中,最后將這些紋理和光照pass進(jìn)行合成)
好處是渲染開銷(SetPass calls,在狀態(tài)中可以查看該數(shù)值)取決于光照影響的像素數(shù)量,而非光源數(shù)量本身。
對于場景中的光源數(shù)并無限制,這對于某些游戲比較關(guān)鍵。
需要更強(qiáng)大的硬件支持,當(dāng)前的手機(jī)平臺并不支持。
實際操作
project setting-->Quality-->像素光源數(shù)量(Pixel Light Count):在這里調(diào)整場景中光源數(shù)量的限制,光源的影響范圍是可以調(diào)整的
渲染路徑在項目設(shè)置-->圖形中進(jìn)行更改
顏色空間
渲染的最終目的就是將屏幕像素填充特定的顏色
1.線性顏色空間(linear color space)
隨著真實性更高的基于物理渲染(PBR)的而流行。
直接使用像素的本來顏色,不進(jìn)行冪函數(shù)運(yùn)算。
在線性空間的運(yùn)算結(jié)果是準(zhǔn)確的。
2.傳統(tǒng)的伽馬顏色空間(gamma color space)
人眼對暗色域的辨識度更強(qiáng),
圖片存儲時,對圖像中的每個像素做一次冪函數(shù)運(yùn)算。
更多的暗部存儲空間,犧牲掉了一些不重要的亮部存儲空間。
在顯示的時候,使用Gamma校正后,作指數(shù)運(yùn)算,恢復(fù)像素顏色。
存在的問題:像素顏色其實不是原來的顏色,而是冪函數(shù)。使用冪函數(shù)進(jìn)行光照等計算顯然是不正確的,導(dǎo)致最終
的渲染結(jié)果有誤。(對于追求更加物理精確的場合來說不適用)
在unity中,默認(rèn)都是伽馬顏色空間。在project setting -->player-->其他設(shè)置中進(jìn)行修改。
在紋理屬性中,有一個sRGB選項,默認(rèn)是勾選的(即會做伽馬矯正),一般情況下需要勾選,因為大部分圖像處理軟件使用的是伽馬顏色空間。
攝像機(jī)
透視相機(jī)
類似于真實世界的相機(jī),遠(yuǎn)小近大效果
正交相機(jī)
取消透視效果,適用于物體檢視,特定類型游戲
攝像機(jī)屬性
清除標(biāo)志Clear Flags
:共有四個選項
1.默認(rèn)選項,天空盒(skybox)
2.純色(solid color),會把不渲染的位置(無物體的地方)渲染成指定的純色
3.只渲染深度(Depth only)
4.Don't clear
投影Projection
有透視投影和平行投影,透視投影更接近人眼所熟悉的規(guī)則
視野Filed of Views
有寬角(廣角),窄角(長焦)鏡頭
裁剪面Cilpping Planes
攝像機(jī)前面的橫截面大小,有遠(yuǎn)近兩個可以調(diào)整數(shù)值,物體不在此范圍的在游戲視圖中會被裁剪掉。
渲染路徑Rendering path
在此處可以為攝像機(jī)設(shè)置特定的渲染路徑。
燈光
點(diǎn)光源:最簡單的光源,沒有方向只有位置,照射半徑,光強(qiáng)。(類似于燈泡)
聚光燈:模擬從無限小的點(diǎn)發(fā)出的光線,光線集中于指定的錐形區(qū)域或者特定方向的光束,有位置,光照半徑,光錐角度,光強(qiáng)。(適合路燈,手電筒之類的)
平行光:用來模擬太陽光,照亮同一角度上的所有物體,亮度與對象和光源的距離無關(guān)。
面積光:是一種區(qū)域光,表現(xiàn)實際光源的發(fā)光尺寸。發(fā)光區(qū)域越大,光照越柔和,也更加真實。目前不支持實時面光源,需要預(yù)計算。
光源的強(qiáng)度(Intensity)屬性可以影響其對場景的照亮程度。
剪影(Cookie):給光照加一個遮罩,主要是用來實現(xiàn)一些簡單的光照效果。
光源也支持類似于攝像機(jī)的快速對齊視圖。
實時陰影
1.可以反映物體在三維空間中的位置關(guān)系
2.陰影可以反映接收體的形狀
3.陰影可以表現(xiàn)出當(dāng)前視點(diǎn)看不到的信息
4.通過陰影可以判斷光源的數(shù)目
分為硬陰影和軟陰影(在陰影的邊緣能夠產(chǎn)生模糊效果,更接近真實效果,但對資源的消耗更大),關(guān)于陰影在燈光和被照射的物體屬性界面中都可進(jìn)行調(diào)整。(還可以選擇物體是否接收陰影)
材質(zhì)(Material)
1.材質(zhì)確定了物體表面應(yīng)該如何被渲染
2.材質(zhì)和紋理,著色器密切相關(guān)
3.可以調(diào)整各種參數(shù)信息來得到不同的渲染結(jié)果
著色器(Shader)
是小腳本程序,以光照和材質(zhì)參數(shù)為輸入,包含用于計算每個像素顏色的算法
紋理(Texture)
是圖像,用來賦予物體表面更多細(xì)節(jié),可以表示顏色,反射,粗糙度等細(xì)節(jié)
三者之間的關(guān)系
1.材質(zhì)可以使用一個特定的著色器
2.著色器決定了材質(zhì)中可用的選項或者參數(shù)
3.著色器還定義了所要使用的紋理
4.shader+texture=material
基于物理的著色(Physically Based Shading):用來模仿真實世界中的光和材質(zhì)的交互結(jié)果(基于物理的方式完成計算,非常真實),unity中已經(jīng)內(nèi)置。
一些屬性
在project窗口中右鍵新建材質(zhì),在材質(zhì)的屬性窗口中,反射率(Albedo)選項可以選擇紋理。
法線貼圖(Normal Map):影響物體表面的法線(法線會影響到很多東西)分布,一般選擇與紋理對應(yīng)的貼圖。
當(dāng)添加了法線貼圖和高度貼圖后,調(diào)整材質(zhì)的平滑度(Smoothness)時,鏡面反射效果變得更加明顯了。
Rendering Mode (渲染模式)
1.Opaque,默認(rèn)模式
2.Cutout,鏤空渲染模式(此模式可以調(diào)整Alpha閾值,即不透明度)
3.Fade,用來模擬可以消隱掉的物體,比如魔法效果
4.Transparent,用來模擬玻璃的之類的透明效果
Emission(發(fā)射):用來決定是否讓材質(zhì)自發(fā)光。
Tilling:當(dāng)材質(zhì)平鋪到物體表面時的平鋪的密度
offset(偏移):紋理坐標(biāo)的偏移
全局光照明系統(tǒng)(GI)
模擬真實世界中光照的多次反射效果。
目前只用于靜態(tài)物體,需要進(jìn)行預(yù)計算,有兩種方式,一是烘焙GI,將場景中光的多次反射效果存儲下來,二是實時GI,將所有可能的光照反射信息保存,光源可變。
限制條件:只能作用于靜態(tài)物體(動態(tài)物體可以使用光照探針來近似全局光照效果),實時GI仍然會增加計算量,受限平臺最好使用烘焙GI。
探針(Probe)
1.復(fù)雜的光照和反射需要進(jìn)行預(yù)先計算,因此只能用于靜態(tài)物體中。
2.使用探針可以將空間中的預(yù)計算信息保存。
3.動態(tài)物體使用附近的探針上的信息,使得動態(tài)物體也具備了類似靜態(tài)物體的光照或反射效果
光照探針
用于全局光照明系統(tǒng),探針保存光照信息
新建探針)在層級窗口右鍵-->light-->Light Probe Group
反射探針
用于保存空間中不同區(qū)域的反射信息,用來得到物體表面的反射效果
新建探針)在層級窗口右鍵-->light-->Reflection Probe
???
在反射探針的Box Projection屬性勾選之后,渲染出現(xiàn)全局光照明的效果,之前不知是否成功,原因未知。