raytrace解釋說:英偉達,微軟在遊戲圖形革命中領先

raytrace解釋說:英偉達,微軟在遊戲圖形革命中領先

英偉達新gpu的發佈,結合了光線追蹤的加速功能,使得微軟的DirectX計劃更加相關。光線追蹤使開發人員能夠訪問目前主流方法(光柵化)處理得很差的各種效果。陰影、反射和玻璃都被設置得更加逼真。為了概括這些好處,我們將在2018年3月推出這款光線追蹤解釋器。

在GDC上,微軟宣佈了directx12的一個新特性:DirectX射線追蹤(DXR)。新的API為DirectX應用程序提供了硬件加速的光線追蹤,開創了一個具有更真實光照、陰影和材質的遊戲新時代。總有一天,這項技術將使我們在好萊塢大片中習以為常的那種逼真的影像成為可能。

無論你擁有的是什麼GPU,無論是英偉達(Nvidia)價值3000美元的巨型V還是你35美元的樹莓派(Raspberry Pi)裡集成的小玩意,基本原理都是一樣的;的確,自20世紀90年代3D加速器首次出現以來,gpu的許多方面都發生了變化,但它們都基於一個共同的原則:光柵化。

以下是今天的工作方式

3D場景由幾個元素組成:有3D模型,由三角形構建,每個三角形應用紋理;有燈光,照亮了物體;還有一個視口或攝像頭,從一個特定的位置觀察場景。本質上,在光柵化中,攝像機表示一個光柵像素網格(因此,光柵化)。對於場景中的每個三角形,柵格化引擎確定三角形是否與每個像素重疊。如果是這樣,三角形的顏色就會應用到像素上。光柵化引擎從最靠後的三角形開始工作,並移動到離相機更近的地方,所以如果一個三角形遮住了另一個,像素將首先被後面的三角形著色,然後被前面的三角形著色。

這種前後顛倒、基於重寫的過程就是為什麼光柵化也被稱為油漆工算法;讓我們想起那令人難以置信的鮑勃·羅斯,他先在遠處放下天空,然後用山蓋住它,然後是快樂的小樹,然後可能是一座小建築或一個破舊的籬笆,最後是離我們最近的樹葉和植物。

GPU的大部分開發都集中在通過減少必須提取的數量來優化這一過程。例如,在viewport的視圖之外的對象可以被忽略;它們的三角形永遠不能通過柵格顯示。位於其他對象後面的對象部分也可以忽略;他們對一個給定像素的貢獻將被一個更接近相機的像素覆蓋,所以甚至沒有必要計算他們的貢獻是什麼。

gpu在過去20年變得更加複雜,頂點著色器處理單個三角形,幾何著色器生成新的三角形,像素著色器修改後光柵化像素,計算著色器執行物理和其他計算。但基本的運營模式沒有改變。

光柵化的優點是可以快速完成;跳過隱藏的三角形的優化是有效的,極大地減少了GPU必須做的工作,柵格化也允許GPU一次流過一個三角形,而不必同時將它們保存在內存中。

但是光柵化有限制其視覺保真度的問題。例如,在相機視野之外的物體是看不到的,所以GPU會跳過它。然而,這個物體仍然可以在場景中投射陰影。或者它可能從場景中的反射表面可見。即使在一個場景中,被明亮的紅色物體反射的白光也會使所有被這種光線擊中的物體都變成紅色;這種效果在光柵化的圖像中沒有發現。有些缺陷可以通過陰影映射(允許物體從視野外投射陰影)等技術來彌補,但結果是光柵化的圖像最終看起來總是與現實世界不同。

從根本上說,光柵化並不像人類視覺那樣起作用。我們不會從我們的眼睛中散發出一束光束,然後看那些光束與哪些物體相交。相反,來自世界的光被反射到我們的眼睛。它可能在過程中被多個物體反彈,當它穿過透明物體時,它可能會以複雜的方式彎曲。

進入射線追蹤

光線追蹤技術是一種製作更接近於模擬這種物理過程的計算機圖形的技術。根據使用的精確算法,光線從每個光源或從每個光柵像素投射;它們在場景中的物體周圍彈跳,直到它們擊中(取決於方向)相機或光源。從每個像素投射光線的計算強度較小,但從光源投射出來的圖像質量更高,可以精確地複製某些光學效果。光線追蹤可以產生更精確的圖像;先進的光線追蹤引擎可以產生逼真的圖像。這就是為什麼光線追蹤被用於渲染電影中的圖形:計算機圖像可以與真人視頻相結合,而不需要刻意尋找。

但光線追蹤有一個問題:它的計算量非常大。光柵化已經進行了廣泛的優化,試圖限制GPU必須完成的工作量;在光線追蹤中,所有這些努力都是徒勞的,因為任何物體都有可能為場景提供陰影或反射。光線追蹤必須模擬數以百萬計的光束,其中一些模擬可能會被浪費,反射到屏幕之外,或者隱藏在其他東西后面。

這對電影來說不是問題;製作電影圖像的公司將花費數小時渲染單個幀,使用大量的服務器群來並行處理每個圖像。但對於遊戲來說,這是一個大問題,你只需要16毫秒就能畫出每幀(每秒60幀),而對於VR來說就更少了。

然而,現在的gpu非常快。雖然它們的速度還不夠快,無法以較高的刷新率跟蹤高度複雜的遊戲,但它們確實擁有足夠的計算資源,可以用來進行一些光線追蹤。這就是DXR的作用。DXR是一個擴展了現有基於柵格化的Direct3D 12 API的光線追蹤API。3D場景的排列方式適合光線追蹤,通過DXR API,開發人員可以生成光線並在場景中追蹤路徑。DXR還定義了新的著色器類型,允許程序在與場景中的對象交互時與光線交互。

由於性能的要求,微軟希望DXR能夠被使用,至少目前是這樣,來填充光線追蹤和光柵化所做不到的一些事情:比如反射和陰影。DXR應該使這些東西看起來更真實。我們可能還會看到使用光線追蹤的簡單、程式化的遊戲。

微軟含糊不清地表示,DXR將與目前市場上的硬件一起工作,它將有一個後備層,讓開發人員在任何硬件上試驗DXR。如果DXR被廣泛採用,我們可以想象未來的硬件可能包含為滿足光線追蹤需求而定製的特性。在軟件方面,微軟表示EA(在戰場系列中使用了凍傷引擎),Epic(在虛幻引擎中使用),Unity 3D(在Unity引擎中使用),以及其他的將很快得到DXR支持。


分享到:


相關文章: