渲染涉及大量的緩存,這里緩存只是一個(gè)簡單的存有像素?cái)?shù)據(jù)的矩形內(nèi)存塊,最重要緩存是幀緩存和深度緩存。
幀緩存存儲(chǔ)每個(gè)像素的色彩,即渲染后的圖像。色彩可能有多種格式,但就當(dāng)前的討論來說,不考慮格式的差異。幀緩存常常在顯存中,顯卡不斷讀取該內(nèi)存,并將二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為CRT接收的合適信號(hào)。所謂雙緩存技術(shù),是為了防止圖像在未完全渲染好之前就被顯示。此時(shí)實(shí)際上使用了兩個(gè)幀緩存,一個(gè)緩存存放當(dāng)前顯示的圖像,另一個(gè)離線緩存存放正在渲染的圖像。
一旦渲染完成并準(zhǔn)備好顯示即切換緩存,有兩種方式:
(1)如使用頁切換技術(shù),則命令顯示卡開始從離線緩存讀取數(shù)據(jù),接著對(duì)調(diào)兩個(gè)緩存的角色,現(xiàn)在的顯示緩存變?yōu)殡x線緩存。
(2)也可以將離線緩存復(fù)制到顯示緩存。
下圖顯示了雙緩存的情況:

另一個(gè)用于渲染的重要緩存是深度緩存----也稱作z-buffer。深度緩存不存儲(chǔ)像素的顏色,而代之以像素的深度信息。存入緩存的深度信息有多種不同的變體,但它們基本上都反映物體到攝像機(jī)的距離。實(shí)踐中通常保存的都是裁剪空間的z坐標(biāo),這就是z-buffer名稱的由來。
深度緩存一般用于計(jì)算物體之間的遮擋,當(dāng)光柵化三角形時(shí),計(jì)算各像素的插值深度。在渲染像素之前,將這個(gè)深度值和深度緩存中該像素的深度值比較,如果新的深度比現(xiàn)有值離攝像機(jī)更遠(yuǎn),則新的像素被丟棄;否則像素顏色被寫到幀緩存,并用新的更近的值更新深度緩存。在開始進(jìn)行新的渲染之前,記得要置z-buffer各值為無限遠(yuǎn)(在裁剪空間中,這個(gè)值為1.0),這樣第一批像素才能通過深度測試,一般不對(duì)z-buffer設(shè)置雙緩存。
-
緩存
+關(guān)注
關(guān)注
1文章
248瀏覽量
27634 -
渲染
+關(guān)注
關(guān)注
0文章
79瀏覽量
11347
原文標(biāo)題:渲染中最重要的兩個(gè)緩存:幀緩存和深度緩存
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
談?wù)?b class='flag-5'>深度無盤緩存工具設(shè)置技巧
視頻相鄰幀相減,怎么解決圖片緩存問題
什么是追蹤緩存/轉(zhuǎn)接卡?
內(nèi)容中心網(wǎng)絡(luò)中基于緩存索引的緩存路由機(jī)制
Mybatis緩存之一級(jí)緩存
什么是Web緩存,HTTP緩存和瀏覽器緩存的區(qū)別
淺談架構(gòu)設(shè)計(jì)中的緩存技術(shù)
如何在SpringBoot中解決Redis的緩存穿透等問題
聊聊本地緩存和分布式緩存
如何使用緩存
Redis緩存預(yù)熱+緩存雪崩+緩存擊穿+緩存穿透要點(diǎn)簡析
HTTP緩存頭的使用 本地緩存與遠(yuǎn)程緩存的區(qū)別
nginx中強(qiáng)緩存和協(xié)商緩存介紹
高性能緩存設(shè)計(jì):如何解決緩存偽共享問題

渲染中的幀緩存和深度緩存
評(píng)論