游戲開發(fā)技術帖:光線追蹤技術的誤點和難點
實時光線追蹤技術它可能出現(xiàn)在當前的次世代主機上嗎?多年搞各種實時、離線渲染,我來說說看法。我的看法是當前次世代主機真不可能。未來3-5年也許一些內基于光線追蹤的非全局光照算法出現(xiàn),例如鏡面反射等,主要用來彌補或者增強現(xiàn)有算法的缺陷。光線追蹤的真正普及則會是一個漫長的過程,要整個 industry一起努力。至于真正的無偏的全局光照,要做到實時所需要的計算量在可預見的未來都還是太大。
本文引用地址:http://m.butianyuan.cn/article/201710/366742.htm一提到光線追蹤,許多人第一反應就是圖形渲染的圣杯,實現(xiàn)以后游戲的畫面就會和好萊塢大片一樣震撼。這其實是很不實際的主觀假設。
誤點1:把光線追蹤等價于全局光照,甚至一系列牛逼的特效例如焦散,云霧,次表面散射,基于物理著色。
其實光線追蹤單純就是指的計算出三維空間中一個給定射線和一群三角形中的焦點的過程。這是一個邏輯上非常簡單的操作?;谶@個操作,我們可以衍生出許多全局光照的算法。為什么這個操作如此有用的本質原因是因為渲染方程
是一個表面法線周圍半球上的積分。這個半球方向上的東西無論是光源還是各種奇怪形狀,材質的其他東西都會對這個表面上的顏色有影響。在不知道這個半球方向范圍內有什么辦法的情況下,發(fā)射光線去對周圍采樣是最通用,但是很低效的方法,如下圖。但是光線追蹤本身除了用來采樣場景也可以用在碰撞檢測,尋路等和渲染無關的地方。
誤點2:認為有了光線追蹤游戲畫面就電影化了,并認為基于光柵化的方法就是做不好光照計算,需要被推翻。
這簡直是忽視了過去20年圖形學界和游戲開發(fā)者們所積累的各種技術,技巧和優(yōu)化。我先舉兩個例子。下面的圖片是用虛幻引擎4制作的建筑可視化。對于這種靜態(tài)場景來說,光照貼圖(Light Map)就一下把最難搞的漫反射部分通過預計算搞定了,運行時沒任何overhead。UE4用Photon Mapping算Light Map,這是個一致的全局光照算法,也就是說最后的結果加上SSR和Probes做鏡面部分的話和你離線渲染結果就基本沒有什么差別了,小場景60Fps 跑起來無壓力。
另一個例子是Unreal的風箏demo它使用的地形是Epic在新西它使用的地形是Epic在新西蘭實地掃描的,目標大概是要創(chuàng)造Pixar 類型的電影化體驗。這個Demo我不能說他有上面那個那么精確蘭實地掃描的,目標大概是要創(chuàng)造Pixar類型的電影化體驗。這個Demo我不能說他有上面那個那么精確蘭實地掃描的,目標大概是要創(chuàng)造Pixar類型的電影化體驗。這個Demo我不能說他有上面那個那么精確CPU跑起來都不能60Fps么,任務管理器是各種爆滿的。
所以我想說的是,視覺上看到的無偏全局光照是體驗的重要部分,但是基于光柵化的程序也能在一些特定情況下提供這種體驗,并且光照并不是和電影唯一的差距。電影和游戲的可用資源的巨大差距和兩種媒介體驗的本質差距等綜合因素都是游戲畫面電影化的障礙!資源的差距包括一幀畫面計算的時間資源(1/60秒和數小時),計算資源(普通CPU+GPU和一個渲染農場),美術素材資源(幾十萬個三角形和過分細分到比像素還多的三角形)還有物理模擬的精度等等。體驗的本質差別則是電影的是線性的。導演,特效師只需要保證所有的畫面在一個角度,一個時間達到完美即可。而游戲則是可交互式的方式。所以光線追蹤真不是最終的救命稻草。實時程序就是一個要把及其珍貴的時間和軟硬件資源合理的分配到不同的因素里去。
當然我不是保守派,光線追蹤作為一個最基本的采樣場景的操作來說,通用且直觀,如果性能跟的上,必然會帶來許多渲染技術的發(fā)展。但是高效的實現(xiàn)難度就是很大,前面許多回答也都多少分析了些原因,我就總結和補充一下。
難點1:計算量大。
如果拿一個4K分辨率的游戲要做全局光照算法,例如路徑追蹤,假設每個像素要1000個樣本噪點才收斂(這是非常非常保守的數字),每個樣本的路徑長度是5次反射(也是非常短的1000個樣本噪點才收斂(這是非常非常保守的數字),每個樣本的路徑長度是5次反射(也是非常短的2000000 * 60 = 2488320000000。也就是說一秒鐘要射出2500G跟光線,這個數字大概目前最快的渲染器也慢了至少一萬倍。諷刺的是對于電影級的畫質來說求交的過程和著色相比只是非常小的一部分。離線渲染的最前沿的研究我也了解且實現(xiàn)過不少,有許多提高采樣效率的方法。但是無論怎么部分。離線渲染的最前沿的研究我也了解且實現(xiàn)過不少,有許多提高采樣效率的方法。但是無論怎么本數量的做法在實時應用里真的沒什么希望。要怪就怪1/60秒的要求是在太苛刻。但我不想顯得過分悲觀,上面10000倍的差距也只是真正要做一個無偏路徑追蹤的需求,實際上就算是離線渲染也有許多trick能減少noise,biased 去加快收斂速度,所以如果真的應用到游戲里肯定能用一些其他biased方法去cheat away這么大的計算量。
難點2:現(xiàn)代GPU已經將基于光柵的管線性能優(yōu)化的將近極致了。
榨干了最后的性能,一方面是光柵化算法的確相比于光線追蹤更容易被集成進硬件,三角形可以在不同管線階段Stream,另一方面光柵化大規(guī)模流行了20年,廠商已經有太多的時間和經驗積累經得起考驗的優(yōu)化。在NV每次多深入了解一些GPU架構都會感嘆原來在底層還有那么多的硬件上的各種優(yōu)化。于此同時,基于光柵的渲染算法也有GPU架構都會感嘆原來在底層還有那么多的硬件上的各種優(yōu)化。于此同時,基于光柵的渲染算法也有以說要從頭發(fā)展,當然肯定有新的東西可以搞,只不過也真的需要人來做這個工作。
難點3:現(xiàn)代基于光柵的圖形管線已經烙印到GPU里,接口暴露在API里,大量現(xiàn)成的算法實現(xiàn)在游戲引擎里和游戲開發(fā)者的腦子里。
所以光線追蹤的加入意味著圖形管線的改變,是否以為著有一種新的引擎里和游戲開發(fā)者的腦子里。所以光線追蹤的加入意味著圖形管線的改變,是否以為著有一種新的引擎里和游戲開發(fā)者的腦子里。所以光線追蹤的加入意味著圖形管線的改變,是否以為著有一種新的里發(fā)射光線呢,還是像compute shader那樣一次運行很多光線然后批量返回呢,場景的加速結構是要在API Level提供支持呢,還是交給開發(fā)者?在性能還跟不上做一致的全局算法的情況下,有什么其他效果、算法我們可以嘗試呢?等這些都跟上了,又要等多久市面上的游戲才會逐漸開始普及。所以我認為就算性能跟上之后,光線追蹤的普及也會是個緩慢逐漸的過程,并且需要整個industry的一起努力。
評論