Forward Rendering和Deferred Rendering的區(qū)別

Modern Graphics Pipelines(當(dāng)前主流的圖形管線)

在開始之前芒篷,我們必須要知道一點(diǎn)現(xiàn)代可編程圖形管線的一些知識盗胀。早些時候忌栅,我們被顯卡的功能限制徘六,不能去改變每個像素的繪制方式内边,除了發(fā)送一些不同的紋理外,不能去修改頂點(diǎn)的數(shù)據(jù)〈猓現(xiàn)在時代已經(jīng)改變假残,我們能夠基于顯卡的圖形管線進(jìn)行編程。我們能夠發(fā)送代碼到顯卡去改變像素的外觀(顏色)炉擅,使用法線紋理(normal maps)改變它們外觀使其變的突起辉懒,也可以添加反射。

這個代碼是以geometry,vertex, fragment shaders的形式存在的,從本質(zhì)上來說奕枝,它們是控制顯卡如何去渲染對象恩袱。

Forward Rendering(正向渲染/前向渲染)

Forward Rendering 是大多數(shù)渲染引擎使用的渲染技術(shù)。你給顯卡提供幾何對象颠印,它將幾何對象分解成頂點(diǎn)送入頂點(diǎn)著色器,然后把這些頂點(diǎn)數(shù)據(jù)插值后分別送入片元/像素著色器抹竹,然后在它們被送入屏幕前做最終的渲染處理(模板測試线罕,混合等)。

這是一個線性的流程窃判,每個幾何對象分別通過渲染管線一步步的處理下去并產(chǎn)生最終的圖像钞楼。

Deferred Rendering

延遲渲染,從這個名字來看就意味著渲染是被延遲的袄琳,直到所有幾何對象都已經(jīng)通過渲染管線處理后询件,在最后才應(yīng)用著色(通過光照來決定最終的像素顏色)并產(chǎn)生最終的圖像。

那么為什么要這樣來處理呢唆樊?

Deferred lighting is a modification of deferred rendering that reduces the size of the G-buffer by using more passes on the scene.

Lighting Performance(光照性能)

標(biāo)準(zhǔn)前向渲染(Forward Rendering)光照的性能消耗也是為什么要另辟蹊徑選擇其他渲染方式的主要原因宛琅。在標(biāo)準(zhǔn)前向渲染(Forward Rendering)管線流程中,每個燈光都會在每個頂點(diǎn)/或片元上執(zhí)行光照計算逗旁,這也就是常說的逐頂點(diǎn)光照和逐片元/像素光照嘿辟。

如果你在場景中有100個幾何對象,并且每個幾何對象有1000個頂點(diǎn),你大約就有100000多變形(非常粗略的計算)红伦。顯卡還能夠很輕松的處理介陶,但是當(dāng)這些多邊形被發(fā)送到片元著色器時, 昂貴的對燈光消耗會使性能急劇下降色建。開發(fā)者可以嘗試放置光照計算到頂點(diǎn)著色器減少片元著色器對光照的計算哺呜。
不管它是不是此像素上最頂層的片元,還是被遮擋的片元箕戳,昂貴的光照計算都會在每個多邊形的每個可見片元上執(zhí)行某残。如果屏幕的分辨率是1024x768,你有將近800000個像素需要被渲染陵吸。你能很輕易的就達(dá)到每幀百萬級的片元操作玻墅。并且大多數(shù)的片元還會被剔除(深度測試階段),那么對于此片元的光照就算就白費(fèi)了壮虫。

如果你要對這樣一個達(dá)到百萬級片元的場景的每一燈光進(jìn)行渲染澳厢,那么你在每一幀將躍升的一個燈光數(shù)量x1000000個片元的操作上!想象一下你有一個小鎮(zhèn)的街道上面布滿點(diǎn)光源G羲啤JB!!H幕健徐伐!

計算前向渲染(Forward Rendering)復(fù)雜度的公式參見: big O notatio,復(fù)雜度公式:O(num_geometry_fragments * num_lights)募狂。你能看到這里的復(fù)雜度是和幾何對象數(shù)量和燈光數(shù)量直接相關(guān)的办素。

片元是一個最終可能在屏幕上成為像素的一個”待轉(zhuǎn)像素“,如果在深度測試階段不被剔除的話祸穷,它將在屏幕上成為屏幕的最終像素⌒源現(xiàn)在一些引擎通過其他的方式優(yōu)化了光照計算,比如:剔除非常遠(yuǎn)的燈光雷滚,組合燈管或使用 Light maps(非常流行的需曾,但是只能是靜態(tài)的物體)。如果你有大量的燈光需要動態(tài)光照的話揭措,我們需要一個更好的解決方案胯舷。

Deferred Rendering to the Rescue(前向渲染的救星–延遲渲染)

