光照:技術(shù)信息和術(shù)語(yǔ)
表面 (Surface):場(chǎng)景中所有網(wǎng)格的所有三角形都稱為場(chǎng)景的表面。表面點(diǎn)是為場(chǎng)景定義的任意三角形內(nèi)的點(diǎn)。
發(fā)光 (Emitted Light):這是直接發(fā)射到場(chǎng)景表面的光。
直射光 (Direct Light):這是發(fā)出后照射到場(chǎng)景的表面再被反射到傳感器(例如眼睛的視網(wǎng)膜或攝像機(jī))中的光。一個(gè)光源的直接貢獻(xiàn)是從該光源到達(dá)傳感器的任何直射光。
間接光 (Indirect Light):這是發(fā)出后接觸到場(chǎng)景的表面至少兩次并最終反射到傳感器中的光。一個(gè)光源的間接貢獻(xiàn)是從該光源到達(dá)傳感器的任何間接光。

場(chǎng)景中的模擬光的反射
粗糙表面會(huì)在許多方向上散射入射光,可照亮未直接從光源獲得光照的表面。場(chǎng)景中的表面越粗糙,此類陰影區(qū)域就會(huì)越明亮。過(guò)去,這種效果是通過(guò)定義一個(gè)額外的環(huán)境光顏色來(lái)近似計(jì)算的,這種顏色只是簡(jiǎn)單地添加到直接光照的結(jié)果中,因此陰影中的表面看起來(lái)不會(huì)完全變黑。更復(fù)雜的近似算法使用漸變來(lái)根據(jù)表面的方向模擬不同的環(huán)境顏色,甚至使用球諧函數(shù)來(lái)獲得更復(fù)雜的環(huán)境光照。
光滑或光澤表面可在可預(yù)測(cè)的方向上反射大部分入射光,從而在材質(zhì)上產(chǎn)生可見(jiàn)的高光。光滑表面的極端例子是鏡子:來(lái)自一個(gè)方向的所有入射光恰好反射到另一個(gè)方向。光澤反射的一種變體是半透明材質(zhì),這種材質(zhì)還可在入射光進(jìn)入和再次離開(kāi)材質(zhì)時(shí)折射光線。
在間接光照的情況下,光路與場(chǎng)景表面至少有兩次交互。這些交互可以是光澤表面和/或粗糙表面反射的組合。例如,照射到粗糙表面的光澤反射/折射將顯示從所有觀察方向可見(jiàn)的聚焦明暗圖案,稱之為焦散。照射到另一個(gè)粗糙表面的粗糙反射通常稱為環(huán)境光照。
由于光在場(chǎng)景表面上多次反射的性質(zhì),正確的解決方案需要考慮整個(gè)場(chǎng)景及其所有相關(guān)光路的所有表面材質(zhì)屬性和光交互。因此有了全局光照一詞。
解決問(wèn)題
射線追蹤是在計(jì)算機(jī)圖形學(xué)中解決這一問(wèn)題的非常巧妙的方法,因?yàn)樗噲D通過(guò)追蹤場(chǎng)景中的光線路徑來(lái)模擬現(xiàn)實(shí)世界中實(shí)際發(fā)生的情況。目前,電影業(yè)已完全轉(zhuǎn)向射線追蹤技術(shù)來(lái)生成圖像。
遺憾的是,射線追蹤仍然太慢,無(wú)法在大多數(shù)實(shí)時(shí)圖形中使用;取而代之是采用光柵化 (rasterization)?作為生成圖像的標(biāo)準(zhǔn)方法。與射線追蹤不同,光柵化不能跟蹤場(chǎng)景中的任意光路。事實(shí)上,光柵器只能計(jì)算光路的一段。這就是實(shí)時(shí)圖形中的光照變得復(fù)雜的原因。
由于光柵器不能跟蹤光線,因此實(shí)時(shí)光照集中于具有最明顯影響的光照部分。這些部分就是發(fā)射部分,更常見(jiàn)的說(shuō)法是直接光照。即使在這樣的情況下,光路也已經(jīng)由兩段組成:一段是從攝像機(jī)到表面,另一段是從表面到光源。
第一段是從攝像機(jī)位置渲染的視圖。為了計(jì)算第二段,需要使用陰影貼圖之類的技術(shù)。由于陰影貼圖特定于每個(gè)投射陰影的光源,因此必須為每個(gè)光源生成唯一的陰影貼圖。投射陰影的光源越多,需要生成的陰影貼圖也越多。根據(jù)光源的數(shù)量,所需的渲染時(shí)間可能會(huì)很快變得過(guò)長(zhǎng)。陰影貼圖的另一個(gè)缺點(diǎn)是它們的分辨率有限。這會(huì)導(dǎo)致塊狀陰影。因此,陰影貼圖既存在圖像質(zhì)量問(wèn)題(由于分辨率有限),也存在性能問(wèn)題(由于存儲(chǔ)陰影貼圖的內(nèi)存要求以及每幀生成陰影貼圖所花費(fèi)的時(shí)間)。
與離線渲染不同,游戲?qū)︿秩編臅r(shí)間長(zhǎng)度有一定的嚴(yán)格限制。例如,在 VR 應(yīng)用程序中,為了實(shí)現(xiàn) 90 幀/秒 (FPS) 的幀率,繪制一個(gè)幀的時(shí)間為 11.11 毫秒 (ms)。在需要玩家快速反應(yīng)的游戲中,為了達(dá)到 60 FPS 的幀率,繪制一個(gè)幀的時(shí)間為 16.66ms。目標(biāo)幀率為 30 FPS 的游戲繪制一個(gè)幀的時(shí)間為 33.33ms。這些時(shí)間還必須包括應(yīng)用程序或游戲其余部分(例如 AI 和物理系統(tǒng))的計(jì)算工作。因此,盡可能提高效率以充分利用系統(tǒng)非常重要。所有渲染必須在少于繪制一個(gè)幀所需的時(shí)間內(nèi)發(fā)生。
總結(jié)
總結(jié)一下,需要解決的兩個(gè)主要問(wèn)題如下:
1.如何處理因計(jì)算直接光照的陰影而導(dǎo)致的性能損失。
2.如何處理間接光照(注意:在實(shí)時(shí)圖形的背景下,全局光照與間接光照同義,即使全局光照的實(shí)際意義也包括直接光照)。