遊戲引擎筆記(四)遊戲中的陰影技術

2021-09-13 02:34:46 字數 2326 閱讀 6487

幾個重要的緩衝區:

1.後台緩衝區 render target view(渲染目標檢視)

2.前台緩衝區 (不能直接繪製到前台緩衝區,會產生頻閃現象)

使用翻轉鏈(swap chain)機制 (前後臺緩衝區解析度相同)

超取樣技術 將後台緩衝區的影象壓縮到前台緩衝區,使影象密度提高

3.深度緩衝區

與後台緩衝區的畫素資訊一一對應

模板緩衝:(動態修改

模板值用來控制某個畫素是否能夠被繪製在場景中,通過特定的處理,可以是程式渲染或是不渲染某些畫素點。

工作原理:

d3d在模板緩衝上執行乙個基於逐畫素的測試。對於目標表面上的每乙個畫素,它使用模板緩衝中相應的值——模板參考值和模板掩碼值來執行測試。

將模板參考值與模板掩碼進行逐位and運算。

將當前畫素的模板值與模板掩碼進行主謂and運算。

用比較函式比較前兩步得到的結果。

stencilref & stencilreadmask ^ value & stencilreadmask(參考值和掩碼值由程式設計師設定)

當前畫素是否顯示由深度測試和模板測試共同決定。(若深度測試沒有通過,則無需再進行模板測試)

模板緩衝的應用範疇:

可以使用模板緩衝來將2d或3d影象合成到乙個3d場景中。

平面陰影:

獲取某個物體在平面上的投影體,使用alpha混合技術給投影體新增黑色然後利用模板緩衝,將投影體渲染到投影平面之上。

實時陰影技術:

能夠隨著光源和環境變化,動態產生陰影的技術稱為實時陰影技術。

陰影技術可以分為四類:

用乙個特定形狀的黑色貼圖來表示陰影

平面陰影

體積陰影(shadow volume)

shadow volume技術:

shadow volume技術的基本原理是根據光源和遮蔽物點額位置關係計算出場景中會產生陰影的區域,及陰影錐。然後對所有物體進行檢測,已確定其會不會受陰影的影響。

shadow volume最大的特點在於,它並不是利用「把物體投影到表面「的方式來產生陰影,而是去找出場景中,有哪些畫素是在陰影中。

在direct3d中,所有模型都是有三角形面組成 ,根據光源,可以繪製出陰影錐,即shadow volume。

shadow volume技術原理:

可以利用模板緩衝區來得到1+2-3的那些畫素

1)在繪製1和2的麵時,讓模板緩衝區加

2)在繪製3的麵時,將模板緩衝區減1

3)把所有模板部位令的畫素利用alpha混合方式使其亮度降低,就可以達到繪製陰影的效果。

z-pass演算法:

z-pass是shadow volume一開始的標準演算法,用來確定某乙個畫素是否處於陰影當中,整個演算法可以分為三步:

1)獲取depth map(所有物體的深度值)。

2)計算模板值。

3)判斷畫素是否處於陰影中。

對於shadow volume的面對視點一面(front face), 如果深度測試的結果通過(pass),那麼和這個畫素對應的模板值加1。如果深度測試的結果是失敗的,模板值不變。而對於shadow volume的遠離視點的一側,如果深度測試的結果是失敗,模板值減1,如果成功,模板值不變。

只能解決視點在陰影體外面的情況。

z-fail演算法:

z-fail演算法的模板值計算方式與z-pass演算法不同

對於他的背面,如果測試的結果是失敗的模板值加一,如果深度測試的結果成功,模板值不變。

對於shadow volume的正面,如果深度測試的結果是失敗的,模板值減1,如果深度測試的結果是成功的,模板值不變。

基於cpu的方法:

所謂的陰影錐實際上就是從光源想物體的邊緣做射線,射線延伸到一定距離或無窮遠處得到的錐形。

邊緣指的是物體的輪廓線,即從光源的角度看物體所得到的輪廓線。

建立陰影錐的過程分為5步:

1)遍歷模型的所有三角形

2)判斷三角形面與光源的關係

3)對於面向光源的三角形,將所有的三條邊壓入乙個棧,和已經存在的邊緣進行比較,如果發現重複的邊,則將重複的邊都刪除。

4)檢測過所有三角形的所有邊以後,棧裡面剩下的邊就是針對當前光源位置的物體輪廓線

5)根據光源方向,利用cpu或者將這些輪廓線投射出去形成shadow volume。

遊戲中的光影技術

轉至乙個遊戲開發技術文章 這是針對遊戲中的光影技術的乙個講座,是在中國的遊戲開發大會上的乙個講座。演講人來自nvidia,比較整體的介紹了下當時遊戲中的光影技術。以下是演講內容的一些整理 講座一開始主要介紹了一些光照方面的計算和光照方面的一些理論。重點介紹了光照和材質部分的內容,部分內容偏向於程式或...

遊戲引擎剖析(四)

第4部份 模型與動畫,細節級別 角色建模與動畫 你的角色模型在螢幕上看起來怎麼樣,怎樣容易建立它們,紋理,以及動畫對於現代遊戲試圖完成的 消除不可信 因素來說至關重要。角色模型系統逐漸變得複雜起來,包括較高的多邊形數量模型,和讓模型在螢幕上移動的更好方式。如今你需要乙個骨骼模型系統,有骨架和網格細節...

遊戲引擎剖析(四)

第4部份 模型與動畫,細節級別 角色建模與動畫 你的角色模型在螢幕上看起來怎麼樣,怎樣容易建立它們,紋理,以及動畫對於現代遊戲試圖完成的 消除不可信 因素來說至關重要。角色模型系統逐漸變得複雜起來,包括較高的多邊形數量模型,和讓模型在螢幕上移動的更好方式。如今你需要乙個骨骼模型系統,有骨架和網格細節...