我之前写过两篇Filament编译文档,就在我的网站上,可以到如下地址找到:

捉不住的鼬鼠的训练场 - 文档

现在又在做安卓有关开发和编译的问题,尤其是涉及到C++原生代码编译so文件,然后安卓端引入打包成apk,这一套流程Filament都有。另外,它还有Vulkan后端,并配合OpenGL后端可以切换,它还是个PBR渲染引擎,和我目前在做的工作可谓非常吻合。因此,我又要学习Filament了,尤其是编译这一块,是我目前主要需要打通的工作点。

更多的不写了,前面两篇文档记录很详尽,几十页内容,从编译tools,到aar,到出apk包,以及jni、jar、so和a文件,dll和lib文件都有介绍。这里我补充介绍编译的问题,以便以后查看。

代码下载:

git clone --recursive https://github.com/google/filament.git

下载后得到目录filament,这就是后面会用到的根目录。然后准备编译Visual Studio的工程,就是在根目录建立out目录,然后out目录下建立cmake-windows-release目录。然后打开cmake,source选择根目录,build选择刚刚新建的cmake-windows-release目录。构建的时候默认启用了opengl,注意勾选它下面的FILAMENT_SUPPORTS_VULKAN,然后生成即可。这里以前可能还需要clang,现在filament已经转向vs了。

然后选全部编译,没有问题,可以编译一百多项目。选择material_sandbox作为启动项目,设置命令参数:

-a vulkan ..\..\..\assets\models\monkey\monkey.obj

即可渲染出来猴子的模型,可以在我之前的文档中看到效果,这里不贴了。

然后是编译安卓,先创建out/release/filament目录,然后需要编译桌面版工具。out目录下新建cmake-release,用Visual Studio x64 Native Tools Command Prompt执行,不是cmd或者powershell的命令行:

cmake ..\.. -G Ninja -DFILAMENT_SUPPORTS_VULKAN=ON -DCMAKE_INSTALL_PREFIX=..\release\filament -DCMAKE_BUILD_TYPE=Release
ninja install

这里out/release/filament目录下会生成bin,docs,include和lib等目录,bin目录下有matc等exe,后续编译安卓的时候要用。

然后创建out/android-release/filament,接着创建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 -DFILAMENT_SUPPORTS_VULKAN=ON
ninja install

这里out/android-release/filament目录下会生成include和lib目录,lib目录下会根据abi分不同的子目录,如arm64-v8a,该目录下会得到许多.a文件。

这样安卓的生成就完成了,注意我只用了arm64-v8a。然后需要生成aar,就进入根目录的android目录,用cmd命令行执行,注意是cmd,powershell不行,会报错filament not found in root project。powershell执行的时候gradlew报错找不到,加上“.\gradlew”执行报错filament not found in root project,而cmd执行的时候连“.\gradlew”都不需要,而且直接gradlew就执行成功了,看来cmd和powershell执行命令还是略有不同的,虽然大多数情况下一样。

用cmd在该目录下执行:

gradlew -Pcom.google.android.filament.dist-dir=..\out\android-release\filament -Pextra_cmake_args=-DFILAMENT_SUPPORTS_VULKAN=ON -Pcom.google.android.filament.abis=arm64-v8a -Pfilament_skip_samples assembleRelease

这样就得到了aar文件,生成完毕。如果遇到read system property https.proxyHost报错,可以设置根目录下的android/gradle.properties:

android.builder.sdkDownload=false

然后将根目录下的android/filament-android/build/outputs/aar/filament-android-release.aar拷贝到out目录。

对于filament的几个build.gradle,如果报错缺少v7的a文件等错误,可以用ndk指定仅使用v8的,参考如下:

defaultConfig {minSdkVersion versions.minSdktargetSdkVersion versions.targetSdkexternalNativeBuild {cmake {arguments.add("-DANDROID_PIE=ON")arguments.add("-DANDROID_PLATFORM=android-${versions.targetSdk}".toString())arguments.add("-DANDROID_STL=c++_static")arguments.add("-DFILAMENT_DIST_DIR=${filamentPath}".toString())cppFlags.add("-std=c++14")if (project.hasProperty('extra_cmake_args')) {arguments.add(extra_cmake_args)}}}ndk {abiFilters 'arm64-v8a'}}

或者更推荐这种做法,根目录下的android/gradle.properties里面有com.google.android.filament.abis选项,将all改为arm64-v8a。然后Android Studio打开工程,点一下samples里面的一个,如image based lighting,然后鼠标放到Build菜单点开,会有Make Module这个具体的sample的选项,这样就不用全部samples都编译了。

