Google Filament引擎编译记录

4 篇文章 1 订阅

我之前写过两篇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.minSdk
        targetSdkVersion versions.targetSdk

        externalNativeBuild {
            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安装到手机运行即可。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值