遊戲實時渲染中HDR入門介紹

2021-07-26 07:23:33 字數 2192 閱讀 1401

遊戲實時渲染中hdr入門介紹

雖然hdr這個概念絕大多數做遊戲的人都知道了,不過可能有的人會像我一樣一直對這個概念一知半解,這裡做下學習筆記,省的以後又忘了= =

1. 到底什麼是hdr?

2. hdr對於遊戲起什麼作用,和不用hdr比的話。

既然說到最後還是0~1,那麼hdr還有什麼作用呢?其中有一種原因是超過1的值會給做bloom,bloom是用來模仿人眼看超亮的東西產生的一種光向外溢位的效果,這個超亮並不是指大於1就一定是超亮,但是和hdr結合的話,用1作為閾值效果還不錯,所以就這麼用了,當然也可以設為其它值,比如設成0,那麼就是全屏高斯模糊(一般bloom的實現方式)了。為了只讓超亮的東西bloom,hdr是有必要的,不然沒有大於1的值,你只能設個0.8什麼的,那樣其實bloom的地方有很多,這樣會顯得影象很模糊。下面車的窗戶就是bloom效果。

有的同學可能會說我不用bloom,或者說我就自己調乙個閾值,效果其實還不錯,那hdr我就不用了行不行。hdr的作用並不只是配合bloom使用,它更基本的作用是讓渲染更加正確,更加真實(尤其是配合特別物理的pbr^_^人家pbr好不容易計算這麼真實,你沒hdr,結果全錯了。。。)。這麼說太虛了,具體解釋一下:在ldr(即非高動態範圍)中,因為範圍是0~1,那麼最後計算結果如果超過1的話(光照方程可沒限制結果必須小於1)那麼就會被clamp成1,啥細節都沒了,也就是說超亮的光照不能有。下圖就是被clamp的東東,細節啥都看不清。

美術同學在打光的時候如果出現這種事情,那麼本能的做法是降低光照強度,讓最後計算的結果處於0~1的範圍中,但這種做法會造成不好也不真實的渲染結果,畢竟你不能說陽光的強度和小手電的光照強度差不多吧?白天和夜晚的各種光源強度差不多?美術同學當然可以根據經驗(以前都是這麼做的)來調乙個可以接受的光照,但是這種結果並不是正確的,也會嚴重影響pbr的效果。材質已經是按照實際的物理來製作了,但是光源是經驗值,這樣出來的結果肯定不好看。正確的方式當然是可以大於1才行,這樣的話亮的東西能夠特別亮,暗的也能特別暗,然後細節還都能看得到。

上圖左邊是用了hdr的,右邊是沒用的,可以看出人臉上面紅色和綠色已經超過1了,clamp後過爆並且發黃。如果不想過爆,就得降低光照強度,這樣別的地方有可能會過暗,然後又可能得補光,最後就是整體畫面變「平」,各種錯誤疊加。

3. hdr環境貼圖是啥?

大概上網搜什麼環境cubemap,全景圖天空盒的時候經常會看見這個詞:hdr貼圖。這是啥?這個意思就是貼圖儲存的顏色是超過1的,不是用傳統的8位儲存。這個有啥作用呢?因為cubemap經常用於image based lighting,也就是間接光的光源用,這個光源不能說是只有0~1吧,超過1是很正常的,所以如果不是hdr的話效果其實不好也不對。尤其是渲染絕緣體的時候,因為pbr的理論,絕緣體的反射(即間接高光)很弱,也就是5%光強不到的樣子,這樣如果光強如果不到1的話,一乘,結果就是特別暗,就像下圖,所以hdr貼圖還是很有必要的。

5. automatic exposure是什麼?或者說更基礎的exposure是什麼,在hdr中起什麼作用?

看hdr資料的時候,經常會出現exposure,或者說**這個攝影用詞。為啥會有攝影用詞呢?可以說hdr本身,包括相關的各種色調調整等處理其實都是從電影行業傳過來的,演算法也都是和電影行業息息相關,隨著即時渲染越來越真實,其演算法也越來越貼近真實世界,或者說向電影業(作為先驅者已經對於影象處理有一套成熟理論了)借鑑學習。具體到**這個東西,在攝影中指的是進光量,也就是由光圈,快門速度決定多少光打到感光原件上。

一般由美術同學調整這個值,而automatic exposure則是自動完成這一過程,原理是檢測前幾幀的畫面平均亮度(這個需要compute shader),然後根據亮度來自動調整**度,讓整個畫面處於乙個適度的亮度中,比如從乙個暗房走出到陽光下的時候,開始會很刺眼啥都看不清,幾秒後就能看清了,這個就是自動**在調整,這個過程也是模擬了人眼在現實中的效果。

參考:1.

2.

VisionEngine 遊戲物件 中 組介紹引言

引言 vforge 提供若干實用的組織圖形,位於圖形建立器的組分類下。這些 形提供了整理圖形列表結構和從乙個訪問點處理大量場景 3d 圖形的手段。在組分類之外,vforge 提供了另一種分組實用工具,功能非常強大,可幫助您在特定環境下提公升效能。vforge 形包括 group shape 形 3d...

pygame只能編寫遊戲 課程中的遊戲介紹

每一節課,都要設定2個遊戲,遊戲與課程所講基礎知識 語法知識 相關聯。遊戲是激發學生興趣的主要手段,python 的pygame 和turtle模組是製作遊戲的主要模組,框架簡單,流程固定,根據素材和音效以及不同遊戲規則和邏輯,可以千變萬化,給學生們講清楚邏輯和製作方法,學生其實能比較輕鬆地理解遊戲...

Unity中UI和遊戲物體之間的層級渲染

之前使用乙個uicamera和乙個maincamera做場景,希望給場景加上乙個background,但是將background和操作的ui都綁在uicamera,將遊戲物體正常地用maincamera渲染時,出現了遊戲物體遮擋住button或者background直接遮擋住了整個場景的情況。在不清...