Google Filament 學(xué)習(xí)初探-For Android

Filament簡(jiǎn)介

Filament是Google開(kāi)源的實(shí)時(shí)PBR渲染引擎蹬敲,其可以用于Android赋荆、iOS午磁、macOS尝抖、Windows毡们、Linux和WebGL,是一款很新的3D渲染引擎昧辽。
是Google的AR引擎ARCore里默認(rèn)的渲染引擎衙熔,用在了其Sceneform渲染庫(kù)中。同時(shí)也作為Android插件搅荞,可以直接在Android Studio中預(yù)覽3D model红氯。

開(kāi)源地址為:https://github.com/google/filament

編譯Demo

1.編譯Filament

filament-master跟目錄下的build.sh的shell文件包含了所有平臺(tái)的編譯過(guò)程,生成的編譯后文件會(huì)放在out/目錄下咕痛。

為了編譯某個(gè)平臺(tái)痢甘,比如Android平臺(tái),需要進(jìn)行配置茉贡。也可以在build文件夾里塞栅,尋找各平臺(tái)各自的編譯文件。
比如build/android文件夾里腔丧,運(yùn)行build.sh即可編譯Android平臺(tái)的Filament放椰。

cd build/android
./build.sh release

等待編譯完成后,在根目錄的out文件夾里就會(huì)生成Android平臺(tái)的Filament編譯文件愉粤。

2.運(yùn)行Android的demo

進(jìn)入到跟目錄下的android文件夾里砾医,里面的文件目錄結(jié)構(gòu)為:

  • build : android工程的filament的gradle文件,用于引入引擎需要的庫(kù)衣厘,比如matc庫(kù)等如蚜。
  • common : android的幾個(gè)demo通用的文件。
  • filamat-android : 用于編譯渲染材質(zhì)的庫(kù)头滔,調(diào)用了matc怖亭。橋接了java和native代碼
  • filament-android : filament的各種渲染部分,比如相機(jī)坤检、天空盒子兴猩、box等,橋接了java和native代碼早歇。
  • gltfio-android : 用于加載glTF文件倾芝。GLTF代表Graphics Language Transmission Format(圖形語(yǔ)言傳輸格式)。這種跨平臺(tái)格式已成為Web上的3D對(duì)象標(biāo)準(zhǔn)箭跳。
  • samples : 里面包含了多個(gè)Android的demo晨另。
  • Windows.md : 介紹了如何在Windows上編譯Filament for Android。
    注意:本文環(huán)境是在macOS上谱姓,所有編譯過(guò)程都在macOS上進(jìn)行借尿。

寫(xiě)完這里,第一步的編譯過(guò)程也完成了,此時(shí)在根目錄的out/文件夾里已經(jīng)生成了filament for android的編譯文件路翻。

在Android Studio里打開(kāi)android/samples/hello-camera工程狈癞,這個(gè)工程將手機(jī)的相機(jī)渲染到一個(gè)3D的旋轉(zhuǎn)的box上。


hello-camera工程運(yùn)行結(jié)果

實(shí)際上此時(shí)項(xiàng)目編譯無(wú)法通過(guò)茂契,會(huì)報(bào)錯(cuò):

No matc binary could be found in /Users/junhu/Downloads/filament-master/out/release/filament/bin. Ensure Filament has been built/installed before building this app.

如何解決這個(gè)問(wèn)題呢蝶桶?

在hello-camera的build.gradle(非項(xiàng)目的build.gradle)文件里看到一個(gè)配置:

apply from: '../../../build/filament-tasks.gradle'

引用了配置文件filament-tastk.gradle,在android/build/文件夾里找到掉冶,打開(kāi)會(huì)看到:

