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