對Unity3D的PBR的初步研究

2021-07-31 20:55:13 字數 1652 閱讀 3772

**

最近經常聽到pbr(physically based rendering)技術的討論,我一開始其實比較抗拒的。畢竟對於畫面和執行效率,我一直偏向於後者。不過最近玩了一些比較優秀的遊戲作品,比如《鎮魔曲》等,發現好的畫面還是非常吸引人的,於是開始研究一下pbr技術的用法。

傳統的貼圖渲染技術,一般是使用3張貼圖來表現模型的效果:漫反射貼圖、法線貼圖和高光貼圖。物體能讓肉眼看到的基本顏色,都是通過漫反射貼圖來表現的,然後通過法線貼圖讓模型在細節上產生有凹凸的感覺。最後通過高光貼圖控制模型不同部分的高光顯示不一樣,讓人感覺到同乙個模型上有不同的質感。由於光照模型產生高光的銳度不一樣,還需要通過乙個引數去調節高光的整體銳度。

由於傳統的渲染技術是基於貼圖的,所以使用同一張法線貼圖和高光貼圖的模型實際上產生高光的整體是一樣的,只是通過法線貼圖細節上的不一樣,讓不同部位的高光方向稍微不同,然後高光貼圖等於是一張過濾圖,讓某些部位的高光顯示強弱發生一點變化。

pbr的渲染使用了4張基本貼圖:漫反射貼圖、金屬度(高光度)貼圖、法線貼圖和環境貼圖。

漫反射貼圖和法線貼圖和傳統貼圖渲染使用的差別不大,區別是漫反射貼圖最好把上面的光照資訊(比如一些畫上去或者烘焙的假光影)去掉,把這些光影的效果交給渲染本身來實現。

區別最大的是金屬度貼圖。金屬度貼圖的rgb通道代表了金屬感的強弱,alpha通道代表了高光的銳度。和傳統的高光貼圖不一樣,它使用了金屬感和高光銳度兩個概念,讓物體的質感更豐富。高光貼圖只是過濾的功能,但金屬度貼圖是一種物體表面的屬性,你可以控制物體上面某乙個部位的反光程度和高光產生的強度,讓渲染的過程自動生成它該有的效果。

環境貼圖,是控制物體受影響的基本環境,一般是純黑色的,也就是完全受周圍真實環境的影響。但你可以在某些部位的貼圖上繪製一些固定的顏色,讓貼圖顏色和真實環境同時對模型產生影響。比如你要讓某個部位一直發光,不受外部光線的影響,可以在環境貼圖上控制。

下面做了乙個例子:

我拿了乙個漫威的冬兵(wintersoldier)的模型,在完全沒有貼圖的情況下,他是這樣的:

然後我給他賦予了漫反射貼圖:

按照傳統的貼圖渲染做法,我給他賦予了法線貼圖和高光貼圖,效果如下:

可以看得出,法線貼圖和高光貼圖讓模型產生了質感,在手臂和腰帶扣子上,產生了類似金屬的質感。但也可以看出,模型計算的高光是整體的,也就是說雖然有不同的部位,但產生的高光是以整個角色一起算的,只是某些部位把高光隱藏了而已。

接下來我把材質換成預設的standard,缺省會賦予了漫反射貼圖和法線貼圖

這時候的效果是這樣的:

由於我現在沒有設定金屬度貼圖,所以整個角色的金屬度和高光度是一樣的,看起來就像乙個金屬的雕像。

接下來我使用他原來的高光貼圖做了一些修改,變成了金屬度貼圖,效果會變成這樣:

現在整個角色的形象變得鮮明,不同部位的質感差別很明顯,而且高光的感覺是單獨的,手臂上面有單獨的高光,衣服上的配飾的高光也是單獨的,看起來比較細膩和豐富。

這時候4張貼圖都已經使用了,由於冬兵的手臂雖然是金屬,但顏色會比較白,如果金屬度調得高了,會變黑。所以我在環境貼圖裡面對手臂部分稍微做了些調整。

這是乙個比較簡單粗暴的製作過程,我感覺製作高光貼圖和製作金屬感貼圖最大的不一樣,是pbr的質感是以部位來做的,你可以感覺整個部位劃為一塊那樣做金屬感貼圖,也可以通過紋理細節來做一些部位的特殊效果,比如鏽跡等。做法很多,效果很豐富,但需要慢慢的調節才能看到正確的效果,中間的難度比只是單純做一張過濾用的高光貼圖要難。

Unity3D開發(九) Unity3d流光效果

遊戲開 壇 hello game 遊戲開發群 201276069 之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光...

對Unity3D 中Quaternion一些整理

對unity3d 中quaternion一些整理 quaternion 中文是四元數。記得計算機圖形學中,在x,y,z的基礎上新增了新的乙個w。這樣算是所謂的四元數。具體的解釋可以參考,百科等。quaternion.angleaxis angleaxis角軸 繞axis軸,旋轉angle角度。例如 ...

Unity3d 常用的方法

1 建立物體 2 載入物體 3 尋找物體 4 新增指令碼 1 建立物體 gameobject go use this for initialization void start find 方法查詢對應的元件 找到第乙個匹配的元件 gameobject go gameobject golight li...