【《Real-Time Rendering 3rd》 提煉總結】(九) 第十章 · 遊戲開發中基於圖像的渲染技術總結
這是一篇近萬字的總結式文章,關於遊戲開發中基於圖像的渲染(Image-Based Rendering,簡稱IBR)技術的方方面面,將總結《RTR3》書中第十章提到的16種常用的IBR渲染技術。
他們包括:
- 渲染譜 The Rendering Spectrum
- 固定視角的渲染 Fixed-View Rendering
- 天空盒 Skyboxes
- 光場渲染 Light Field Rendering
- 精靈與層 Sprites and Layers
- 公告板 Billboarding
- 粒子系統 Particle System
- 替代物 Impostors
- 公告板雲 Billboard Clouds
- 圖像處理 Image Processing
- 顏色校正 Color Correction
- 色調映射 Tone Mapping
- 鏡頭眩光和泛光 Lens Flare and Bloom
- 景深 Depth of Field
- 運動模糊 Motion Blur
- 體渲染 Volume Rendering
在過去很多年裡,基於圖像的渲染(Image-Based Rendering ,簡稱IBR),已經自成一派,逐漸發展成了一套廣泛的渲染理念。正如其字面所表示的,圖像是用於渲染的主要數據來源。用圖像表示一個物體的最大好處在於渲染消耗與所要繪製的像素數量成正比,而不是幾何模型的頂點數量。因此,使用基於圖像的渲染是一種有效的渲染模型的方法。除此之外,IBR技術還有其他一些更為廣泛的用途,比如雲朵,皮毛等很多很難用多邊形來表示的物體,卻可以巧妙運用分層的半透明圖像來顯示這些複雜的表面。
OK,下面開始正文,對這16種常見的基於圖像的渲染技術,分別進行介紹。
一、渲染譜 The Rendering Spectrum
眾所周知,渲染的目的就是在屏幕上渲染出物體,至於如何達到結果,主要依賴於用戶的選擇,白貓黑貓,抓到老鼠的就是好貓。而用多邊形將三維物體顯示在屏幕上,並非是進行三維渲染的唯一方法,也並非是最合適的方法。多邊形具有從任何視角以合理的方式表示對象的優點,當移動相機的時候,物體的表示可以保持不變。但是,當觀察者靠近物體的時候,為了提高顯示質量,往往希望用比較高的細節層次來表示模型。與之相反,當物體位於比較遠的地方時,就可以用簡化形式來表示模型。這就是細節層次技術(Level Of Detail,LOD)。使用LOD技術主要目的是為了加快場景的渲染速度。
還有很多技術可以用來表示物體逐漸遠離觀察者的情形,比如,可以用圖像而不是多邊形來表示物體,從而減少開銷,加快渲染速度。另外,單張圖片可以很快地被渲染到屏幕上,用來表示物體往往開銷很小。
如《地平線:黎明》遠處的樹木,即是採用公告板技術(Billboard)替換3D樹木模型進行渲染。(關於公告板技術的一些更具體的總結,詳見本文第六節)。
圖1 《地平線:黎明》中利用了Billboard進行畫面的渲染
Lengyel於1998在《The Convergence of Graphics and Vision》一文中提出了一種表示渲染技術連續性的方法,名為The Rendering Spectrum 渲染譜,如下圖所示。
圖2 渲染譜 The Rendering Spectrum(RTR3書中版本)
圖3 渲染譜 The Rendering Spectrum(Lengyel 1998論文版本)
可以將渲染譜理解為渲染的金字塔。從左到右,由簡單到複雜,由二維圖像到幾何模型,從外觀特徵到物理渲染。
二、固定視角的渲染 Fixed-View Rendering
固定視角的渲染(Fixed-View Rendering)技術,通過將複雜幾何模型轉換為可以在多幀中重複使用的一組簡單的buffer來節省大量渲染時間與性能。
對於複雜的幾何和著色模型,每幀去重新渲染整個場景很可能是昂貴的。可以通過限制觀看者的移動能力來對渲染進行加速。 最嚴格的情況是相機固定在位置和方位,即根本不移動。而在這種情況下,很多渲染可以只需做一次。
例如,想像一個有柵欄的牧場作為靜態場景,一匹馬穿過它。牧場和柵欄渲染僅一次,存儲其顏色和Z緩衝區。每幀將這些buffer複製到可顯示的顏色和Z緩衝中。為了獲得最終的渲染效果,馬本身是需要渲染的。如果馬在柵欄後面,存儲和複製的z深度值將把馬遮擋住。請注意,在這種情況下,馬不能投下陰影,因為場景無法改變。可以進行進一步的處理,例如,可以確定出馬影子的區域,根據需求進行處理。關鍵是對於要顯示的圖像的顏色何時或如何設置這點上,是沒有限制的。固定視角的特效(Fixed-View Effects),可以通過將複雜幾何模型轉換為可以在多幀中重複使用的一組簡單的buffer來節省大量時間。
在計算機輔助設計(CAD)應用程序中,所有建模對象都是靜態的,並且在用戶執行各種操作時,視圖不會改變。一旦用戶移動到所需的視圖,就可以存儲顏色和Z緩衝區,以便立即重新使用,然後每幀繪製用戶界面和突出顯示的元素。 這允許用戶快速地注釋,測量或以其他方式與複雜的靜態模型交互。通過在G緩衝區中存儲附加信息,類似於延遲著色的思路,可以稍後執行其他操作。 例如,三維繪畫程序也可以通過存儲給定視圖的對象ID,法線和紋理坐標來實現,並將用戶的交互轉換為紋理本身的變化。
一個和靜態場景相關的概念是黃金線程(Golden Thread)或自適應(Adaptive Refinement)渲染。其基本思想是,當視點與場景不運動時,隨著時間的推移,計算機可以生成越來越好的圖像,而場景中的物體看起來會更加真實,這種高質量的繪製結果可以進行快速交換或混合到一系列畫面中。這種技術對於CAD或其他可視化應用來說非常有用。而除此之外,還可以很多不同的精化方法。一種可能的方法是使用累積緩衝器(accumulation buffer)做抗鋸齒(anti- aliasing),同時顯示各種累積圖像。另外一種可能的方法是放慢每像素離屏著色(如光線追蹤,環境光遮蔽,輻射度)的速度,然後漸進改進之後的圖像。
在RTR3書的7.1節介紹一個重要的原則,就是對於給定的視點和方向,給定入射光,無論這個光亮度如何計算或和隔生成這個光亮度的距離無關。眼睛沒有檢測距離,僅僅顏色。在現實世界中捕捉特定方向的光亮度可以通過簡單地拍一張照片來完成。
QuickTime VR是由蘋果公司在1995年發布的VR領域的先驅產品,基本思路是用靜態圖片拼接成360度全景圖。QuickTime VR中的效果圖像通常是由一組縫合在一起的照片,或者直接由全景圖產生。隨著相機方向的改變,圖像的適當部分被檢索、扭曲和顯示。雖然這種方法僅限於單一位置,但與固定視圖相比,這種技術具有身臨其境的效果,因為觀看者的頭部可以隨意轉動和傾斜。
Kim,Hahn和Nielsen提出了一種有效利用GPU的柱面全景圖,而且通常,這種全景圖也可以存儲每個紋素的距離內容或其他值,以實現動態對象與環境的交互。
如下的三幅圖,便是是基於他們思想的全景圖(panorama),使用QuickTime VR來渲染出的全景視野範圍。其中,第一幅是全景圖原圖,後兩幅圖是從中生成的某方向的視圖。注意觀察為什麼這些基於柱面全景圖的視圖,沒有發生扭曲的現象。
圖4 全景圖原圖
圖5 通過全景圖得到的視圖1
圖6 通過全景圖得到的視圖2
三、天空盒 Skyboxes
對於一些遠離觀眾的物體,觀眾移動時幾乎沒有任何視差效果。換言之,如果你移動一米,甚至一千米,一座遙遠的山本身看起來通常不會有明顯的不同。當你移動時,它可能被附近的物體擋住視線,但是把那些物體移開,山本身看起來也依舊一樣。天空盒就屬於這種類型的物體。
圖7 基於天空盒渲染的場景 @mad max
環境貼圖(environment map)可以代表本地空間入射光亮度。雖然環境貼圖通常用於模擬反射,但它們也可以直接用來表示環繞環境的遠處物體。任何獨立於視圖的環境地圖表示都可以用於此目的;立方體貼圖(cubic maps)是最為常見的一種環境貼圖。環境貼圖放置在圍繞著觀察者的網格上,並且足夠大以包含場景中所有的對象。且網格的形狀並不重要,但通常是立方體貼圖。如下圖,在該圖所示的室內環境更像是一個QuickTime VR全景的無約束版本。觀眾可以在任何方向觀察這個天空盒,得到很好的真實體驗。但同樣,任何移動都會破壞這個場景產生的真實感錯覺,因為移動的時候,並不存在視差。
圖8 一個典型的立方體環境貼圖
環境貼圖通常可以包含相對靠近反射對象的對象。因為我們通常並沒有多精確地去在乎反射的效果,所以這樣的效果依然非常真實。而由於視差在直接觀看時更加明顯,因此天空盒通常只包含諸如太陽,天空,遠處靜止不動的雲和山脈之類的元素。
圖9 玻璃球折射和反射效果的一個立方體環境貼圖,這個map本身用可作天空盒。
為了使天空盒看起來效果不錯,立方體貼圖紋理解析度必須足夠,即每個屏幕像素的紋理像素。 必要解析度的近似值公式:
其中,fov表示視域。該公式可以從觀察到立方體貼圖的表面紋理必須覆蓋90度的視域(水平和垂直)的角度推導出。並且應該儘可能隱藏好立方體的接縫處,最好是能做到無縫的銜接,使接縫不可見。一種解決接縫問題的方法是,使用六個稍微大一點的正方形,來形成一個立方體,這些正方形的每個邊緣處彼此相互重疊,相互探出。這樣,可以將鄰近表面的樣本複製到每個正方形的表面紋理中,並進行合理插值。
圖10 基於天空盒渲染的場景 @rage
四、光場渲染 Light Field Rendering
所謂光場(Light Field),可以理解為空間中任意點發出的任意方向的光的集合。
而光場渲染(Light Field Rendering),可以理解為在不需要圖像的深度信息或相關性的條件下,通過相機陣列或由一個相機按設計的路徑移動,把場景拍攝下來作為輸出圖像集。對於任意給定的新視點,找出該視點鄰近的幾個採樣點進行簡單的重新採樣和插值,就能得到該視點處的視圖。
magic leap公司目前的原型產品,Nvidia 公司的near-eye light field display,Lytro公司發布的光場相機,都是基於Light Field技術。
圖11 Lytro公司的光場相機
圖12 SIGGRAPH 2014會議上,MIT』s Camera CultureGroup介紹了一種基於開普勒望遠鏡中投影機和光學技術的無眼鏡3D的新方法。 他們提出的「壓縮光場投影(Compressive Light Field Projection)」新方法由單個設備組成,並沒有機械移動的物件。
五、精靈與層 Sprites and Layers
最基本的基於圖像的渲染的圖元之一便是精靈(sprite)。精靈(sprite)是在屏幕上移動的圖像,例如滑鼠游標。精靈不必具有矩形形狀,而且一些像素可以以透明形式呈現。對於簡單的精靈,屏幕上會顯示一個一對一的像素映射。存儲在精靈中的每個像素將被放在屏幕上的像素中。可以通過顯示一系列不同的精靈來生成動畫。
圖13 基於Sprite層級製作的《雷曼大冒險》@UBISOFT
更一般的精靈類型是將其渲染為應用於總是面向觀看者的多邊形的圖像紋理。圖像的Alpha通道可以為sprite的各種像素提供全部或部分透明度。這種類型的精靈可以有一個深度,所以在場景本身,可以順利地改變大小和形狀。一組精靈也可以用來表示來自不同視圖的對象。對於大型物體,這種用精靈來替換的表現效果會相當弱,因為從一個精靈切換到另一個時,會很容易穿幫。也就是說,如果對象的方向和視圖沒有顯著變化,則給定視圖中的對象的圖像表示可以對多個幀有效。而如果對象在屏幕上足夠小,存儲大量視圖,即使是動畫對象也是可行的策略。
考慮場景的一種方法是將其看作一系列的層(layers),而這種思想也通常用於二維單元動畫。每個精靈層具有與之相關聯的深度。通過這種從前到後的渲染順序,我們可以渲染出整個場景而無需Z緩衝區,從而節省時間和資源。
圖14 基於Sprite層級製作的《雷曼大冒險》@UBISOFT
六、公告板 Billboarding
我們將根據觀察方向來確定多邊形面朝方向的技術叫做公告板(Billboarding,也常譯作布告板)。而隨著觀察角度的變化,公告板多邊形的方向也會根據需求隨之改變。與alpha紋理和動畫技術相結合,可以用公告板技術表示很多許多不具有平滑實體表面的現象,比如煙,火,霧,爆炸效果,能量盾(Energy Shields),水蒸氣痕迹,以及雲朵等。如下文中貼圖的,基於公告板渲染出的雲朵。
圖15 一棵由公告板技術渲染出的樹木
圖16 給定表面的法線向量n和近似向上方向的向量u,通過創建一組由三個相互垂直的向量,就可以確定公告板的方向。其中,左圖是互相垂直的u和n。中圖是r向量通過u和n的叉乘得到,因此同時垂直於u和n,而在右圖中,對固定向量n和r進行叉乘就可以得到與他們都垂直的的向上向量u』
有三種不同類型的Billboard,分別是:
- Screen-Aligned Billboard 對齊於屏幕的公告板
- World-Oriented Billboard 面向世界的公告板
- Axial Billboard 軸向公告板
其中:
- Screen-Aligned Billboard的n是鏡頭視平面法線的逆方向,u是鏡頭的up。
- Axial Billboard的u是受限制的Axial, r = u* n,(n是鏡頭視平面法線的逆方向,或,視線方向的逆方向),最後再計算一次n = r * u,即n才是最後可行的代入M的n,表達了受限的概念。
- World-orientedbillboard就不能直接使用鏡頭的up做up,因為鏡頭roll了,並且所畫的billboard原本是應該相對世界站立的,按Screen-Aligned的做法就會隨鏡頭旋轉,所以此時應該r = u * n(u是其在世界上的up,n是鏡頭視線方向的逆方向),最後再計算一次u = r * n,即u才是最後的up,即非物體本身相對世界的up,亦非鏡頭的up。
所以公告板技術是一種看似簡單其實較為複雜的技術,它的實現變種較多。歸其根本在於:
- View Oriented / View plane oriented的不同
- Sphere/ Axial的不同
- Cameraup / World up的不同
如View Oriented 和View plane oriented的不同,得到的公告板效果就完全不同:
圖17 兩種公告板對其技術的頂視圖,左圖為view plane-aligned(視圖平面對齊),右圖為viewpoint-oriented(視點對齊),其面向的方向根據演算法的不同而有所不同。
圖18 使用world-oriented Billboard創建的雲層
在Unreal 4 Engine中,使用Axial Billboard作為樹木LOD中的一級的一些圖示 :
圖19 使用Axialbillboard作為樹木LOD中的一級 @Unreal 4 Engine
圖20 使用Axialbillboard作為樹木LOD中的一級 @Unreal 4 Engine
七、粒子系統 Particle System
粒子系統(Particle System)是一組分散的微小物體集合,其中這些微小物體按照某種演算法運動。粒子系統的實際運用包括模擬火焰,煙,爆炸,流水,樹木,瀑布,泡沫,旋轉星系和其他的一些自然現象。粒子系統並不是一種渲染形式,而是一種動畫方法,這種方法的思想是值粒子的生命周期內控制他們的產生,運動,變化和消失。
可以用一條線段表示一個實例,另外,也可以使用軸向公告板配合粒子系統,顯示較粗的線條。
除了爆炸,瀑布,泡沫以及其他現象以外,還可以使用粒子系統進行渲染。例如,可以使用粒子系統來創建樹木模型,也就是表示樹木的幾何形狀,當視點距離模型較近時,就會產生更多的粒子來生成逼真的視覺效果。
以下是一幅用粒子系統渲染樹木的示例:
圖21 基於粒子系統渲染的樹木
八、替代物 Impostors
作為一種公告板技術,替代物(Impostors)是通過從當前視點將一個複雜物繪製到一幅圖像紋理上來創建的,其中的圖像紋理用於映射到公告板上,渲染過程與替代物在屏幕上覆蓋的像素點數成正比,而不是與頂點數或者物體的複雜程度成正比。替代物可以用於物體的一些實例上或者渲染過程的多幀上,從而使整體性能獲得提升。
圖22 一幅樹的視圖和一個Impostors(Impostors的黑色背景是透明通道,在渲染時可以處理)
圖23 一幅相同的樹和Impostors的線框視圖
另外,Impostors和Billboard的紋理還可以結合深度信息(如使用深度紋理和高度紋理)進行增強。如果對Impostors和Billboard增加一個深度分量,就會得到一個稱為深度精靈(depth sprite)或者nailboard(譯作釘板,感覺很奇怪)的相關繪製圖元。也可以對Impostors和Billboard的紋理做浮雕紋理映射(relief texture mapping)。
關於Impostors,一篇很好的文章是William Damon的《Impostors Made Easy》,有進一步了解興趣的朋友可以進行延伸閱讀:
https://software.intel.com/en-us/articles/impostors-made-easy
九、公告板雲 Billboard Clouds
使用Imposters的一個問題是渲染的圖像必須持續地面向觀察者。如果遠處的物體正在改變方向,則必須重新計算Imposters的朝向。而為了模擬更像他們所代表的三角形網格的遠處物體,D′ecoret等人提出了公告板雲(Billboard Clouds)的想法,即一個複雜的模型通常可以通過一系列的公告板集合相互交叉重疊進行表示。我們知道,一個真實物體可以用一個紙模型進行模擬,而公告板雲可以比紙模型更令人信服,比如公告板雲可以添加一些額外的信息,如法線貼圖、位移貼圖和不同的表面材質。另外,裂紋沿裂紋面上的投影也可以由公告板進行處理。而D′ecoret等人也提出了一種在給定誤差容限內對給定模型進行自動查找和擬合平面的方法。
如下是在UNIGINE Engine(注意這不是虛幻引擎,經常會被看錯)中基於Billboard Clouds技術創建雲層效果的一個示例:
圖24 Billboard Clouds技術創建雲層示例圖 @UNIGINE Engine
圖25 Billboard Clouds技術創建雲層的最終效果圖 @UNIGINE Engine
十、圖像處理 Image Processing
圖像處理的過程,一般在像素著色器中進行,因為在像素著色器中,可以很好地將渲染過程和紋理結合起來,而且在GPU上跑像素著色器,速度和性能都可以滿足一般所需。
一般而言,首先需要將場景渲染成2D紋理或者其他圖像的形式,再進行圖像處理,這裡的圖像處理,往往指的是後處理(post effects)。而下文將介紹到的顏色校正(Color Correction)、色調映射(Tone Mapping)、鏡頭眩光和泛光(Lens Flare and Bloom)、景深(Depth of Field)、運動模糊(Motion Blur),一般而言都是後處理效果。
圖26 使用像素著色器進行圖像處理。左上為原始圖像;右上角顯示高斯差分操作,左下邊緣顯示檢測,右下混合的邊緣檢測與原圖像混合。
十一、顏色校正 Color Correction
色彩校正(Color correction)是使用一些規則來轉化給定的現有圖像的每像素顏色到其他顏色的一個過程。顏色校正有很多目的,例如模仿特定類型的電影膠片的色調,在元素之間提供一致的外觀,或描繪一種特定的情緒或風格。一般而言,通過顏色校正,遊戲畫面會獲得更好的表現效果。
圖27 左圖是準備進行顏色校正的原圖。右圖是通過降低亮度,使用卷積紋理(Volume Texture),得到的夜間效果。@Valve
顏色校正通常包括將單個像素的RGB值作為輸入,並向其應用演算法來生成一個新的RGB。顏色校正的另一個用途是加速視頻解碼,如YUV色彩空間到RGB色彩空間的轉換。基於屏幕位置或相鄰像素的更複雜的功能也可行,但是大多數操作都是使用每像素的顏色作為唯一的輸入。
對於一個計算量很少的簡單轉換,如亮度的調整,可以直接在像素著色器程序中基於一些公式進行計算,應用於填充屏幕的矩形。
而評估複雜函數的通常方法是使用查找表(Look-Up Table,LUT)。由於從內存中提取數值經常要比複雜的計算速度快很多,所以使用查找表進行顏色校正操作,速度提升是很顯著的。
圖28 原圖和經過色彩校正後的幾幅效果圖 @Unreal 4 Engine
圖29 原圖和經過顏色校正的效果圖 @Crysis
十二、色調映射 Tone Mapping
計算機屏幕具有特定的亮度範圍,而真實圖像具有更巨大的亮度範圍。色調映射(Tonemapping),也稱為色調複製(tone reproduction),便是將寬範圍的照明級別擬合到屏幕有限色域內的過程。色調映射與表示高動態範圍的HDR和HDRI密切相關:
- HDR,是High-Dynamic Range(高動態範圍)的縮寫,可以理解為一個CG的概念,常出現在計算機圖形學與電影、攝影領域中。
- HDRI是High-Dynamic Range Image的縮寫,即HDR圖像,高動態範圍圖像。
- 而實際過程中,HDR和HDRI兩者經常會被混用,都當做高動態範圍成像的概念使用,這也是被大眾廣泛接受的。
本質上來講,色調映射要解決的問題是進行大幅度的對比度衰減將場景亮度變換到可以顯示的範圍,同時要保持圖像細節與顏色等表現原始場景的重要信息。
根據應用的不同,色調映射的目標可以有不同的表述。在有些場合,生成「好看」的圖像是主要目的,而在其它一些場合可能會強調生成儘可能多的細節或者最大的圖像對比度。在實際的渲染應用中可能是要在真實場景與顯示圖像中達到匹配,儘管顯示設備可能並不能夠顯示整個的亮度範圍。
圖30 經過色調映射得到的高動態範圍圖像 @紐西蘭惠靈頓聖保羅教堂
十三、鏡頭眩光和泛光 Lens Flare and Bloom
鏡頭眩光(Lens flare)是由於眼睛的晶狀體或者相機的透鏡直接面對強光所產生的一種現象,由一圈光暈(halo)和纖毛狀的光環(ciliary corona)組成。光暈的出現是因為透鏡物質(如三稜鏡)對不同波長光線折射數量的不過而造成的,看上去很像是光周圍的一個圓環,外圈是紅色,內圈是紫紅色。纖毛狀的光環源於透鏡的密度波動,看起來像是從一個點發射出來的光線。Lens flare是近來較為流行的一種圖像效果,自從我們認識到它是一種實現真實感效果的技術後,計算機便開始模擬此效果。
圖31 鏡頭眩光效果 @WatchDogs
泛光(Bloom)效果,是由於眼睛晶狀體和其他部分的散光而產生,在光源附近出現的一種輝光。在現實世界中,透鏡無法完美聚焦是泛光效果的物理成因;理想透鏡也會在成像時由於衍射而產生一種名為艾里斑的光斑。
常見的一個誤解便是將HDR和Bloom效果混為一談。Bloom可以模擬出HDR的效果,但是原理上和HDR相差甚遠。HDR實際上是通過映射技術,來達到整體調整全局亮度屬性的,這種調整是顏色,強度等都可以進行調整,而Bloom僅僅是能夠將光照範圍調高達到過飽和,也就是讓亮的地方更亮。不過Bloom效果實現起來簡單,性能消耗也小,卻也可以達到不錯的效果。
圖32 Bloom效果 @ Battlefield3
圖33 《Battlefield 3》中的渲染效果,同時包含鏡頭眩光(Lens flare),泛光(Bloom)和Dirty Lens
十四、景深 Depth of Field
在光學領域,特別是攝影攝像領域,景深(Depth of field,DOF),也叫焦點範圍(focus range)或有效焦距範圍(effective focus),是指場景中最近和最遠的物體之間出現的可接受的清晰圖像的距離。換言之,景深是指相機對焦點前後相對清晰的成像範圍。在相機聚焦完成後,在焦點前後的範圍內都能形成清晰的像,這一前一後的距離範圍,便叫做景深。
圖34 攝影中典型的景深效果
雖然透鏡只能夠將光聚到某一固定的距離,遠離此點則會逐漸模糊,但是在某一段特定的距離內,影像模糊的程度是肉眼無法察覺的,這段距離稱之為景深。當焦點設在超焦距處時,景深會從超焦距的一半延伸到無限遠,對一個固定的光圈值來說,這是最大的景深。
景深通常由物距、鏡頭焦距,以及鏡頭的光圈值所決定(相對於焦距的光圈大小)。除了在近距離時,一般來說景深是由物體的放大率以及透鏡的光圈值決定。固定光圈值時,增加放大率,不論是更靠近拍攝物或是使用長焦距的鏡頭,都會減少景深的距離;減少放大率時,則會增加景深。如果固定放大率時,增加光圈值(縮小光圈)則會增加景深;減小光圈值(增大光圈)則會減少景深。
景深的效果在計算機圖形學中應用廣泛,電影,遊戲裡面經常會利用景深特效來強調畫面重點。相應的,已經有了很多成熟的演算法在不同的渲染方法,而光柵化可以很高效的實現現有的景深演算法。
圖35 景深效果 @Battlefield 4
圖36 景深效果 @ Witcher 2
十五、運動模糊 Motion Blur
現實世界中,運動模糊(Motion Blur,或譯為動態模糊),是因為相機或者攝影機的快門時間內物體的相對運動產生的。在快門打開到關上的過程中,感光材料因為受到的是物體反射光持續的照射成像。即在曝光的這個微小時間段內,對象依然在畫面中移動,感光材料便會記錄下這段時間內物體運動的軌跡,產生運動模糊。
我們經常在電影中看到這種模糊,並認為它是正常的,所以我們期望也可以在電子遊戲中看到它,以帶給遊戲更多的真實感。
若無運動模糊,一般情況下,快速移動的物體會出現抖動,在幀之間的多個像素跳躍。這可以被認為是一種鋸齒,但可以理解為基於時間的鋸齒,而不是基於空間的鋸齒。在這個意義上,運動模糊可以理解為是一種時間意義上的抗鋸齒。
正如更高的顯示解析度可以減少但不能消除鋸齒,提高幀速率並不能消除運動模糊的需要。而視頻遊戲的特點是攝像機和物體的快速運動,所以運動模糊可以大大改善畫面的視覺效果。而事實表明,帶運動模糊的30 FPS畫面,通常看起來比沒有帶運動模糊的60 FPS畫面更出色。
圖37 Motion Blur效果 @GTA5
在計算機繪製中產生運動模糊的方法有很多種。一個簡單但有限的方法是建模和渲染模糊本身。
實現運動模糊的方法大致分3種:
1、直接渲染模糊本身。通過在對象移動之前和之後添加幾何體來完成,並通過次序無關的透明,避免Alpha混合。
2、基於累積緩衝區(accumulationbuffer),通過平均一系列圖像來創建模糊。
3、基於速度緩衝器(velocity buffer)。目前這個方法最為主流。創建此緩衝區,需插入模型三角形中每個頂點的屏幕空間速度。通過將兩個建模矩陣應用於模型來計算速度,一個用於最後一個幀,一個用於當前模型。頂點著色器程序計算位置的差異,並將該向量轉換為相對的屏幕空間坐標。圖10.34顯示了速度緩衝器及其結果。
圖38 Motion Blur效果 @Battlefield4
運動模糊對於由攝像機運動而變得模糊的靜態物體來說比較簡單,因為往往這種情況下不需要速度緩衝區。如果需要的是攝像機移動時的運動感,可以使用諸如徑向模糊(radial blur)之類的固定效果。如下圖。
圖39 徑向模糊可以增強運動感 @《刺客信條》Ubisoft
十六、體渲染 Volume Rendering
體渲染(Volume Rendering),又稱立體渲染,體繪製,是一種用於顯示離散三維採樣數據集的二維投影的技術。體渲染技術中的渲染數據一般用體素(Volumeric Pixel,或Voxel)來表示,每個體素表示一個規則空間體。例如,要生成人頭部的醫學診斷圖像(如CT或MRI),同時生成256 x256個體素的數據集合,每個位置擁有一個或者多個值,則可以將其看做三維圖像。因此,體渲染也是基於圖像的渲染技術中的一種。
圖40 一個典型的體渲染Pipeline
體渲染技術流派眾多,常見的流派有:
- 體光線投射Volume ray casting
- 油彩飛濺技術Splatting
- 剪切變形技術Shear warp
- 基於紋理的體繪製Texture-based volume rendering
- 等。
圖41 基於Splatting和voxel在Unreal 4中進行的體渲染
圖42 Volume Cloud(體積雲)效果 @Unity 5
圖43 Volume Fog(體積霧)效果 @CRY ENGINE 3
其他參考
[1] https://udk-legacy.unrealengine.com/udk/Three/ColorGrading.html
[2] http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=DD633186A6579497B8B1434252979C80?doi=10.1.1.164.7222&rep=rep1&type=pdf
[3] http://blendermama.com/precise-distribution-of-trees-using-particles.html
[4] https://software.intel.com/en-us/articles/impostors-made-easy
[5] http://lightfield-forum.com/2014/05/mit-compressive-light-field-projection-system-for-new-glasses-free-3d-displays/
[6] https://bartwronski.com/2014/04/07/bokeh-depth-of-field-going-insane-part-1/
[7] http://blog.csdn.net/silangquan/article/details/17148757
[8] https://en.wikipedia.org/wiki/Skybox_(video_games)
[9] 胡孔明, 於瀛潔, 張之江. 基於光場的渲染技術研究[J].微計算機應用, 2008, 29(2): 22-27.
[10] https://forums.unrealengine.com/community/community-content-tools-and-tutorials/82804-free-trees-library
[11] http://unigine.com/cn/articles/procedural-content-generation2
[12] https://en.wikipedia.org/wiki/Tone_mapping
[13] https://en.wikipedia.org/wiki/Volume_rendering
推薦閱讀:
※從零開始手敲次世代遊戲引擎(MacOS特別篇 貳)
※遊戲不再是增量市場,它已經充滿了不確定性
※國外大學中,有哪些大學開設了網路遊戲開發,有公開課么?
※木七七陸家賢一年的思考與總結:戰略、新品以及管理?
※【內部分享】我眼中的CocosCreator by 陳棟