<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Cocos Creator 3.0 基于 PBR 的物理渲染詳解

          共 3697字,需瀏覽 8分鐘

           ·

          2021-04-30 21:07

          Cocos Creator 3.0 的出現(xiàn),使 Cocos Creator 升級成為全新的 2D/3D 游戲引擎,讓 2D 和 3D 游戲的開發(fā)更加便捷。目前已更新到 v3.0.1,戳鏈接了解更新詳情。


          通常 3D 游戲?qū)Ξ嬅嫘Ч弯秩竟芫€的定制有很高的需求,PBR 美術(shù)工作流作為次世代主流的解決方案,今天我們來詳細(xì)地分析一下基于 Cocos Creator 的 PBR 物理渲染。



          01

          計算機是如何顯示顏色的


          在討論這個問題之前,我們先來分析一下人眼是如何看到世界的。人眼看到物體的顏色,就是看到物體的自發(fā)光與反射周圍環(huán)境光的疊加。


          物體自發(fā)光,是指物體自己發(fā)出來的光線,一般自然界的物體很少會自己發(fā)光,都是反射光源(太陽光的光。


          比如黑暗的房間中有一本書(沒有光源,我們無法看到這本書,把燈打開后,我們能看到書了,這是因為書本反射燈光到我們的眼睛,成像到視網(wǎng)膜上人眼看到的物體都是反射光源的光為什么有些物體看上去是紅色,有些物體是藍(lán)色呢?


          那是因為不同物體表面的材質(zhì)可以吸收一些光譜,比如某個物體,如果它吸收掉藍(lán)色與綠色,就會反射出紅色光。如果它可以吸掉收紅色與藍(lán)色,則反射出綠色的光。這些我們稱為物體的“本色”(baseColor/Diffuse/albedo。物體反射光源的光叫做直接反射,反射其他物體表面反射過來的光叫做間接反射,如圖:


           

          自然界之所以真實, 是因為由非常復(fù)雜的反射疊加而成。


          3D 游戲引擎是如何處理顏色成像到攝像機的呢?其實就是模擬真實世界,并做一些取舍:


          1. 物體自發(fā)光的模擬,一般給一個自發(fā)光顏色或一個自發(fā)光貼圖。

          2. 對物體本色的模擬,就是一個物體本來顏色的貼圖(BaseColor 或 Diffuse 或 Albedo

          3. 對物體反射的模擬, 只模擬反射光源的光(直接反射,不考慮間接反射。

          4. 模擬擋住光的反射(瓶子底部反射光,被擋住), 使用環(huán)境遮擋貼圖 (oclussion)。


          計算機顯示的顏色就是經(jīng)過這個過程計算以后得到的顏色值。

           


          02

          基于經(jīng)驗?zāi)P团c PBR 物理渲染

           

          上述 4 個過程中,只有第 3 條涉及的反射光照是最難的,也是最影響渲染效果的,同時也是計算機圖形學(xué)里面重點研究的對象。光的反射,包含兩種方式,一種是鏡面反射,一種是漫反射。如圖:


           

          模擬光的反射,主流游戲開發(fā)中有兩種方向,一種是基于經(jīng)驗?zāi)P停硪环N是基于物理 PBR 的。


          先說基于經(jīng)驗?zāi)P停鋵嵕褪翘幚矸瓷涞臅r候,通過計算公式來計算光照顏色, 這個公式基于經(jīng)驗得來。如處理漫反射,可以采用蘭伯特光照模型(公式。處理鏡面反射可以采用馮模型與布林馮模型(這塊也是面試的時候經(jīng)常被問的,比如定制卡通渲染風(fēng)格的渲染管線經(jīng)常用經(jīng)驗?zāi)P停皇腔谖锢?PBR


          基于 PBR 物理渲染主要是基于物理原理來模擬真實世界光的反射,雙向反射分布函數(shù)(BRDF),遵守能量守恒等,這樣渲染出來的物體效果接近于真實的世界,同時這些算法相對成熟,也不用我們?nèi)パ芯浚瑢?Shader 的時候代入公式就可以了。

           


          03

          法線與法線貼圖,高度貼圖


          法線是非常重要的一個數(shù)據(jù),光的反射計算中需要用到法線,如圖:

           

          我們的 3D 模型是由三角形的面組成,面是由線組成,線是由頂點組成,每個頂點除了有坐標(biāo)以外還有會有法線。如圖:

           

          我們在著色的時候,利用法線來做光的反射。如上圖,三角形面上的每個點都要反射光,每個點都要法線,而模型里面只有頂點有法線,那面上任意一點的法線如何得來呢?這個我們可以采用插值來做,如下圖:

           


          黃色的法線是由兩個藍(lán)色法線插值而來,藍(lán)色法線由綠色的頂點法線插值而來。這樣面上每個點的法線就出來了。


          我們再來講高模與低模。


          為了獲得更好的物體的細(xì)節(jié),我們建模的時候用的面數(shù)越多,細(xì)節(jié)表達(dá)就越好,光照就越細(xì)膩。但是面數(shù)越多,計算量越大,性能越差,如何能夠在面數(shù)不增加的情況下獲得更好的光照細(xì)節(jié)呢?


          常用的技術(shù)就是法線貼圖,美術(shù)會建一個高精度模型,原來的一個三角面內(nèi),在高模下有更多的三角形面,就有更多的頂點的法線。


          把這些法線數(shù)據(jù)存到紋理貼圖里面,這樣低模下三角面的每個點在獲取法線的時候,就不用通過插值,而是從高模的法線貼圖里面獲得法線數(shù)據(jù),這樣可獲得更好的光照細(xì)節(jié)。


          法線貼圖技術(shù)也是次世代的標(biāo)配。除了法線以外,為了讓細(xì)節(jié)更有層次感,還有類似原理的高度貼圖。下圖是同一模型法線貼圖和高度貼圖的效果對比:


           普通中間線貼圖);法線貼圖+高度貼圖



          04

          環(huán)境遮擋貼圖


          什么是環(huán)境遮擋?舉個例子就明白了。


          如下圖有一個陶瓷瓶,我們從瓶口看下去,由于瓶口小,會遮擋底部的部分反光,我們從上往下看,看不到底的感覺才更真實(左右圖的瓶底對比,右邊看不到底部,比左邊更真實


           

          下圖就是這個瓶子的環(huán)境遮擋貼圖:


           


          05

          基于 PBR 的美術(shù)工作流


          鋪墊了這么多,終于可以講解 PBR 的美術(shù)工作流了。PBR 的算法定了,算法+數(shù)據(jù)=效果,那么剩下的就是調(diào)數(shù)據(jù)就可以了。


          根據(jù)上面的鋪墊,我們一起來看下 PBR 調(diào)效果的幾個部分的數(shù)據(jù):


          1. 自發(fā)光,這個控制就是一個發(fā)光的顏色或是一個自發(fā)光的貼圖;

          2. 物體的本色,一個本來的顏色或一個本色的貼圖(Albedo/Diffuse;

          3. 反射,包含鏡面反射+漫反射控制;

          4. 環(huán)境遮擋,使用一個環(huán)境遮擋的貼圖;

          5. 細(xì)節(jié)增強,使用法線貼圖與高度貼圖。


          上面 5 個點的數(shù)據(jù),美術(shù)的工作流程和導(dǎo)出除了反射以外其他基本都定下來了,接下來我們看下如何調(diào)整反射效果。


          我們把反射分成了鏡面反射與漫反射,PBR 有兩種方式來調(diào)反射的效果,一種是基于金屬度+粗糙度,另一種是反射度與光澤度。這兩種方式的數(shù)據(jù)還可以相互轉(zhuǎn)換,就像一個顏色可以使用 RGB 基于顏色分量來調(diào),也可以使用 YUV 來調(diào)亮度和色彩值,調(diào)好后它們之間還可以相互轉(zhuǎn)化。

           

          金屬度 + 粗糙度控制方式,就是通過物體的金屬度來控制物體的反射率。如果物體表面材質(zhì)單一,那么用一個數(shù)值表示就可以了,金屬度越高,反射率就越強。非金屬則用 0 來表示。



          如果物體表面材質(zhì)比較復(fù)雜(一個角色,戴了一個金屬盔甲),這個時候就沒有辦法用一個數(shù)值來表示了,需要把表面的金屬度存到一個貼圖里面(金屬貼圖。粗糙度控制物體表面的光滑程度,如下:



          對于表面材質(zhì)單一的物體,粗糙度也可以是一個數(shù)值,復(fù)雜物體表面的粗糙度也存在貼圖里面。


          如果粗糙度與金屬度都是一個數(shù)值,可以只使用一個顏色分量(RGBA 通道來存, 這樣就可以把金屬度與粗糙度合并到一個紋理里面,節(jié)約內(nèi)存。

           

          反射+光澤度控制方式,通過調(diào)整反射與物體表面的光澤度來控制,這樣調(diào)整出來的效果更接近于我們真實世界的情況,控制也更加靈活。

           

          在游戲開發(fā)中通常使用哪種模式來控制呢?我們先列舉一下兩種模式的優(yōu)缺點(面試經(jīng)常被問到


          金屬度+粗糙度工作流


          優(yōu)點:


          1. 更容易創(chuàng)作,因為各個貼圖是獨立分開的  

          2. 紋理占用內(nèi)存少(單通道,可合并)

          3. 使用更廣泛


          缺點:邊緣的偽像更明顯

           

          反射與光澤度工作流


          優(yōu)點:


          1. 邊緣偽影不明顯

          2. 控制靈活


          缺點:


          1. 靈活控制可能導(dǎo)致不遵守能量守恒破壞 PBR 原則

          2. RGB 貼圖多,占用內(nèi)存多


          在游戲開發(fā)中我們大部分用金屬度與粗糙度工作流,工作流確定下來后,還需實現(xiàn) Shader,根據(jù)數(shù)據(jù),把最終的效果渲染出來。這個 Shader 可以自己編寫定制,也可以使用內(nèi)置的 Shader。Cocos Creator 內(nèi)置了金屬度與粗糙度工作流的 Shader。

           


          06

          Cocos PBR Shader 參數(shù)詳解


          經(jīng)過上面的講解,一個 PBR 的物理渲染需要的數(shù)據(jù)如下:


          1. 自發(fā)光與自發(fā)光貼圖;

          2. 物體本來的顏色,baseColor/Diffuse/Albedo 貼圖

          3. 金屬度、粗糙度的數(shù)值與貼圖(可選,如果有貼圖,一般可以合并到一個貼圖里面

          4. 法線貼圖,高度貼圖

          5. 環(huán)境遮擋貼圖

           

          了解完這些以后,我們再來看 Cocos PBR Shader 參數(shù),就很簡單了,見下圖。


          法線貼圖:


           

          物體本來顏色:


           

          金屬度與粗糙度貼圖:


           

          金屬度+粗糙度+環(huán)境遮擋合并的貼圖:


           

          自發(fā)光貼圖:


           

          環(huán)境遮擋貼圖:


           

          物體本來顏色:

           


          遮擋系數(shù)調(diào)節(jié):


           

          金屬度與粗糙度數(shù)值:


           

          自發(fā)光顏色:

           

           

          最后給出一下官方 Shader 計算的數(shù)據(jù)的說明圖:


           

          美術(shù)導(dǎo)圖的時候,根據(jù)這個說明來制作對應(yīng)的貼圖,就可以配合 Cocos PBR Shader 來開發(fā)了。同時 Cocos 開源也可以學(xué)習(xí) PBR Shader 如何實現(xiàn),為定制渲染管線打好學(xué)習(xí)基礎(chǔ)。

           

          往期精彩


          瀏覽 83
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蘑菇视频在线观看隐藏线路 | 台湾少妇毛多性爱 | 欧美精品一一色哟哟 | 国产一级无码在线观看 | 爱搞搞爱搞搞爱搞搞 |