實時陰影,即計算機圖形系統通過相應的陰影生成算法來實時生成顯示陰影,提高圖形的真實感及對複雜場景的適應性。
技術來源,技術特點,實現方法,
技術來源
陰影是計算機圖形學中一個很重要的部分,無論是在3D動畫還是遊戲裡,正是通過陰影創造出了許多生動甚至奇異的視覺效果。在計算機圖形世界中,正是陰影和其它各種光照的相互結合,才使得計算機可以用來為我們塑造出各種精彩異常的人物或場景。陰影的加入使得物體更加具有立體感,也有助於我們理解物體間的相互位置關係和大小。陰影分為兩種:硬陰影和軟陰影。
技術特點
在現實世界中,陰影效應因光線被物體遮擋而產生,而在3D環境下同樣通過模擬這一機制來創建陰影:將物體沿著光線的方向擴展成一個稜台,該稜台內的所有物體都處於陰影之中,它也被稱為“陰影錐”或“陰影體”。GPU通過模板緩衝來判斷某個物體是否在這個陰影錐內。模板緩衝好比是蠟染中的蠟層,可以遮罩住3D畫面的任意區域,這樣,這些區域就暫時不被繪製,之後再對整個畫面作光照計算。由於陰影錐內的物體被模板緩衝遮住,光照計算並不會涉及到其中的物體,體現在視覺上就是陰影錐內的物體無法被光線“照到”,陰影效果由此誕生。實時陰影是一種相對高級的技術,在每一幀,場景中的幾何體或燈光位置變動時都要計算一個叫做shadow volume 的物體。shadow volume實際是一個三維物體,是投影物體的輪廓,總是從光源方向投出。接下來,shadow volume在模板緩衝區中被渲染兩次,開始時僅僅正面面對的多邊形被渲染,模板緩衝區每次數值被增加。然後背面面對的多邊形被渲染,模板緩衝區值被減小。一般來說,所有增加的值和減少的值將互相抵消,但是,因為場景中已經具有被渲染的正常的圖元,當shadow volume被渲染時,一些像素將不能通過zbuffer測試,所有留在模板緩衝區中的值對應的像素處於陰影區。保留的模板緩衝區內容被用做一個模板,作為一個巨大的全包圍的黑方塊被alpha-blended到場景中,使用模板緩衝區作為模板,僅僅陰影中的像素是暗的。
實現方法
實時陰影的實現方法有很多種,現在比較流行的主要是shadow mapping和shadow volume(陰影體)。前者實現起來相對簡單,可以發揮現在GPU可程式流水線的能力,但是由於先天不足,shadow mapping在處理動態光源/物體的時候開銷過大,經常作為一種靜態場景中的廉價替代物。而Shadow volume的強項恰恰是shadow mapping的短處。