【Filament】Filament环境搭建
1 前言
Filament 是一个实时物理渲染引擎,用于 Android、iOS、Linux、macOS、Windows 和 WebGL 平台。该引擎旨在提供高效、实时的图形渲染,并被设计为在 Android 平台上尽可能小而尽可能高效。Filament 支持基于物理的渲染(PBR),这意味着它可以模拟光线、材质和阴影等物理效果,以创建更逼真的图形场景。该引擎的设计注重性能和资源效率,使其成为移动设备和其他平台上渲染复杂图形的理想选择。
Filament 官方资料如下。
- Filament 仓库:https://github.com/google/filament
- Filament 中 PBR 原理及实现:https://google.github.io/filament/Filament.html
- Filament Materials Guide:https://google.github.io/filament/Materials.html
- Material Properties:https://github.com/google/filament/blob/main/docs/Material Properties.pdf
- Building Filament:https://github.com/google/filament/blob/main/BUILDING.md
- Building Filament for Android on Windows:https://github.com/google/filament/blob/main/android/Windows.md
- samples:https://github.com/google/filament/tree/main/samples
- android samples:https://github.com/google/filament/tree/main/android/samples
笔者本地编译环境如下。
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,配置如下。

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

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

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

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

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

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

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 节中会使用到,因此不要修改桌面工具的安装路径。

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 节中会使用到,因此不要修改平台插件的安装路径。

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 文件如下。

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环境搭建。
【Filament】Filament环境搭建的更多相关文章
- .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...
- Azure Service Fabric 开发环境搭建
微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...
- rnandroid环境搭建
react-native 环境搭建具体步骤这个大家已经玩烂了,这个主要是记录下来自己做win7系统遇到的坑 1.com.android.ddmlib.installexception 遇到这个问题,在 ...
- python开发环境搭建
虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...
- springMVC初探--环境搭建和第一个HelloWorld简单项目
注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...
- 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~
一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...
- Nexus(一)环境搭建
昨天,成功搭建了自己的 Maven 环境(详见:Maven(一)环境搭建),今天就来研究和探讨下 Nexus 的搭建! 使用背景: 安装环境:Windows 10 -64位 JDK版本:1.7 Mav ...
- 「译」JUnit 5 系列:环境搭建
原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...
- appium+robotframework环境搭建
appium+robotframework环境搭建步骤(Windows系统的appium自动化测试,只适用于测试安卓机:ios机需要在mac搭建appium环境后测试) 搭建步骤,共分为3部分: 一. ...
- Linux测试环境搭建的学习建议
随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.这里介绍学习Linux测试环境搭建的一些建议. 一.Linux测试环境搭建从基 ...
随机推荐
- 【转帖】MySQL InnoDB存储原理深入剖析与技术分析
一.MySQL记录存储: MySQL InnoDB的数据由B+树来组织,数据记录存储在B+树数据页(page)中,每个数据页16kb,数据页 包括页头.虚记录.记录堆.自由空间链表.未分配空间.slo ...
- 物理机和虚拟机上CPU睿频的区别
物理机和虚拟机上CPU睿频的区别 关于睿频 睿频是指当启动一个运行程序后,处理器会自动加速到合适的频率, 而原来的运行速度会提升 10%~20% 以保证程序流畅运行的一种技术. 一般max的睿频不能超 ...
- [转帖]Linux系统awk命令详解
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 ...
- [转帖]iptables命令详解和举例(完整版)
1.防火墙概述 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底 ...
- [转帖]学习linux必须知道的命令
https://www.cnblogs.com/aibeier/p/15315487.html 基础不牢,地动山摇.在linux命令行下查看命令帮助man用于查看命令的帮助信息 man cp--hel ...
- [转帖]Linux后门的几种姿势
转载自 https://evilanne.github.io/2017/08/26/Linux后门-持续关注/ 在一次渗透中,成功获取某目标几台比较重要的机器,当时只想着获取脱库,结果动静太大被发 ...
- 【发现一个问题】macos m2 下无法使用 x86_64-linux-musl-gcc 链接含有 avx512 指令的 c 代码
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 一开始是使用 golang 中的 cgo 来编译: env ...
- 强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解
强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法.双延迟深度确定性策略梯度TD3算法详解 1.核心词汇 深度确定性策略梯度(deep deterministic po ...
- 码云gitee创建仓库并用git上传文件
相关文章链接: 码云(gitee)配置SSH密钥 码云gitee创建仓库并用git上传文件 git 上传错误This oplation equires one of the flowi vrsions ...
- 驱动开发:如何枚举所有SSDT表地址
在前面的博文<驱动开发:Win10内核枚举SSDT表基址>中已经教大家如何寻找SSDT表基地址了,找到后我们可根据序号获取到指定SSDT函数的原始地址,而如果需要输出所有SSDT表信息,则 ...