【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…...
SolidWorks参数化建模实战:从规则定义到智能装配
1. 参数化设计的核心思想与实战价值 我第一次接触SolidWorks参数化建模是在设计一个多规格管道连接件时。当时客户要求在24小时内提供5种不同口径的变型设计,传统建模方法让我不得不复制粘贴并逐个修改尺寸,结果在第三次修改时漏掉了一个关键孔位&#x…...
RTKLIB解算精度上不去?可能是这5个RTKNAVI选项你没调对(附参数优化建议)
RTKLIB解算精度优化实战:5个关键参数设置与场景化调优指南 当你已经能够熟练运行RTKNAVI完成基本定位解算,却发现动态RTK结果总在浮点解徘徊、固定率忽高忽低,或是基线稍长就精度骤降时,问题往往藏在那些容易被忽略的高级参数里。…...
这家“冠军机器狗”企业广募人才 | 智身科技:邀你一起玩转具身智能
不止于工作,这是一场定义未来的邀约,一起奔赴具身智能的广阔未来。 01 我们是谁 智身科技成立于2023年,是一家专注于具身智能领域的高新技术企业。我们以自主研发为核心,构建了从核心部件、整机制造到场景化落地的全链条能力。 技…...
昇腾NPU部署Qwen3-30B-A3B避坑指南:从驱动检查到vLLM参数调优全解析
昇腾NPU部署Qwen3-30B-A3B实战手册:深度调优与异常处理全景指南 当你在深夜的服务器机房,面对闪烁的NPU状态灯和一堆报错日志时,是否曾希望有一份真正懂行的技术手册?本文将带你深入昇腾NPU部署Qwen3-30B-A3B大模型的每一个技术细…...
轨道桥梁与列车这对CP,到底怎么互相伤害
车桥耦合动力学模型,轮轨耦合动力学模型,采用二自由度列车模型,可以改为FF梁SF梁,采用德国轨道谱,采用积分算法,可以输出桥梁任意位置的响应。玩轨道桥梁动力学的老铁们都知道,车桥耦合这玩意儿…...
360周鸿祎:智能体技术破圈,引领产业全面重构与独角兽机遇
【导语:在2026中关村论坛年会全球独角兽企业大会上,360集团创始人周鸿祎围绕“龙虾”等新一代智能体技术,阐述其带来的产业变革机遇,涉及互联网、软件等多领域重构,有望催生大量独角兽企业。】智能体技术“破圈”&…...
Halcon读取条形码和二维码
读取条形码1创建条形码句柄create_bar_code_model(: : GenOaramName,GenParamValue: BarCodeHandle)2设置条形码参数GenParamName 设置的参数element_size_min 条形码最小单位,黑条之间的最小间距barcode_width_min条形码的最小宽度persistence 设置条形码的查找精度…...
Claude等Agent智能体如何集成CasRel模型增强信息处理能力
Claude等Agent智能体如何集成CasRel模型增强信息处理能力 最近在跟一些做企业知识库和智能客服的朋友聊天,他们都在头疼一个问题:大模型回答商业问题的时候,经常抓不住重点。比如你问“A公司收购B公司花了多少钱”,它可能会把新闻…...
不用公网IP!用cpolar内网穿透实现PicHome多设备同步的3种方案对比
零公网IP实现PicHome多端同步:cpolar内网穿透全方案解析 在数字资产爆炸式增长的今天,如何安全高效地管理个人媒体库成为现代人的刚需。PicHome作为一款开源网盘系统,凭借其Docker化部署的便捷性和AI增强的媒体管理能力,正在成为家…...
Arduino库管理终极指南:在VS Code中如何优雅添加自定义头文件(避坑版)
Arduino库管理终极指南:在VS Code中优雅添加自定义头文件 第一次在VS Code里看到"fatal error: my_library.h: No such file or directory"的红色报错时,我盯着屏幕发了五分钟呆。作为从Arduino IDE转战VS Code的老玩家,本以为能无…...
