Unity PBR渲染技術系列一

2021-09-27 13:22:25 字數 2075 閱讀 3962

國慶假期終於空閒了,利用休息這段時間,把最近一直研究unity的渲染技術成果給大家分享一下,目前,在遊戲開發方面,兩個職位比較火,乙個是圖形學程式,另乙個是美術ta。這兩個職位有個共同的特徵就是需要掌握shader程式設計。unity官方提供了一些shader的渲染比如standard。但是這個遠遠不能滿足程式開發需求。需要我們自己去開發一些shader滿足需求,很多人對寫shader都比較頭疼,學習shader有兩種方式:一種是從原理開始學習,這需要學習者掌握數學知識,另外對固定流水線和可程式設計流水線熟練掌握,這二者會涉及到矩陣控制項變換,很多人就在此卡住了;其實我們完全可以繞開這層,採用第二種學習方式就是走乙個捷徑,採用shader工具比如shader forge和shader graph。為了能夠快速的掌握pbr技術,在此建議讀者學習shader graph,這個跟ue4的非常相似,其實通過工具的使用也是為了給美術ta和圖形學程式設計者降低進入門檻。使用工具程式設計對shader的基本語法還是要懂的,否則在連線過程中也會不知所措。下面我們就以渲染乙個角色的皮質衣服為例給讀者講解如何製作?下面是效果圖。

上圖顯示的裙子是皮質的效果,如果策劃提了這個需求後,作為美術ta或者圖形學程式設計者該如何實現?那我們就要分析這個效果需要哪些貼圖實現了,diffuse是必不可少的,我們的皮質衣服有亮度,而且亮度有明有暗,這個自然讓人想到了法線的表現,兩張貼圖搞定了,剩下的就是皮質的體現了,我們看看unity為我們提供了乙個結構體,而且這個結構體我們可以自己定義,結構**如下所示:

struct su***ceoutputcustomlightingcustom

;

在這個結構體中,我們會使用metallic和smoothness兩個引數,因為表示物體表面的反射率與光照的反射程度由metallic和smoothness來控制的。這樣我們的渲染技術我們就分析完成了。兩個引數對應的是兩張貼圖,一張用於表現metallic,一種表現smoothness。從優化角度講,我們會將二者合併成一張貼圖。這樣我們只需要三張貼圖就可以實現我們的皮質效果:一張是albedo(diffuse),一張是normal法線貼圖,一張是metallic和smoothness合併的貼圖。貼圖問題解決了。

如下圖所示:

下面我們就要通過shader grapth進行效果的渲染了。

第一步:把我們的貼圖先在shader graph中表示出來,效果如下所示:

我們還是使用了standard su***ce light,這樣我們的貼圖就全部用上了,這也是我們的核心部分,我們明白了原理直接連線就可以了。

第二步:針對pbr會用到一些演算法比如fresnel菲涅爾效果針對也是反射,這個shader graph也為我們實現好了,直接拿過來使用就可以了,如下圖所示:

最後,我們需要把它們鏈結起來,這樣我們的皮質渲染效果才能實現出來。當然少不了紋理的mutiply相乘和紋理的疊加add,以及clamp和saturate函式的使用。最終我們的shader如下所示:

另外,該shader不僅能渲染皮質的,還能渲染布料的,二者的區別只是在貼圖上,通過繪製的貼圖改變,我們還可以做出布料的材質效果,shader是跟上面提到的一樣,實現效果如下所示:

所以shader寫好了後,通過改變材質,得出的效果是完全不一樣的。很神奇吧?

總結隨著硬體的提公升,玩家對遊戲品質的要求越來越高,以前做遊戲要求玩家的面數在1500個三角麵片的時代已經過去了,現在需要的是次世代效果,面數在12000-15000之間。這些都對渲染提高了要求,pbr渲染技術對於遊戲品質的提公升起到了非常好的效果,掌握了pbr技術就掌握了次世代渲染技術。這個會通過乙個系列給讀者介紹。

gin系列 渲染

目錄html渲染 r.run 9090 啟動server 自定義模板函式 r.run 9090 啟動server 在index.tmpl中使用定義好的safe模板函式 靜態檔案處理 靜態檔案 html 頁面上用到的樣式檔案.css js檔案 func main r.run 9090 啟動server...

Unity3D引擎之渲染技術系列五

筆者介紹 姜雪偉,it公司技術合夥人,it高階講師,csdn社群專家,特邀編輯,暢銷書作者,國家專利發明人 已出版書籍 手把手教你架構3d遊戲引擎 電子工業出版社和 unity3d實戰核心技術詳解 電子工業出版社等。經過投影矩陣的變換後,接下來開始進行裁剪操作了,當完成所有的裁剪工作後,就需要進行真...

Flash渲染技術公式

轉換為十進位制 trace hexvalue 十進位制轉換為十六進製制 trace decimalvalue.tostring 16 顏色合成 color24 red 16 green 8 blue color32 alpha 24 red 16 green 8 blue 顏色提取 red colo...