【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
- 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 %pHost 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
执行结束后,在【filament\android\filamat-android\build\outputs\aar】目录下会生成 filamat-android-release.aar 文件,如下。

2)拷贝 aar
将 aar 文件拷贝到【filament\out】目录下。
copy filament-android\build\outputs\aar\filament-android-release.aar ..\out\相关文章:
【Filament】Filament环境搭建
1 前言 Filament 是一个实时物理渲染引擎,用于 Android、iOS、Linux、macOS、Windows 和 WebGL 平台。该引擎旨在提供高效、实时的图形渲染,并被设计为在 Android 平台上尽可能小而尽可能高效。Filament 支持基于物理的渲染(PBR)&…...
外包干了2个月,技术倒退2年。。。。。
先说一下自己的情况,本科生,20年通过校招进入深圳某软件公司,干了接近4年的功能测试,今年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
使用 python ffmpeg 批量检查 音频文件 是否损坏或不完整
自用工具,检查下载的音乐是否有损坏 或 下载不完整 使用方法,把 in_dir r’D:\158首无损珍藏版’ 改成你自己的音乐文件夹路径 如果发现文件有损坏,则会在命令行打印错误文件的路径 注意,要求 ffmpeg 命令可以直接在命令行调用…...
Django:通过user-agent判断请求是来自移动端还是PC端(电脑端)
第一种思路: 根据博文 Djano的request.META是什么?的研究成果,先判断有无键HTTP_SEC_CH_UA_MOBILE,如果没有,再去按博文 网站如何判断请求是来自手机-移动端还是PC-电脑端?如何让网站能适应不同的客户端&am…...
Linux中ssh远程登录系统和远程拷贝
本章主要介绍ssh远程登录系统和远程拷贝的方法 ssh的基本用法打开远程图形化界面ssh无密码登录和安全操作Windows远程登录远程拷贝 很多时候服务器并没有显示器,我们也不可能每次都通过控制台去管理服务器,这时就需 要远程登录。远程登录到服务器可以通…...
git常用命令小记
(文章正在持续更新中) git init - 在当前目录下初始化一个新的 Git 仓库。 git clone [url] - 克隆远程仓库到本地。 git add [file] - 将文件添加到暂存区。 git commit -m "commit message" - 将添加到暂存区的文件提交到本地仓库。 git pus…...
深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动
文章目录 前言一、输入系统的基本组成部分二、输入系统相关源码分析1、IMS 构建1.1、SystemServer # startOtherServices()1.2、InputManagerService1.3、NativeInputManager # nativeInit()1.4、NativeInputManager1.5、InputManager1.6、InputDispatcher1.7、InputReader1.8、…...
SoC with CPLD and MCU ?
AG32 MCU 产品支持多种接口外设,具备与业界主流产品的兼容性,并内置额外的2K FPGA 可编程逻辑。 产品支持 LQFP-48,LQFP-64,LQFP-100 ,QFN-32等不同封装。其所有可用 IO 都可以任意地进行映射和互换,以灵活…...
基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(二)——数据清洗、转换
2 数据清洗、转换 此实验使用S3作为数据源 ETL: E extract 输入 T transform 转换 L load 输出 大纲 2 数据清洗、转换2.1 架构图2.2 数据清洗2.3 编辑脚本2.3.1 连接数据源(s3)2.3.2. 数据结构转换2.3.2 数据结构拆分…...
vuepress-----6、时间更新
# 6、时间更新 基于Git提交时间修改文字时间格式 moment # 最后更新时间 # 时间格式修改 下载库文件 yarn add momentconst moment require(moment); moment.locale(zh-cn)module.exports {themeConfig: {lastUpdated: 更新时间,},plugins: [[vuepress/last-updated,{trans…...
C++ ini配置文件的简单读取使用
ini文件就是简单的section 下面有对应的键值对 std::map<std::string, std::map<std::string, std::string>>MyIni::readIniFile() {std::ifstream file(filename);if (!file.is_open()) {std::cerr << "Error: Unable to open file " << …...
【稳定检索|投稿优惠】2024年经济管理与安全科学国际学术会议(EMSSIC 2024)
2024年经济管理与安全科学国际学术会议(EMSSIC 2024) 2024 International Conference on Economic Management and Security Sciences(EMSSIC 2024) 一、【会议简介】 2024年经济管理与安全科学国际学术会议(EMSSIC 2024),将于繁华的上海城召开。这次会议的主题是“…...
什么是网站?
这篇文章是我学习网站开发,阶段性总结出来的。可以帮助你 通俗易懂 地更加深刻理解网站的这个玩意。 一,网站和网页的区别? 网站是由一个个网页组成。我们在浏览器上面看到的每一个页面就是网页,这些 相关的 网页组成一个网站。…...
pg_stat_replication.state 含义
在PostgreSQL中,pg_stat_replication视图提供了有关连接到主服务器的流式复制进程(备用服务器)的信息。该视图中的一个列是state,它指示复制进程的当前状态。 state列可以具有各种值: startup: This WAL sender 刚开始运行 catc…...
JavaWeb(六)
一、Maven的常用命令 maven的常用命令有:compile(编译)、clean(清理)、test(测试)、package(打包)、install(安装)。 1.1、compile(编译) compile(编译)的作用有如下两点: 1、从阿里云下载编译需要的jar包,在本地仓库也能看到下载好的插件(远程仓库配置的是阿里…...
GPIO的使用--时钟使能含义--代码封装
目录 一、时钟使能的含义 1.为什么要时钟使能? 2.什么是时钟使能? 3.GPIO的使能信号? 二、代码封装 1.封装前完整代码 2.封装结构 封装后代码 led.c led.h key.c key.h main.c 一、时钟使能的含义 1.为什么要时钟使能?…...
最小化安装 Neokylin7.0 用于搭建 Hadoop 集群
文章目录 环境搭建背景虚拟机创建和环境配置安装过程注意事项虚拟机设置软件选择KOUMP系统分区网络和主机名打开以太网,并记录信息配置 IPv4修改主机名 创建用户 hadoop完全分布式搭建-CSDN博客 环境搭建背景 为什么不从hadoop100或者hadoop101开始,而是…...
苍穹外卖面试题-中
8. 如何理解分组校验 很多情况下,我们会将校验规则写到实体类中的属性上,而这个实体类有可能作为不同功能方法的参数使用,而不同的功能对象参数对象中属性的要求是不一样的。比如我们在新增和修改一个用户对象时,都会接收User对象…...
Python 重要数据类型
目录 列表 序列操作 列表内置方法 列表推到式 字典 声明字典 字典基本操作 列表内置方法 字典进阶使用 字典生成式 附录 列表 在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用。列表就是这样的…...
03、pytest初体验
官方实例 # content of test_sample.py def func(x):return x 1def test_ansewer():assert func(3) 5步骤解释 [100%]指的是所有测试用例的总体进度,完成后,pytest显示一个失败报告,因为func(3)没有返回5 注意:你可以使用ass…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