然后将后端设置为vulkan,只需要将MainActivity.kt中的引擎加vulkan参数即可:

engine = Engine.create(Engine.Backend.VULKAN)

将该sample编译的apk安装到手机运行即可。

Google Filament引擎编译记录相关推荐

  1. Linux aarch64交叉编译之 Google filament引擎

    对于filament的编译.该文章的目标是编译一套aarch64 Linux Debian嵌入式版本上可以运行的库,本来想在网上找些现成的,然而 资料少的一13,接下来就开始趟坑.老套路,先把linu ...

  2. Google Filament 源码学习(一):Filament 编译

    目录 前言 一.环境说明 二.环境搭建 1. Visual Studio 2019 2. Git & Cmake & Python3.7 安装 3. 克隆 Filament 源代码 4 ...

  3. google/filament 的引擎(Engine)

    引擎(Engine)是google/filament应用程序的入口.它跟踪用户创建的所有资源.管理渲染线程以及硬件渲染器. google/ filament的应用程序中应该首先创建引擎(Engine) ...

  4. 开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅

    开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅 http://www.cnblogs.com/pugang/archive/2012/04/02/2430519.h ...

  5. Google Filament 源码学习(三):Material System (二)

    目录 Filament Materials Guide Introduction 相关术语与概念 Material Models Lit Model Base Color Metallic Rough ...

  6. 基于Filament引擎的Animoji效果实现

    Animoji是2017年9月13日苹果发布的新款手机iPhone X上的增强现实(AR)表情包.其使用面部识别传感器来检测用户面部表情变化,同时用麦克风记录声音,并最终生成可爱的3D动画表情符号.2 ...

  7. Google Filament 源码学习(四):Material System (三) - 材质格式 (mat)

    目录 Filament Materials Guide Introduction Material definitions Format (材质定义的格式) Differences with JSON ...

  8. GEE系列:第6单元 在 Google 地球引擎中构建各种遥感指数

    GEE从入门到实战的10个系列单元: GEE系列:第1单元 Google地球引擎简介 GEE系列:第2单元 探索数据集 GEE系列:​第3单元 栅格遥感影像波段特征及渲染可视化 GEE系列:第4单元 ...

  9. WiredTiger引擎编译 及 LT_PREREQ(2.2.6)问题解决

    近期需要为异构引擎做准备, wiredtiger 以其优异的性能(B-tree和LSM-tree都支持)和稳定性(Mongodb的默认存储引擎) 被我们备选为异构引擎里的一个子引擎,后续将深入wire ...

最新文章

  1. 嵌入式C语言进行曲之要诀
  2. 《战狼2》电影观后感
  3. Android Stadio 使用GsonFormat 生成Java类
  4. 解决Could not load dynamic library ‘cudnn64_7.dll‘; dlerror cudnn64_7.dll not found
  5. 使用Q进行同步的Promises操作
  6. uva 12222——Mountain Road
  7. android volume挂载流程,Android SDCard UnMounted 流程分析(一)
  8. 点阵字体显示系列补记:将字库文件转换成数组形式
  9. Vue中,在<template>内进行页面链接跳转
  10. 知乎高赞:为什么许多原本的 Java 项目都试图用 go 进行重写开源?
  11. html5 小车动画_HTML5 实现小车动画效果(Canvas/CSS3/JQuery)
  12. 标准化画图【cmap】【imshow】【EllipseSkyRegion】【contour】【set_ticklabels】【coords】【colorbar】
  13. OSChina 周一乱弹 —— 最萌碰瓷
  14. 【3D建模制作技巧分享】Maya模型如何导入zbrush
  15. TCP/IP协议栈 路由器 交换机
  16. linux--常用命令
  17. redit高可用之哨兵
  18. 【python实战】怎么用python自动登录CSDN
  19. nginx php 设置时区,laravel5.8(二十)解决时区设置差8个小时解决办法
  20. 高权重淘宝标题关键词优化原理解析

热门文章

  1. pandas数据排序sort_values后面inplace=True与inplace=False的实例驱动理解
  2. vue 图片跨域问题解决
  3. Html和Markdown中的空格, nbsp; ensp; emsp; 以及 thinsp; zwnj; zwj;三种Unicode空格
  4. Ubuntu完全卸载与安装Mysql
  5. 图像处理中的forward warping 和 inverse warping
  6. 开发框架——横版格斗——动作游戏教程
  7. [笔试题目] 简单总结笔试和面试中的海量数据问题
  8. 计算机二本院校排名民办河北,2018河北二本大学排名
  9. 为什么价值增殖过程不外是超过一定点而延长了的价值形成过程
  10. Excel调整行高,鼠标右键直接选中一行进行调整了