距英偉達發(fā)布RTX系列顯卡已經(jīng)過了快一年了条舔,一直想做一期關于光線追蹤技術(shù)的科普堆巧,但拖延癥晚期加上一直也沒能抽出時間虚婿,也就再拖赋铝,好在最近和小伙伴的游戲開發(fā)告一段落插勤,正值端午也閑的很,就著手寫了這篇科普,以下是正文农尖。
首先我們先來了解一下全局光照的概念区匠。
全局光照(Global Illumination,簡稱 GI)雏亚,是指既考慮場景中來自光源的直接光照冶伞,又考慮經(jīng)過場景中其他物體反射后的間接光照的一種渲染技術(shù)唆香。而光線追蹤(Ray tracing)只是全局光照的一個實現(xiàn)方向,當然還有輻射度滑沧、環(huán)境光遮蔽(ambient occlusion)并村、光子貼圖、Light Probe等方向滓技。
真實的世界光線是從光源直接照射到我們的眼鏡或者經(jīng)過多次反彈再到達我們的眼鏡哩牍,當我們試圖用計算機模擬的時候我們就會發(fā)現(xiàn)這是非常困難的尤其是在大的場景下,一個光源就要經(jīng)過無數(shù)次反射會有無數(shù)條光線到達我們的攝像機令漂,計算量極大姐叁,理所當然的我們會想到,我們可以減少光線的數(shù)量以及反彈的次數(shù)啊洗显,確實外潜,但如果我們反過來想,光線不從光源發(fā)出而是從攝像機發(fā)出挠唆,經(jīng)過多次反彈最終到達光源处窥,我們只需要計算目前我們所看到的畫面的光照,而不用考慮不會反射到我們當前的畫面的光線玄组,這樣我們就極大的減少了計算量滔驾。最終光線得到顏色信息,映射在屏幕上成為像素俄讹,無數(shù)的像素組成一起就渲染成了一張圖片了哆致。
但即便是這樣,計算量依舊巨大患膛,要想達到每秒渲染60圖片在普通的計算機上是不可能的摊阀,那么我們目前玩的游戲又是如何做到栩栩如生的畫面的呢,這里又要提到光柵化渲染了踪蹬,這也當今游戲畫面最主流的渲染方式胞此。這里引用英偉達官方的解釋:
長期以來,實時計算機圖形一直使用一種稱為“光柵化”的技術(shù)在二維屏幕上顯示三維物體跃捣。該技術(shù)速度快漱牵,且效果足夠好,盡管它仍然無法達到光線追蹤所能達到的水平疚漆。
借助光柵化技術(shù)酣胀,可通過虛擬三角形或多邊形網(wǎng)格來創(chuàng)建物體 3D 模型刁赦。在這種虛擬網(wǎng)格中,每個三角形的頂點與大小及形狀不同的其他三角形的頂點相交闻镶。每個頂點關聯(lián)著大量信息甚脉,包括其在空間中的位置以及有關顏色、紋理及其“法線”(normal)信息儒溉,這些信息可用于確定物體表面的朝向。
計算機隨后將 3D 模型中的三角形轉(zhuǎn)換為 2D 屏幕上的像素或點发钝。根據(jù)存儲在三角形頂點中的數(shù)據(jù)顿涣,能為每個像素分配一個初始顏色值。
進一步的像素處理或“陰影處理”包括根據(jù)場景中光照與像素的碰撞來改變像素顏色酝豪,以及將一個或多個紋理應用于像素涛碑,進而生成應用于像素的最終顏色。
光柵化技術(shù)的計算量異常大孵淘。一個場景中的所有物體模型可使用多達數(shù)百萬個多邊形蒲障,4K 顯示器中有近 800 萬個像素。而且瘫证,屏幕上顯示的每個幀或圖像通常會在顯示器上每秒刷新 30 到 90 次揉阎。
此外,還要使用內(nèi)存緩沖區(qū)(為加快運行速度預留出來的一點臨時空間)在屏幕上顯示之前背捌,預先渲染這些幀毙籽。還需使用景深或“z 緩存” 存儲像素深度信息,以確保在屏幕上特定的像素位置會顯示最上層的物體毡庆,并隱藏其背后的物體坑赡。
這正是為什么擁有豐富圖形功能的現(xiàn)代計算機游戲會依賴于性能強悍的 GPU。
好吧其實不太好理解么抗,我再解釋一下吧毅否。
方塊是攝像機,網(wǎng)格是屏幕蝇刀,每一個小格代表一個像素螟加,三角形是我們要渲染的物體,我們?nèi)切蔚娜齻€頂點分別與攝像機相連吞琐,與屏幕相交與三個點仰迁,根據(jù)這三個點我們就可以畫出攝像機看到三角形
這種投影到像素格子的方法就是是計算機圖形學中的光柵化渲染方法。之后再在我們畫出的圖像上繪制高光陰影等效果顽分,以產(chǎn)生真實的感覺徐许,但他的缺點非常明顯,無法判斷遠近遮擋關系(最后通過z緩沖技術(shù)才得以解決)卒蘸,無法模擬真正的陰影雌隅,反射和折射翻默。
光柵化渲染和光線追蹤渲染的比較可以看這個視頻
https://www.bilibili.com/video/av29458366?from=search&seid=12441170262462105242
在之后的很多年里圖形學的專家們想出了各種奇淫技巧去使光柵化更加真實,這里我簡要的介紹幾種方法恰起。
1.最重要的光照烘焙
解釋起來非常簡單修械,就是使用光線追蹤技術(shù)計算出真實的光影然后儲存在貼圖中,就像下圖這樣检盼,這里我用的是unreal引擎的模板場景肯污,可以看到在烘焙之后真實了很多,如果使用高精度的烘焙吨枉,在不涉及折射和反射材質(zhì)的情況下真實度是不輸于光線追蹤技術(shù)的蹦渣,而且速度快了很多。
2.環(huán)境光遮蔽(Ambient Occlusion)
通過計算光線在物體上的折射和吸收貌亭,在受影響的位置上渲染出適當?shù)年幱凹砦ǎ砑愉秩旧疃龋瑥亩M一步豐富標準光照渲染器的效果圃庭。光遮蔽并不是真實的現(xiàn)象锄奢,而是3D應用程序用來進行光線追蹤,創(chuàng)建陰影錯覺的一種光照技術(shù)剧腻。
在游戲中使用的實際是SSAO(屏幕空間環(huán)境光遮蔽)拘央,這種效果在彎曲處和凹陷處可見,但在平面和凸面上不可見书在,因為它們不會阻擋彼此的光線堪滨。這種效果非常重要,因為沒有它的存在將會令場景缺乏層次感蕊温。
看下圖就非常容易理解了袱箱,在模型相近的位置繪制陰影,以模擬全局光照
3.屏幕空間反射
反射一向是光柵化渲染的難題义矛,而目前主流的解決方法就是屏幕空間反射发笔,但效果差強人意,只能反射屏幕看到的模型凉翻,屏幕外的反射不到了讨,而使用光線追蹤可以很好的解決這個問題。還有一個非常神奇的解決方法制轰,在墻的后面建一個攝像機前计,把看到的渲染出來貼在墻壁表面上,雖然麻煩了點垃杖,但效果倒是挺不錯男杈,崩崩崩用的就是這種方法。
最后來講一講NVIDIA的實時光線追蹤技術(shù)又有哪些神奇之處吧
首先這是一個閹割版的光線追蹤旺垒,既是是用到了RT core核心專門處理光線追蹤,比傳統(tǒng)cuda處理快上十倍肤无,還是難以做到每秒60幀的渲染先蒋,而且是在低采樣的情況下,不過這可以理解宛渐,畢竟如果是傳統(tǒng)渲染器相同場景竞漾,默認渲染參數(shù),估計要幾十分鐘一幀窥翩,提升可以說是巨大的业岁。
具體我們來看這個視頻https://www.bilibili.com/video/av21086717
基于機器學習的ai降噪技術(shù)和dlss抗鋸齒技術(shù),機器學習的現(xiàn)在可以說是非橱⑺福火了叨襟,在各個領域都有應用繁扎,ai降噪以及dlss就是機器學習和圖形學碰撞出的火花幔荒。至于為什么要降噪和抗鋸齒,這是采樣和屏幕分辨率過低的原因梳玫。
以下是dlss技術(shù)的解釋爹梁,ai降噪同理
在訓練階段,需要使用大量的“顯卡原始輸出圖像”(1080P分辨率或2K分辨率)和“對應的超級計算機抗鋸齒處理過后的圖像”(8K分辨率)這樣的圖像組對這個模型進行訓練提澎,使用深度學習技術(shù)優(yōu)化這個模型姚垃,使得這個模型能夠從低分辨率圖像生成高分辨率圖像,這個過程需要龐大的計算資源盼忌,由英偉達計算积糯,將模型訓練好后將該模型推送給用戶。
目前在游戲領域應用(有的游戲只是部分應用了光線追蹤技術(shù))
逆水寒:實時光線追蹤和深度學習超級采樣
仙劍奇?zhèn)b傳七:實時光線追蹤反射
戰(zhàn)地5:實時光線追蹤反射
古墓麗影:暗影:實時光線追蹤陰影
星球大戰(zhàn)DEMO:實時光線追蹤反射谦纱、陰影看成、環(huán)境光遮蔽和 NVIDIA DLSS
還有地鐵:離去等少數(shù)幾個
視頻可以看https://www.nvidia.cn/geforce/20-series/rtx/
最后
計算機圖形學發(fā)展了這么多年相關的技術(shù)幾十本書也講不完,我這里也只是相關技術(shù)的科普跨嘉,如果想深入了解的化可以看一些圖形相關的書和網(wǎng)站川慌,當然前提條件是數(shù)學要好,反正我是不會(逃)
寫了這么多如果有疏漏歡迎指正祠乃,下一篇我會從程序和美術(shù)兩個角度講解pbr在游戲中的應用