當前位置:
首頁 > 科技 > 是時候聊一下光線追蹤了

是時候聊一下光線追蹤了

首先是聲明:本文大部分源自我2013年在顯卡吧發的帖子,部分內容參考MC

在3月19日的GDC大會上,微軟正式公布了DirectX Raytracing(DirectX光線追蹤,簡稱DXR)的新功能,整合進DX12 API,讓圖形硬體可以進行實時的光線追蹤,而根據GDC上多家廠商的演示視頻,相比現在的遊戲畫質,提升可以說是質變(下圖)。

目前包括3Dmark、北極光、寒霜、SEED、虛幻4和Unity等引擎均已準備將DXR技術整合進自家引擎之中,NVIDIA也隨著微軟的腳步推出了RTX Technology,支持光線追蹤。不過最低支持好像需要volta顯卡,也就是目前的pascal無法支持(emm,這算是逼迫玩家換顯卡嗎?)。而AMD也於3月20日推出了他們家的光線追蹤技術---ProRender,可見光線追蹤時代到來已經是定局。

DXR的最終目的是用來取代目前的光柵化技術。不過就目前來說,它還不能做到這樣,僅僅只能用作當前渲染技術的補充,因為硬體機能還遠遠不夠。這也就是今天我們要聊的話題。

其實光線追蹤早就不是什麼新鮮的事物,它在電影製作中早已遍地開花。著名的阿凡達便是光線追蹤渲染出的電影作品。而遊戲上也不是首次應用,不過既然要聊光線追蹤,那麼我們就從光線追蹤的原理說起。

P1:光線追蹤的原理

大家在遊戲中對遊戲中水面相信並不陌生。目前見過最好的遊戲水面也就是孤島危機系列中的了吧?但是比起電影,比如剛剛說過的阿凡達。你會發現孤島危機中的水面已經被秒的渣渣都不剩。這是因為,我們目前的遊戲,都在使用光柵化演算法。而在這些電影中,則採用的光線追蹤演算法。而我們經常看到的3DS Max、Maya等軟體最終渲染出的圖片,也是用光線追蹤演算法渲染的。因為光線追蹤是用來模擬現實中光線的各種現象(比如折射,衍射,散射,反射,吸收等)以及傳播過程,所以光線追蹤可以渲染出我們肉眼無法分辨的場景(你看出來阿凡達所有場景是渲染的了嗎?)

光線追蹤是模擬的我們人眼看到可見光的過程(下圖)。 它源自於幾何光學通用技術,通過追蹤光線與物體表面發生的各種交互(比如折射,反射),最終得到光走過的路徑。簡單打個比方,假設屏幕不是屏幕,而是一塊玻璃,這塊玻璃內構築出一個「真實的」世界,只要找到這塊玻璃內能透過人眼的光線,加以追蹤就能構建出完整的3D畫面。

既然光線追蹤這麼好,那麼為什麼不用它呢?因為光線追蹤非常的吃資源。所以目前遊戲基本都以光柵化渲染為主。因為光柵化只需要計算數學模型到屏幕上的過程,所以光柵化有著很高的效率,而對遊戲來說,每秒鐘24幀以上的計算量是保證遊戲性的前提,所以高效率的光柵化取代了光線追蹤成為了3D遊戲渲染的主力。而它的缺點也很明顯,因為它無法計算真實的光線路徑,所以很多地方會失真,比如下圖中的遠哭1.

光線追蹤演算法分為兩種:正向追蹤演算法和反向追蹤演算法。其中,正向追蹤是大自然的光線追蹤方式,即由光源發出的光經環境景物間的多次反射、透射後投射到景物表面,最終進入人眼的過程。反向追蹤則是觀察者的角度出發,只追蹤那些觀察者所能看見的表面投射光。正因為這個特點,所以目前主流的光線追蹤都是反向追蹤,因為這樣足夠,而且可以大幅度的節省計算機本身的資源。

