一、Culling & Depth Testing
1.1 Culling
對于實時交互的3D環(huán)境而言,現(xiàn)實的速度和效率是非常重要的。雖然現(xiàn)在的硬件能力非常的快,但是要想保持30FPS的同時處理數(shù)十萬的三角形,以現(xiàn)在的主流機器來說還是有些困難的。
為了解決這種問題,人們提出了很多方法,其中有LOD,有Culling。這兩種方法并不矛盾,而且我們往往需要在culling的基礎(chǔ)上再使用LOD進一步解決pipeline的負擔(dān)。
剔除是一種通過避免渲染背對觀察者的幾何體面來提高性能的優(yōu)化措施。所有幾何體都包含正面和反面。剔除基于大多數(shù)對象都是封閉的事實;如果你有一個立方體,你不會看到背離你的那一面(總是只有一面在你的前方),因此我們不需要繪制出背面。因此也被稱做背面剔除。
一言以蔽之,所謂剔除,就是被擋住或視角以外的我們看不到的物體,因為它們無關(guān)緊要,所以我們就不去繪制,以節(jié)省資源,提高場景的運行效率。

1.2 Depth Testing
在復(fù)雜的場景中,通常有多個物體需要繪制,這些物體之間通常會存在遮擋關(guān)系,離觀察點較遠的物體會因為近處物體的者的遮擋而不可見或只有部分可見,Direct3D圖形系統(tǒng)提供了深度測試功能來實現(xiàn)這種效果。深度測試可以簡化復(fù)雜場景的繪制,確保只有場景內(nèi)的對象的最靠近的表面參與繪制。
1.3 Culling & Depth Testing基本語法
語句之一:Cull Back | Front| Off
此語句用于控制幾何體的哪一面會被剔除(也就是不被繪制) 。其中:
Cull Back—— 不繪制背離觀察者的幾何面
Cull Front—— 不繪制面向觀察者的幾何面,用于由內(nèi)自外的旋轉(zhuǎn)對象
Cull Off —— 顯示所有面。用于特殊效果。
語句之二:ZWrite On | Off
此語句用于控制是否將來之對象的像素寫入深度緩沖(默認(rèn)開啟),如果需要繪制純色物體,便將此項打開,也就是寫上ZWrite On。如果要繪制半透明效果,關(guān)閉深度緩沖,則用ZWrite Off。
語句之三:ZTest Less |Greater | LEqual | GEqual | Equal | NotEqual | Always
此語句用于控制深度測試如何執(zhí)行。
缺省值是LEqual (繪制和存在的對象一致或是在其中的對象;隱藏其背后的對象),含義列舉對應(yīng)如下:
Greater 只渲染大于AlphaValue值的像素
GEqual 只渲染大于等于AlphaValue值的像素
Less 只渲染小于AlphaValue值的像素
LEqual 只渲染小于等于AlphaValue值的像素
Equal 只渲染等于AlphaValue值的像素
NotEqual 只渲染不等于AlphaValue值的像素
Always 渲染所有像素,等于關(guān)閉透明度測試。等于用AlphaTest Off
Never 不渲染任何像素
語句之四:Offset Factor ,Units
此語句用兩個參數(shù)(Facto和Units)來定義深度偏移。
Factor參數(shù)表示 Z縮放的最大斜率的值。
Units參數(shù)表示可分辨的最小深度緩沖區(qū)的值。
二、Alpha Testing
2.1 概念
Unity中,Alpha測試(Alpha Testing)是阻止像素被寫到屏幕的最后機會。在Pineline中Alpha測試的位置如下:

在最終渲染出的顏色被計算出來之后,可選擇通過將顏色的透明度值和一個固定值比較。如果比較的結(jié)果失敗,像素將不會被寫到顯示輸出中。
Alpha測試在渲染凹形物體的透明部分時非常有用。顯卡上有著每個像素寫到屏幕上的深度記錄。如果一個新的像素比原來的像素的深度深,那么新的像素就不會被寫到屏幕中。
2.2 Alpha測試相關(guān)語句
語句之一:AlphaTest Off
此語句用于渲染所有像素
語句之二:AlphaTest comparison AlphaValue
此語句用于設(shè)定透明度測試只渲染在某一確定范圍內(nèi)的透明度值的像素。其中的comparison取值為下表之一:
Greater Only render pixels whose alpha is greater than AlphaValue. 大于
GEqual
Only render pixels whose alpha is greater than or equal to AlphaValue. 大于等于
Less
Only render pixels whose alpha value is less than AlphaValue. 小于
LEqual
Only render pixels whose alpha value is less than or equal to from AlphaValue. 小于等于
Equal
Only render pixels whose alpha value equals AlphaValue. 等于
NotEqual
Only render pixels whose alpha value differs from AlphaValue. 不等于
Always
Render all pixels. This is functionally equivalent to AlphaTest Off.
渲染所有像素,等于關(guān)閉透明度測試AlphaTest Off
Never
Don't render any pixels. 不渲染任何像素
而AlphaValue為一個范圍在0到1之間的浮點值。也可以是一個指向浮點屬性或是一個范圍屬性,在后一種情況下需要使用標(biāo)準(zhǔn)的方括號寫法標(biāo)注索引名字,如([變量名]).
三、霧效設(shè)置
3.1 霧效
霧效(Fog)參數(shù)用于控制霧相關(guān)的渲染。
在計算機圖形學(xué)中,霧化是通過混合已生成的像素的顏色和基于到鏡頭的距離來確定的最終的顏色來完成的。霧化不會改變已經(jīng)混合的像素的透明度值,只是改變RGB值。

Unity中的缺省霧設(shè)定是基于Edit->RenderSettings中的設(shè)置的,且霧模式既可以是Exp2也可以是關(guān)閉;密度和顏色完全取自設(shè)定。
注意如果使用了片段著色器的話,著色器中的霧設(shè)定仍然是有效的。如果平臺沒有對固定管線的霧功能支持,Unity會實時補上著色器以支持需要的霧模式。
3.2 相關(guān)語句
語句之一:Fog { FogCommands }
此語句用于設(shè)定霧命令的內(nèi)容,具體的填在大括號之中的內(nèi)容見下面的語句。
語句之二:Mode Off | Global | Linear | Exp | Exp2
此語句用于定義霧模式。缺省是全局的,依據(jù)霧在渲染設(shè)定中是否打開確定可從無變化到平方值
語句之三:Color ColorValue
此語句用于設(shè)定霧的顏色值。
語句之四:Density FloatValue
此語句以指數(shù)的方式設(shè)定霧的密度。
語句之五:Range FloatValue , FloatValue
此語句用于為linear類型的霧設(shè)定遠近距離值。