• 【Filament】Filament环境搭建


    1 前言

    ​ Filament 是一个实时物理渲染引擎,用于 Android、iOS、Linux、macOS、Windows 和 WebGL 平台。该引擎旨在提供高效、实时的图形渲染,并被设计为在 Android 平台上尽可能小而尽可能高效。Filament 支持基于物理的渲染(PBR),这意味着它可以模拟光线、材质和阴影等物理效果,以创建更逼真的图形场景。该引擎的设计注重性能和资源效率,使其成为移动设备和其他平台上渲染复杂图形的理想选择。

    ​ Filament 官方资料如下。

    ​ 笔者本地编译环境如下。

    Cmake: 3.19
    ninja: 1.8.2
    Python: 3.11.5
    JDK: 17.0.9
    Git Bash: 2.42.0.2
    Visual Studio: 2019
    Android NDK: 25.1.8937393
    

    ​ 说明:Android SDK 的环境变量需要配置 ANDROID_HOME。

    2 Windows 编译

    ​ 官方编译介绍见 → Building Filament

    1)拉取 Filament 代码

    git clone --recurse-submodules git@github.com:google/filament.git
    # 切换至release分支
    git checkout release
    

    ​ 如果下载速度比较慢,在有代理软件(如 SSR)的前提下,在 ~/.ssh/config 文件(没有可以新建一个)里添加以下内容,可以提高下载速度。

    Host github.com
    User git
    ProxyCommand connect -H 127.0.0.1:1080 %h %p
     
    Host github.com
    User git
    ProxyCommand connect -S 127.0.0.1:1080 %h %p
    

    2)生成项目

    ​ 在 filament 根目录下创建【out\cmake-window】目录,打开 cmake-gui,配置如下。

    img

    ​ 在弹窗中选择 "Visual Studio 16 2019" 和 x64,如下。

    img

    ​ 配置完后,勾选 FILAMENT_SUPPORTS_VULKAN,再点击 Configure 按钮。

    img

    ​ 接着点击 Generate 按钮,生成项目。

    img

    3)编译项目

    ​ 在 cmake-gui 界面,点击 Open Project 按钮,将通过 Visual Studio 打开生成的项目,用户也可以通过使用 Visual Studio 打开【filament\out\cmake-windows\TNT.sln】文件来打开项目,按以下步骤编译项目。

    img

    4)运行项目

    ​ Debug 和 Release 版本的编译路径分别为【filament\out\cmake-windows\samples\Debug】、【filament\out\cmake-windows\samples\Release】,里面有很多 exe 文件,点击这些文件可以运行相应 Demo,如下是点击 gltf_instances.exe 文件运行的效果。

    img

    ​ 用户也可以通过以下方式运行相关 Demo。

    img

    3 Android 编译

    ​ 官方介绍见 → Building Filament for Android on Windows,本节所有命令都是通过【x64 Native Tools Command Prompt for VS 2019】命令行工具执行(注意:不能通过 cmd 或 Git Bash 执行这些命令)。

    3.1 桌面工具编译

    1)配置项目

    ​ 在 filament 根目录下创建【out\cmake-desktop-tools】目录,打开【x64 Native Tools Command Prompt for VS 2019】命令行工具,执行以下命令。

    cd out\cmake-desktop-tools
    cmake ^
        -G Ninja ^
        -DCMAKE_INSTALL_PREFIX=..\release\filament ^
        -DFILAMENT_ENABLE_JAVA=NO ^
        -DCMAKE_BUILD_TYPE=Release ^
        ..\..
    

    ​ 注意:不要修改桌面工具的安装路径(CMAKE_INSTALL_PREFIX),3.3 节中会使用到该路径。

    2)编译项目

    ninja matc resgen cmgen
    

    3)安装项目

    ninja install
    

    ​ 执行结束后,在【filament\out\release\filament\bin】目录下生成了一些 exe 文件,如下,箭头所指的 exe 文件在 3.3 节中会使用到,因此不要修改桌面工具的安装路径。

    img

    3.2 平台插件编译

    1)创建目录

    ​ 在 filament 根目录下分别创建以下目录。

    mkdir out\cmake-android-release-aarch64
    mkdir out\cmake-android-release-arm7
    mkdir out\cmake-android-release-x86_64
    mkdir out\cmake-android-release-x86
    

    2)配置项目

    ​ 通过【x64 Native Tools Command Prompt for VS 2019】命令行工具,在每个目录下依次执行以下命令。

    cd out\cmake-android-release-aarch64
    cmake ^
        -G Ninja ^
        -DCMAKE_BUILD_TYPE=Release ^
        -DCMAKE_INSTALL_PREFIX=..\android-release\filament ^
        -DCMAKE_TOOLCHAIN_FILE=..\..\build\toolchain-aarch64-linux-android.cmake ^
        ..\..
    
    cd out\cmake-android-release-arm7
    cmake ^
        -G Ninja ^
        -DCMAKE_BUILD_TYPE=Release ^
        -DCMAKE_INSTALL_PREFIX=..\android-release\filament ^
        -DCMAKE_TOOLCHAIN_FILE=..\..\build\toolchain-arm7-linux-android.cmake ^
        ..\..
    
    cd out\cmake-android-release-x86_64
    cmake ^
        -G Ninja ^
        -DCMAKE_BUILD_TYPE=Release ^
        -DCMAKE_INSTALL_PREFIX=..\android-release\filament ^
        -DCMAKE_TOOLCHAIN_FILE=..\..\build\toolchain-x86_64-linux-android.cmake ^
        ..\..
    
    cd out\cmake-android-release-x86
    cmake ^
        -G Ninja ^
        -DCMAKE_BUILD_TYPE=Release ^
        -DCMAKE_INSTALL_PREFIX=..\android-release\filament ^
        -DCMAKE_TOOLCHAIN_FILE=..\..\build\toolchain-x86-linux-android.cmake ^
        ..\..
    

    ​ 注意: 不要修改平台插件的安装路径(CMAKE_INSTALL_PREFIX),3.3 节中会使用到该路径。

    3)安装项目

    ​ 在每个 cmake-android-release-xxx 目录下,都执行一次以下命令。

    ninja install
    

    ​ 执行结束后,在【filament\out\android-release\filament\lib】目录下生成了一些平台插件库,如下,在 3.3 节中会使用到,因此不要修改平台插件的安装路径。

    img

    3.3 生成 AAR

    1)构建 aar

    ​ 进入【filament\android】目录,执行以下命令。

    gradlew -Pcom.google.android.filament.dist-dir=..\out\android-release\filament assembleRelease
    

    ​ 执行结束后,会生成 4 个 aar,位置如下。

    filament\android\filamat-android\build\outputs\aar\filamat-android-release.aar
    filament\android\filament-android\build\outputs\aar\filament-android-release.aar
    filament\android\filament-utils-android\build\outputs\aar\filament-utils-android-release.aar
    filament\android\gltfio-android\build\outputs\aar\gltfio-android-release.aar
    

    2)拷贝 aar

    ​ 将 aar 文件拷贝到【filament\out\aar】目录下。

    copy filamat-android\build\outputs\aar\filamat-android-release.aar ..\out\aar\
    copy filament-android\build\outputs\aar\filament-android-release.aar ..\out\aar\
    copy filament-utils-android\build\outputs\aar\filament-utils-android-release.aar ..\out\aar\
    copy gltfio-android\build\outputs\aar\gltfio-android-release.aar ..\out\aar\
    

    ​ 拷贝的 aar 文件如下。

    img

    3.4 导入依赖

    1)自动导入

    ​ 在 app\build.gradle 文件中添加以下依赖,版本号可以参考 → releases

    android {
        ...
        aaptOptions { // 在应用程序打包过程中不压缩的文件
            noCompress 'filamat', 'ktx'
        }
    }
    
    dependencies {
        implementation 'com.google.android.filament:filament-android:1.48.0'
        implementation 'com.google.android.filament:filamat-android:1.48.0'
        implementation 'com.google.android.filament:filament-utils-android:1.48.0'
        implementation 'com.google.android.filament:gltfio-android:1.48.0'
    }
    

    2)手动导入

    ​ 使用 3.3 节中编译的 aar(或从 releases 中下载 aar),将他们复制到【project\libs】或【project\app\libs】目录下。

    ​ 如果复制到【project\libs】目录下,在 app\build.gradle 中配置如下。

    android {
        ...
        aaptOptions { // 在应用程序打包过程中不压缩的文件
            noCompress 'filamat', 'ktx'
        }
    }
    
    dependencies {
        implementation fileTree(dir: '../libs', include: ['*.aar'])
    }
    

    ​ 如果复制到【project\app\libs】目录下,在 app\build.gradle 中配置如下。

    android {
        ...
        aaptOptions { // 在应用程序打包过程中不压缩的文件
            noCompress 'filamat', 'ktx'
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.aar'])
    }
    

    ​ 声明:本文转自【Filament】Filament环境搭建

  • 相关阅读:
    Oracle——常用的几种函数(含案例)
    芯片开发之难如何破解?龙智诚邀您前往D&R IP-SoC China 2023 Day
    前端实现页面文本复制/代码复制/mardown复制的几种方式
    阿里内部年末知识总结:springboot最牛皮的实战笔记
    数量关系(刘文超)
    从数据库发展史看数据库未来技术趋势
    Android-----OKHTTP分发器简要
    Oracle SQL执行计划操作(11)——层级相关操作
    网络路径监控分析
    农村经济与科技杂志农村经济与科技杂志社农村经济与科技编辑部2022年第13期目录
  • 原文地址:https://www.cnblogs.com/zhyan8/p/18024342