Filament 實(shí)時渲染引擎介紹~~
作者:_子寬
來源:
https://blog.csdn.net/u010281174/article/details/107847966
摘要
Filament是一款Google開發(fā)的跨平臺的實(shí)時渲染引擎,支持PBR材質(zhì),并且針對Android平臺做了優(yōu)化(畢竟Google親兒子)。本文將針對Filament的特點(diǎn),簡單介紹Filament的一些特性,包括它的材質(zhì)系統(tǒng)和光照系統(tǒng)。
這些設(shè)計對于實(shí)現(xiàn)一款渲染器,特別是PBR渲染器具有一定的參考意義。至于具體的實(shí)現(xiàn)細(xì)節(jié),因?yàn)楦鶳BR理論重合度比較高,就不再贅述。

如果對這款引擎很感興趣,可以參考他們的文檔。這個文檔怎么說呢,詳細(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ì),這類布料的一個特點(diǎn)是其表面由纖維堆疊而成,會吸收和散射一定的入射光線。
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)度,可以還原真實(shí)世界中的光源情況。
這一套描述是通用的光源描述,F(xiàn)ilament的用法是將描述文件處理為紋理,然后在渲染的時候取出來判斷計算光照。我理解這個光源其實(shí)是對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)一步處理,使其色彩更加真實(shí)。
包含以下幾個步驟:
白平衡 色彩分級 色調(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ā)中的渲染器,主要特點(diǎn)是PBR材質(zhì)系統(tǒng),對Android的支持,色彩后處理系統(tǒng),其次是半成熟的光照系統(tǒng)。
作為渲染領(lǐng)域的學(xué)習(xí)材料還是不錯的。

技術(shù)交流,歡迎加我微信:ezglumes ,拉你入技術(shù)交流群。
推薦閱讀:
開通專輯 | 細(xì)數(shù)那些年寫過的技術(shù)文章專輯
NDK 學(xué)習(xí)進(jìn)階免費(fèi)視頻來了
覺得不錯,點(diǎn)個在看唄~