延遲渲染(Deferred Rendering)是一個減少光照著色對象數(shù)量有趣的方法。尤其是對于總的片元對象來說绊含,執(zhí)行光照的片元數(shù)量直接由屏幕的分辨率決定。
延遲渲染(Deferred Rendering)的復(fù)雜性炊汹,在big O notation中是O(screen_resolution * num_lights)躬充。

現(xiàn)在你能明白了,你有多少的光照數(shù)量是由你對燈光數(shù)量的使用來決定的。所以你能很高興的增加你的燈光數(shù)量充甚。(這不意味著你可以有無限的幾何對象以政,它們還是要經(jīng)過管線的及其他處理才能到G-Buffer中。)

The Guts of Deferred Rendering(延遲渲染的細(xì)節(jié))

每個幾何對象被渲染伴找,但是沒有使用光照盈蛮,使用多目標(biāo)渲染(multiple render targets),繪制出多個屏幕空間大小的Buffer技矮。深度抖誉,法線和顏色分別寫入各自的buffers(圖像)。然后衰倦,這些Buffers和每個燈光像的素顏色進(jìn)行合成袒炉,最后生成最終的圖像。
下圖分別是:Color,Depth和Normals

下圖是最終生成的圖片:

選擇哪一個呢樊零?

一個最簡短的回答是:如果你使用了大量燈光那么你就該使用延遲渲染(Deferred Rendering)了我磁。
但是延遲渲染(Deferred Rendering)也有一些明顯的缺點(diǎn):

  • 這個處理需要顯卡支持多目標(biāo)渲染,老的顯卡是不支持的驻襟,所有不能在上面工作夺艰,對于這個是沒有變通的方案的,除非強(qiáng)制要求客服換顯卡沉衣。
  • 它需要高帶寬的顯卡劲适,你要發(fā)送大的Buffer數(shù)據(jù),老大的顯卡可能處理不了厢蒜。對于這個也沒有變通的方案的霞势,除非強(qiáng)制要求客服換顯卡。
  • 你不能使用透明對象斑鸦。(除非你聯(lián)合 使用deferred rendering 和Forward Rendering )愕贡。
  • 沒有抗鋸齒。
  • 僅有一個類型的材質(zhì)被允許巷屿,除非你使用了被叫做Deferred Lighting的延遲渲染修改固以。
  • 陰影依賴于光照的數(shù)量,延遲渲染沒有解決任何陰影的問題嘱巾。

如果你沒有大量的燈光或者你想能夠在比較老的顯卡上允許憨琳,你應(yīng)該選擇使用前向渲染(Forward Rendering)并且替換你的燈光使用靜態(tài)光照貼圖。這個結(jié)果看起來還是令人吃驚的旬昭。

總結(jié)

我希望擺脫一些光照的主題篙螟。在這里你的選擇是解決渲染問題,但是在游戲開始之前就做出正確的選擇是非常重要的问拘,因?yàn)榭梢员苊馊蘸蟮男薷摹?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遍略,一起剝皮案震驚了整個濱河市惧所,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绪杏,老刑警劉巖下愈,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蕾久,居然都是意外死亡势似,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門僧著,熙熙樓的掌柜王于貴愁眉苦臉地迎上來履因,“玉大人,你說我怎么就攤上這事霹抛〈暧猓” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵杯拐,是天一觀的道長霞篡。 經(jīng)常有香客問我,道長端逼,這世上最難降的妖魔是什么朗兵? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮顶滩,結(jié)果婚禮上余掖,老公的妹妹穿的比我還像新娘。我一直安慰自己礁鲁,他們只是感情好盐欺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仅醇,像睡著了一般冗美。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上析二,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天粉洼,我揣著相機(jī)與錄音,去河邊找鬼叶摄。 笑死属韧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛤吓。 我是一名探鬼主播宵喂,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柱衔!你這毒婦竟也來了樊破?” 一聲冷哼從身側(cè)響起愉棱,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤唆铐,失蹤者是張志新(化名)和其女友劉穎哲戚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艾岂,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顺少,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了王浴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脆炎。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖氓辣,靈堂內(nèi)的尸體忽然破棺而出秒裕,到底是詐尸還是另有隱情,我是刑警寧澤钞啸,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布几蜻,位于F島的核電站,受9級特大地震影響体斩,放射性物質(zhì)發(fā)生泄漏梭稚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一絮吵、第九天 我趴在偏房一處隱蔽的房頂上張望弧烤。 院中可真熱鬧,春花似錦蹬敲、人聲如沸暇昂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽急波。三九已至,卻和暖如春闹究,著一層夾襖步出監(jiān)牢的瞬間幔崖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工渣淤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赏寇,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓价认,卻偏偏與公主長得像嗅定,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子用踩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容