1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Filament 實時渲染引擎介紹~~

        共 3743字,需瀏覽 8分鐘

         ·

        2021-08-18 04:58

        作者:_子寬

        來源:

        https://blog.csdn.net/u010281174/article/details/107847966

        摘要

        Filament是一款Google開發(fā)的跨平臺的實時渲染引擎,支持PBR材質(zhì),并且針對Android平臺做了優(yōu)化(畢竟Google親兒子)。本文將針對Filament的特點,簡單介紹Filament的一些特性,包括它的材質(zhì)系統(tǒng)和光照系統(tǒng)。

        這些設(shè)計對于實現(xiàn)一款渲染器,特別是PBR渲染器具有一定的參考意義。至于具體的實現(xiàn)細(xì)節(jié),因為跟PBR理論重合度比較高,就不再贅述。

        如果對這款引擎很感興趣,可以參考他們的文檔。這個文檔怎么說呢,詳細(xì)的地方非常詳細(xì),簡略的地方一律“TODO”過,很神奇。

        平臺特性

        • 跨平臺,支持Android,IOS,Linux,maxOS,Windows
        • 提供C++,Java,JavaScript API
        • 底層圖形庫支持OpenGL 4.1+,OpenGL ES 3.0+,Metal,Vulkan 1.0,WebGL 2.0

        渲染特性

        • 支持Clustered forward renderer
        • 支持microfacet BRDF
        • 支持HDR/linear 光照
        • 支持各向異性材質(zhì)
        • 支持metallic,roughness,ao,normal mapping,texture mapping
        • 支持布料渲染
        • (弱)支持半透明材質(zhì)
        • 支持IBL
        • 支持物理相機(jī)模擬(快門,光圈等)
        • 支持shadows
        • 支持全局霧模擬
        • 支持色彩系統(tǒng)(color grading)
        • 支持FXAA,MSAA
        • 支持動態(tài)分辨率

        材質(zhì)系統(tǒng)

        材質(zhì)模型

        Filament定義了以下幾種材質(zhì)模型:

        • Lit(standard)
        • Subsurface
        • Cloth
        • Unlit

        其中,第一種也是用的最多的一種,在別的渲染器可能稱為standard model/material。

        Cloth用于模擬布料。

        Unlit嚴(yán)格來說不算一種材質(zhì),可以理解為在屏幕上顯示一些調(diào)試信息用的材質(zhì)。

        Lit Model

        Lit model是Filament支持最全面的也是最基礎(chǔ)的材質(zhì)模型,它是基于PBR模型的材質(zhì),包含以下幾種屬性:

        • baseColor,表示non-metallic表面的漫反射albedo,或者metallic表面的高光顏色
        • metallic,表示材質(zhì)的金屬性,0代表dielectric,1.0代表conductor

        metallic從0(左)到1(右)。

        • roughness,表示材質(zhì)的粗糙度,1.0代表光滑,0代表粗糙

        非金屬的roughness從0(左)到1(右)。

        金屬的roughness從0(左)到1(右)。

        • reflectance,表示Fresnel反射系數(shù)

        reflectance從0(左)到1(右)。

        • normal,表示材質(zhì)表面的局部法向偏移
        • ambientOcclusion,表示環(huán)境光照強(qiáng)度
        • emissive,表示材質(zhì)表面的發(fā)光程度
        • anisotropy和anisotropyDirection,描述各向異性程度
        • clearCoat,clearCoatRoughness和clearChatNormal,表示clear coat layer的參數(shù)
        • bentNormal,用于提升間接光的效果
        • postLightingColor,用于跟光照計算結(jié)果混合,描述特殊光照效果
        • ior,表示物體的折射率

        ior從1(左)到1.5(右)。

        • transmission,表示物體的透明度

        transmission從0(左)到1(右)。

        • absorption,表示材質(zhì)對不同透射光線的吸收系數(shù)

        absorption從 (0.0, 0.02, 0.14) (左)到 (0.0, 0.36, 2.3) (右)

        • microThickness和thickness,材質(zhì)的厚度參數(shù)

        其中,baseColor、metallic、roughness、reflectance、normal、ambientOcclusion、emissive都是PBR材質(zhì)中常用的參數(shù),用法也基本一致。

        有些物體表面會覆蓋一層薄薄的半透明材質(zhì),類似于手機(jī)表面的貼膜。

        但是這層薄膜也是有一定的顏色和朝向的,clear coat參數(shù)(clearCoat,clearCoatRoughness和clearChatNormal)就是用于描述這一層表面材質(zhì),默認(rèn)它是各向同性、非金屬的。

        其中clearCoat應(yīng)當(dāng)被視為布爾變量,描述的是是否存在此表面材質(zhì)。

        clearCoat從0(左)到1(右)。

        clearCoatRoughness從0(左)到1(右)。

        除此之外,有些物體表面是各向異性的,例如朝單一方向磨砂的金屬。anisotropy參數(shù)可以用于描述這種材質(zhì)。

        anisotropy從0(左)到1(右)。

        Subsurface model

        TODO

        這個模型文檔里沒有介紹,我也沒有用過,因此這里先略過。后面慢慢看代碼吧。

        Cloth model

        Cloth模型用于描述類似于紡織物的布料材質(zhì),這類布料的一個特點是其表面由纖維堆疊而成,會吸收和散射一定的入射光線。

        Cloth model包含前面Lit model的各種參數(shù),刪除了metallic和reflectance,額外添加兩個cloth相關(guān)的參數(shù):

        • sheenColor,描述高光反射的顏色

        藍(lán)色纖維有(右)與沒有(左)sheenColor

        • subsurfaceColor,描述次表面散射的顏色

        白色布料(左)與帶棕色subsurface scatting的白色布料(右)

        Unlit model

        如前所述,Unlit model不算是一個材質(zhì)模型,它用于渲染天空盒,或場景中以外的物體,比如用戶界面的圖形和文字,或者用于調(diào)試。

        如下圖所示。該模型只有三個參數(shù):

        • baseColor
        • emissive
        • postLightingColor

        用法跟Lit model一致。

        光照系統(tǒng)

        Filament支持的光照可以分為直接光(direct lighting)和間接光(indirect lighting),前者包括:

        • 方向光(directional lights)
        • 精確光源(punctual lights),包括point lights和spot lights,二者的區(qū)別是point light是超各個方向均勻發(fā)光的,而spot light有一個朝向,朝向以外的區(qū)域光照強(qiáng)度逐漸減少,直至為零:
        • Photometric lights,用配置文件描述光源發(fā)出的光線在各個方向上的強(qiáng)度,可以還原真實世界中的光源情況。

        這一套描述是通用的光源描述,F(xiàn)ilament的用法是將描述文件處理為紋理,然后在渲染的時候取出來判斷計算光照。我理解這個光源其實是對spot light的拓展。

        下圖展示了一些不同的光源描述文件。

        • 光源(Area lights):僅支持正方形和圓形的面光源。

        間接光包括:

        • Image-based lighting

        光照參數(shù)

        對于直接光來說,F(xiàn)ilament用以下參數(shù)來描述一個光源:

        • Type,定義光源類型,包括directional,point,spot,area
        • Direction,描述光線朝向,或者面光源的法向
        • Color,描述光源發(fā)出的光線的顏色
        • Intensity,描述光線強(qiáng)度
        • Falloff radius,光源所能影響到的最大半徑
        • Inner angle和Outer angle,描述spot light的內(nèi)外圓錐的角度
        • Length和Radius,描述面光源的邊長、半徑
        • Photometric profile,Masked profile和Photometric multiplier,描述puctual lights的屬性

        Imaging Pipeline

        Imaging pipeline用于對片元著色器輸出的顏色做進(jìn)一步處理,使其色彩更加真實。

        包含以下幾個步驟:

        • 白平衡
        • 色彩分級
        • 色調(diào)映射
        • OETF(opto-electronic transfer function)

        流程圖如下:

        Physically based camera

        基于物理的相機(jī)可以設(shè)置相關(guān)的相機(jī)參數(shù),對成像效果進(jìn)行調(diào)整。應(yīng)用到的相機(jī)參數(shù)包括光圈(aperture)、快門(shutter speed)、敏感度(ISO)。

        由于采用三個量表示曝光效果過于繁瑣,因此Filament將其簡化為exposure value,簡稱EV。

        總結(jié)

        總的來說,F(xiàn)ilament是一款還在開發(fā)中的渲染器,主要特點是PBR材質(zhì)系統(tǒng),對Android的支持,色彩后處理系統(tǒng),其次是半成熟的光照系統(tǒng)。

        作為渲染領(lǐng)域的學(xué)習(xí)材料還是不錯的。


        技術(shù)交流,歡迎加我微信:ezglumes ,拉你入技術(shù)交流群。

        推薦閱讀:

        音視頻面試基礎(chǔ)題

        OpenGL ES 學(xué)習(xí)資源分享

        開通專輯 | 細(xì)數(shù)那些年寫過的技術(shù)文章專輯

        NDK 學(xué)習(xí)進(jìn)階免費視頻來了

        推薦幾個堪稱教科書級別的 Android 音視頻入門項目

        覺得不錯,點個在看唄~


        瀏覽 183
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲视频第一页 | 美穴无码 | 一区二区免费视频 | 97午夜| 伊人在线视频 | 强壮公撩开我的裙子口述 | 高清国产一级婬片A片大黄九色 | 2024无码 | chinesehdxxxxxvideo | 欧美国产日韩激情 |