P2:光線追蹤如何工作?

對我們的生活而言,常見的光現象無非折射,反射,吸收這三種。一束光經過各種反射,吸收,改變了光原本的光譜,而改變之後的光再經過多次的反射,吸收等過程,最終進入我們的眼睛,這就是光線追蹤要做的事情。

那麼說了光線追蹤的工作過程,那麼就讓我們來看看實際應用吧。在實際應用中,根據使用者的設置,光線追蹤會賦予每個像素點幾條到幾十條不等的光線,在場景內傳播,而因為場景內的物體已經早已被開發者賦予好了各種屬性,光線經過這些物體之後會發生各種改變,最終呈現在屏幕上。但是這麼做會出現一個問題,因為有些光線並不是我們所能看到的,這時候計算它就會造成不必要的性能浪費,所以就有了反向追蹤。所以反向追蹤演算法中,光線會被分類,假設這條光是不可見光,系統就會自動拋棄掉整個光路,如果可見,就開始計算,最終得出畫面。下圖就是一張早已被廣泛傳播的光線追蹤作品。

P3:實際應用?

熟悉intel的肯定不會忘記Larrabee,這是intel曾經計劃推出的獨立顯卡。而這個項目主要負責人Daniel Pohl曾經在2004年用光線追蹤技術重做過雷神之錘3。這是因為這款遊戲的母公司idsoftware開源了該遊戲。而且給雷神之錘3增加光線追蹤技術很簡單,只需要10行左右的代碼就可以完成。下圖就是用光線追蹤技術的雷神之錘3,這水面,你能相信這是一款2001年的遊戲?也正是因為這件事,Daniel Pohl被intel看上並招入公司。而Larrabee也曾經被intel寄予厚望,因為Larrabee是源於CPU架構,所以特別適合用作光線追蹤計算,但是各種原因讓Larrabee一度折戟,至今也沒有什麼起色,而就目前而言,說intel已經完全放棄了Larrabee估計也沒人有不同意見。

P4:未來

為什麼光線追蹤不能成為主流?無非就是計算量過大,哪怕是反向追蹤演算法也不行。在光線追蹤版的雷神之錘3中,Daniel動用了20顆Athlon XP 1800+CPU集群,以及一塊自己設計的FPGA,時鐘為90MHz,支持光線追蹤技術,性能相當於P4 12GHz的顯卡。才在512x512解析度,4xFSAA下跑到20fps。

而根據intel當年的說法,要達到可以流暢運行遊戲的程度以及當年的遊戲畫質,需要計算大約10億束光線,那麼這個10億束是怎麼來的呢?假設每個像素點30束光線,那麼在1024*768解析度下一共有786432個像素點,每秒達到60fps,最終結果就是786432*60*30=14.1億,這個數字已經相當恐怖了,而且用的還是過時的1024*768解析度。要知道在當年旗艦是i7 3970X,每秒能計算的數量也就1000萬條左右,離需要的數值還差十萬八千里,所以我們只能寄希望於顯卡來完成這個工作。而且光線追蹤的恐怖計算量下需要大量的顯存,即便是目前的泰坦V估計也會出現顯存不足的情況。而下圖分別是由光柵化渲染的玉龍和光線追蹤的玉龍,可見其差別。

時隔多年,我們終於看到微軟把光線追蹤技術加到了自家的DirectX引擎中,而隨著NV和AMD的跟進,可以猜到大概是光線追蹤技術已經成熟,期待未來光線追蹤技術能給我們的遊戲體驗帶來質變。

如果你喜歡這篇文章,

歡迎點個贊,

在下面留言,

或者關注電腦吧評測室微信公眾號,自媒體平台

也可以關注B站@翼王,為翼王投幣,充電!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 腦吧評測室 的精彩文章:

硬體規格小常識
硬體資訊:IU都準備要降價啦,Ryzen 2700/2600X曝光,四月見!

TAG:腦吧評測室 |