新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 游戲開發(fā)技術(shù)帖:光線追蹤技術(shù)的誤點(diǎn)和難點(diǎn)

游戲開發(fā)技術(shù)帖:光線追蹤技術(shù)的誤點(diǎn)和難點(diǎn)

作者: 時(shí)間:2017-10-20 來源:網(wǎng)絡(luò) 收藏

  實(shí)時(shí)它可能出現(xiàn)在當(dāng)前的次世代主機(jī)上嗎?多年搞各種實(shí)時(shí)、離線渲染,我來說說看法。我的看法是當(dāng)前次世代主機(jī)真不可能。未來3-5年也許一些內(nèi)基于光線追蹤的非全局光照算法出現(xiàn),例如鏡面反射等,主要用來彌補(bǔ)或者增強(qiáng)現(xiàn)有算法的缺陷。光線追蹤的真正普及則會(huì)是一個(gè)漫長(zhǎng)的過程,要整個(gè) industry一起努力。至于真正的無偏的全局光照,要做到實(shí)時(shí)所需要的計(jì)算量在可預(yù)見的未來都還是太大。

本文引用地址:http://butianyuan.cn/article/201710/366742.htm

  一提到光線追蹤,許多人第一反應(yīng)就是圖形渲染的圣杯,實(shí)現(xiàn)以后游戲的畫面就會(huì)和好萊塢大片一樣震撼。這其實(shí)是很不實(shí)際的主觀假設(shè)。

  誤點(diǎn)1:把光線追蹤等價(jià)于全局光照,甚至一系列牛逼的特效例如焦散,云霧,次表面散射,基于物理著色。

  其實(shí)光線追蹤單純就是指的計(jì)算出三維空間中一個(gè)給定射線和一群三角形中的焦點(diǎn)的過程。這是一個(gè)邏輯上非常簡(jiǎn)單的操作?;谶@個(gè)操作,我們可以衍生出許多全局光照的算法。為什么這個(gè)操作如此有用的本質(zhì)原因是因?yàn)殇秩痉匠?/p>

  

  是一個(gè)表面法線周圍半球上的積分。這個(gè)半球方向上的東西無論是光源還是各種奇怪形狀,材質(zhì)的其他東西都會(huì)對(duì)這個(gè)表面上的顏色有影響。在不知道這個(gè)半球方向范圍內(nèi)有什么辦法的情況下,發(fā)射光線去對(duì)周圍采樣是最通用,但是很低效的方法,如下圖。但是光線追蹤本身除了用來采樣場(chǎng)景也可以用在碰撞檢測(cè),尋路等和渲染無關(guān)的地方。

  

  誤點(diǎn)2:認(rèn)為有了光線追蹤游戲畫面就電影化了,并認(rèn)為基于光柵化的方法就是做不好光照計(jì)算,需要被推翻。

  這簡(jiǎn)直是忽視了過去20年圖形學(xué)界和游戲開發(fā)者們所積累的各種技術(shù),技巧和優(yōu)化。我先舉兩個(gè)例子。下面的圖片是用虛幻引擎4制作的建筑可視化。對(duì)于這種靜態(tài)場(chǎng)景來說,光照貼圖(Light Map)就一下把最難搞的漫反射部分通過預(yù)計(jì)算搞定了,運(yùn)行時(shí)沒任何overhead。UE4用Photon Mapping算Light Map,這是個(gè)一致的全局光照算法,也就是說最后的結(jié)果加上SSR和Probes做鏡面部分的話和你離線渲染結(jié)果就基本沒有什么差別了,小場(chǎng)景60Fps 跑起來無壓力。

  

  另一個(gè)例子是Unreal的風(fēng)箏demo它使用的地形是Epic在新西它使用的地形是Epic在新西蘭實(shí)地掃描的,目標(biāo)大概是要?jiǎng)?chuàng)造Pixar 類型的電影化體驗(yàn)。這個(gè)Demo我不能說他有上面那個(gè)那么精確蘭實(shí)地掃描的,目標(biāo)大概是要?jiǎng)?chuàng)造Pixar類型的電影化體驗(yàn)。這個(gè)Demo我不能說他有上面那個(gè)那么精確蘭實(shí)地掃描的,目標(biāo)大概是要?jiǎng)?chuàng)造Pixar類型的電影化體驗(yàn)。這個(gè)Demo我不能說他有上面那個(gè)那么精確CPU跑起來都不能60Fps么,任務(wù)管理器是各種爆滿的。

  

  

  所以我想說的是,視覺上看到的無偏全局光照是體驗(yàn)的重要部分,但是基于光柵化的程序也能在一些特定情況下提供這種體驗(yàn),并且光照并不是和電影唯一的差距。電影和游戲的可用資源的巨大差距和兩種媒介體驗(yàn)的本質(zhì)差距等綜合因素都是游戲畫面電影化的障礙!資源的差距包括一幀畫面計(jì)算的時(shí)間資源(1/60秒和數(shù)小時(shí)),計(jì)算資源(普通CPU+GPU和一個(gè)渲染農(nóng)場(chǎng)),美術(shù)素材資源(幾十萬個(gè)三角形和過分細(xì)分到比像素還多的三角形)還有物理模擬的精度等等。體驗(yàn)的本質(zhì)差別則是電影的是線性的。導(dǎo)演,特效師只需要保證所有的畫面在一個(gè)角度,一個(gè)時(shí)間達(dá)到完美即可。而游戲則是可交互式的方式。所以光線追蹤真不是最終的救命稻草。實(shí)時(shí)程序就是一個(gè)要把及其珍貴的時(shí)間和軟硬件資源合理的分配到不同的因素里去。

  當(dāng)然我不是保守派,光線追蹤作為一個(gè)最基本的采樣場(chǎng)景的操作來說,通用且直觀,如果性能跟的上,必然會(huì)帶來許多渲染技術(shù)的發(fā)展。但是高效的實(shí)現(xiàn)難度就是很大,前面許多回答也都多少分析了些原因,我就總結(jié)和補(bǔ)充一下。

  難點(diǎn)1:計(jì)算量大。

  如果拿一個(gè)4K分辨率的游戲要做全局光照算法,例如路徑追蹤,假設(shè)每個(gè)像素要1000個(gè)樣本噪點(diǎn)才收斂(這是非常非常保守的數(shù)字),每個(gè)樣本的路徑長(zhǎng)度是5次反射(也是非常短的1000個(gè)樣本噪點(diǎn)才收斂(這是非常非常保守的數(shù)字),每個(gè)樣本的路徑長(zhǎng)度是5次反射(也是非常短的2000000 * 60 = 2488320000000。也就是說一秒鐘要射出2500G跟光線,這個(gè)數(shù)字大概目前最快的渲染器也慢了至少一萬倍。諷刺的是對(duì)于電影級(jí)的畫質(zhì)來說求交的過程和著色相比只是非常小的一部分。離線渲染的最前沿的研究我也了解且實(shí)現(xiàn)過不少,有許多提高采樣效率的方法。但是無論怎么部分。離線渲染的最前沿的研究我也了解且實(shí)現(xiàn)過不少,有許多提高采樣效率的方法。但是無論怎么本數(shù)量的做法在實(shí)時(shí)應(yīng)用里真的沒什么希望。要怪就怪1/60秒的要求是在太苛刻。但我不想顯得過分悲觀,上面10000倍的差距也只是真正要做一個(gè)無偏路徑追蹤的需求,實(shí)際上就算是離線渲染也有許多trick能減少noise,biased 去加快收斂速度,所以如果真的應(yīng)用到游戲里肯定能用一些其他biased方法去cheat away這么大的計(jì)算量。

  難點(diǎn)2:現(xiàn)代GPU已經(jīng)將基于光柵的管線性能優(yōu)化的將近極致了。

  榨干了最后的性能,一方面是光柵化算法的確相比于光線追蹤更容易被集成進(jìn)硬件,三角形可以在不同管線階段Stream,另一方面光柵化大規(guī)模流行了20年,廠商已經(jīng)有太多的時(shí)間和經(jīng)驗(yàn)積累經(jīng)得起考驗(yàn)的優(yōu)化。在NV每次多深入了解一些GPU架構(gòu)都會(huì)感嘆原來在底層還有那么多的硬件上的各種優(yōu)化。于此同時(shí),基于光柵的渲染算法也有GPU架構(gòu)都會(huì)感嘆原來在底層還有那么多的硬件上的各種優(yōu)化。于此同時(shí),基于光柵的渲染算法也有以說要從頭發(fā)展,當(dāng)然肯定有新的東西可以搞,只不過也真的需要人來做這個(gè)工作。

  難點(diǎn)3:現(xiàn)代基于光柵的圖形管線已經(jīng)烙印到GPU里,接口暴露在API里,大量現(xiàn)成的算法實(shí)現(xiàn)在游戲引擎里和游戲開發(fā)者的腦子里。

  所以光線追蹤的加入意味著圖形管線的改變,是否以為著有一種新的引擎里和游戲開發(fā)者的腦子里。所以光線追蹤的加入意味著圖形管線的改變,是否以為著有一種新的引擎里和游戲開發(fā)者的腦子里。所以光線追蹤的加入意味著圖形管線的改變,是否以為著有一種新的里發(fā)射光線呢,還是像compute shader那樣一次運(yùn)行很多光線然后批量返回呢,場(chǎng)景的加速結(jié)構(gòu)是要在API Level提供支持呢,還是交給開發(fā)者?在性能還跟不上做一致的全局算法的情況下,有什么其他效果、算法我們可以嘗試呢?等這些都跟上了,又要等多久市面上的游戲才會(huì)逐漸開始普及。所以我認(rèn)為就算性能跟上之后,光線追蹤的普及也會(huì)是個(gè)緩慢逐漸的過程,并且需要整個(gè)industry的一起努力。



關(guān)鍵詞: 光線追蹤技術(shù)

評(píng)論


技術(shù)專區(qū)

關(guān)閉