def filamentToolsPath = file("../../../../out/release/filament")
if (project.hasProperty("filament_tools_dir")) {
    filamentToolsPath = file("$filament_tools_dir")
}
List<File> getBinaries(String name, File toolsPath) {
    def tool = ["/bin/${name}.exe", "/bin/${name}"]
    def toolFullPath = tool.collect { path -> Paths.get(toolsPath.absolutePath, path).toFile() }

    // Ensure that at least one matc binary and Filament library is present
    if (!toolFullPath.any { path -> file(path).exists() }) {
        throw new StopActionException("No ${name} binary could be found in " + toolsPath +
                "/bin. Ensure Filament has been built/installed before building this app.")
    }

    return toolFullPath
}

ext.matcFullPath = getBinaries('matc', filamentToolsPath)
ext.cmgenFullPath = getBinaries('cmgen', filamentToolsPath)
ext.filameshFullPath = getBinaries('filamesh', filamentToolsPath)
ext.resgenFullPath = getBinaries('resgen', filamentToolsPath)

但是我們的out/文件夾里并沒(méi)有release/filament真竖。
matc、cmgen厌小、filamesh恢共、resgen幾個(gè)二進(jìn)制文件,是在根目錄里的tools/里的工具類編譯生成的召锈。

  • matc :Material Compiler 材質(zhì)編譯器旁振,將mat文件編譯為filament可識(shí)別的文件
  • cmgen : Image-based lighting asset generator :
  • filamesh : Mesh converter 網(wǎng)格轉(zhuǎn)換器
  • resgen : Aggregates binary blobs into embeddable resources

在Android的build.sh里并沒(méi)有默認(rèn)編譯這幾個(gè)工具。
編譯很耗時(shí)涨岁,可以用其他系統(tǒng)編譯的工具,比如linux或max系統(tǒng)吉嚣。
https://github.com/google/filament/releases

在release里下載已經(jīng)編譯好的梢薪,比如下載mac編譯好的。

  • bin : tools下所有的工具類的編譯后的可執(zhí)行文件
  • docs : 工具類的使用說(shuō)明尝哆。

將bin文件夾拷貝到filament根目錄下秉撇,out/release/filament下。
再次編譯Android項(xiàng)目秋泄,即可編譯通過(guò)琐馆。

注意:官方的demo有個(gè)bug,授予相機(jī)權(quán)限后無(wú)法得到相機(jī)畫(huà)面恒序。需要退出程序再進(jìn)入才會(huì)有相機(jī)畫(huà)面瘦麸。

Filament的使用說(shuō)明可以參考之后的分析。
Filament分析-從Android官方項(xiàng)目分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歧胁,一起剝皮案震驚了整個(gè)濱河市滋饲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喊巍,老刑警劉巖屠缭,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異崭参,居然都是意外死亡呵曹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奄喂,“玉大人铐殃,你說(shuō)我怎么就攤上這事】沉模” “怎么了背稼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)玻蝌。 經(jīng)常有香客問(wèn)我蟹肘,道長(zhǎng),這世上最難降的妖魔是什么俯树? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任帘腹,我火速辦了婚禮,結(jié)果婚禮上许饿,老公的妹妹穿的比我還像新娘阳欲。我一直安慰自己,他們只是感情好陋率,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布球化。 她就那樣靜靜地躺著,像睡著了一般瓦糟。 火紅的嫁衣襯著肌膚如雪筒愚。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天菩浙,我揣著相機(jī)與錄音巢掺,去河邊找鬼。 笑死劲蜻,一個(gè)胖子當(dāng)著我的面吹牛陆淀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播先嬉,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼轧苫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了坝初?” 一聲冷哼從身側(cè)響起浸剩,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鳄袍,沒(méi)想到半個(gè)月后绢要,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拗小,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年重罪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剿配,死狀恐怖搅幅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呼胚,我是刑警寧澤茄唐,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蝇更,受9級(jí)特大地震影響沪编,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜年扩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一蚁廓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厨幻,春花似錦相嵌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至格了,卻和暖如春捏雌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背笆搓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纬傲,地道東北人满败。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像叹括,于是被迫代替她去往敵國(guó)和親算墨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361