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

前言

Filament 是 Google 开发的一款开源的基于物理的实时渲染引擎。详细信息可以在GitHub上查阅 地址

  作为一个打算在图形圈里死磕的小白来说,接触Filament也算是一个必然吧。阅读并调试了一段时间的源代码,我才发现,自己还没资格自称程序员。还是要不断学习啊!虽然读过一些开源的图形库源码。但都是一些偏学术的开源项目,这些开源代码更倾向于对算法的描述,而很少关心系统架构与设计模式的运用。一些开源的图形软件源码我也略有了解。像Blender这类用纯C语言编写的软件,对于一个Java出身,习惯面向对象编程的我来说,阅读起来,确实有点吃力。与其相比,Orge则是一个图形引擎源码阅读入门的不错选择。而UE4我果断放弃,读了一个多星期,也没捋清楚其架构。对于我来说,UE4太庞大了, 不适合入门。最终我还是决定深入研读Filament。也没什么特别的理由,就是很喜欢它对shader的管理模式,还有就是想了解FrameGraph是怎样实现对资源的再分配。(为什么用不到的资源,如 Pass 或是纹理。在执行过程中被剔除)


一、环境说明

  由于最近工作学习环境都是在Win10系统上搭建的,所以学习Filament的环境也继续使用Win10进行搭建。Filament 几乎支持现在所有主流的系统平台,学习根据自己的实际情况进行选择。官方相关的编译教程相当全面,很容易上手。
  下面我介绍一下我学习 Filament 使用的环境:

1. 操作系统: Window 10 专业版
2. IDE:Visual Studio 2019(v16.7.0)
3. Win SDK:10.0.17763.132
4. Filament版本: v1.9.10  https://github.com/google/filament.git
5. Filament底层图形API: OpenGL
6. Git v2.30.1  https://git-scm.com/downloads
7. Python 3.7 https://www.python.org/downloads/release/python-374/
8. Cmake 3.18.2 https://cmake.org/download/

注:

  学习 Filament 还是需要有一定的图形渲染算法基础,并且掌握任意一种图形API的渲染管线(如:OpenGL、Metal等)。否则,阅读代码的时候会相当痛苦。我记得我刚开始读代码的时候,满头的问号。直到看到OpenGL相关的代码才算是柳暗花明!
  安利一下,我食用过的,比较好的入门教程。

	1.	闫令琪,闫老师的《现代计算机图形学入门》视频教程。 传送门:https://www.bilibili.com/video/BV1X7411F744
	2.	OpenGL教程:
		1.	中文:https://learnopengl-cn.readthedocs.io/zh/latest/
		2.	英文:https://learnopengl.com/
		3.	GitHub:https://github.com/LearnOpenGL-CN

  闫老师的课程我是跟直播的,动手做了所有作业。也正因如此,巩固了自己渲染算法的基础。课程使用的程序框架也很精炼,非常适合新手食用。至于为什么推荐这个课程,无需解释!(建议:作业要自己独立完成,视频要经常看)

  OpenGl教程(LearnOpenGL),个人推荐食用英文版教程。其实,中文翻译教程也不错,但是中文版缺少PBR( physically based rendering,基于物理的渲染)相关内容。而学习Filament,PBR是必须要掌握的。还有就是在算法的数学模型推导过程中,英文版更容易理解些(个人感觉)。(建议:所有代码自己写一遍,掌握OpenGL渲染管线)

二、环境搭建

1. Visual Studio 2019

   Visual Studio 的安装网上教程无数,就不赘述了。说明一下注意事项:

1. 所要安装的组件如图勾选即可:

在这里插入图片描述

2. 建议 Window 10 SDK的版本不要随意更换。安装自己经常使用的版本。

2. Git & Cmake & Python3.7 安装

  默认安装,没有特殊要求。其中Python版本是Filament官方建议。而Git和Cmake下载安装最新版本即可。

3. 克隆 Filament 源代码

   Filament的源代码可以使用Git,直接从Github上克隆下来(克隆地址在第一节环境说明中)。但是这样直接克隆代码一般速度会很慢。一个比较有高效的下载方式是使用Gitee转存Filament源代码,再从Gitee克隆到自己的电脑中。
   首先,注册登录Gitee。 网址:https://gitee.com/
   然后,将Github上的Filament源码克隆到Gitee中。如下图操作:


在这里插入图片描述


  操作比较简单,就是将 Filament 的 git 地址填入,单击导入即可。其实导入Gitee的过程也不是很快。但是优势在于,这种方式是离线导入,可以关闭网页,后台会自动将源代码克隆下来。不必担心克隆过程中网络中断,克隆失败的问题。

在这里插入图片描述


  导入成功后,我们可以在自己的Gitee仓库中找到Filament源代码,复制克隆地址。

在这里插入图片描述


  最后,我们使用Git Bash 将源代码克隆到自己的电脑中。而版本的选择,个人建议使用最新的。毕竟Filament有很多大神在维护和完善。
1. 运行Git Bash
2. 选择安装位置 (安装到D盘)。命令:cd  /d
3. 克隆Filament源代码(使用自己仓库中Filament的克隆地址)。 命令:git clone https://gitee.com/thebigapple/filament.git

在这里插入图片描述

4. Cmake 构建 Filament

  CMake构建Filament比较简单。首先,进入Filament根目录。创建一个空文件夹,命名按自己喜好(一般使用build或out命名)。


在这里插入图片描述


  然后运行cmake-gui.exe,设置根目录和构建输出位置。(也可以按照官方教程,使用命令行进行构建)

在这里插入图片描述


  设置好目录后,依次点击 Configure 和 Generate 进行工程构建。

在这里插入图片描述


  完成后,Cmake会提示一个Warning,找不到JDK。我使用C++进行构建,所以这个可以忽略。但像我这种有强迫症的人来说,看到红字很不爽。因此,在构建前先将 Filament 根目录下的 CMakeLists.txt 文件进行修改。将633~635行关于Java相关代码删除即可。

在这里插入图片描述


5. Filament 编译

  构建完成后,我们进入之前自己新建文件夹内,找到TNT.sln,使用VS2019打开工程进行编译。

1. 右击 “解决方案”
2. 点击 “生成解决方案”
3. 可以自己根据喜好选择使用Debug模式或Release模式

在这里插入图片描述


  编译完成后,我们可以运行一些Filament提供的Demo,验证是否编译成功。
1. 右键点击 shadowtest
2. 点击 “设为启动项目”
3. 点击调试

在这里插入图片描述


  看到一个猴头在旋转,就大功告成了!


在这里插入图片描述


注意事项

  • 克隆 Filament 源代码时,最好选择最新版本。一些老版本的源代码在编译的时候会报错,导致编译失败。(错误很好解决,随着提示修改即可)
  • VS2019 最好选择 v16.7以前的版本。因为我之前使用16.7.5编译Filament是没问题的,但是更新VS2019到16.8后,运行Demo无法正常显示(黑屏或红屏)。重新装回16.7版本的VS2019,再编译就没问题了。至今也没有弄明白为什么会这样。
  • 自己的电脑如果是双显卡,也有可能会出现运行Demo无法正常显示的问题。调试了一个多月。也算是巧合,遇到类似的问题,找到了解决方案。双显卡电脑(特别是笔记本,一般都会有一个集显和一个独显)。运行Filament Demo时一定要设置使用独显启动。

设置独显启动-- 方法(一)

  将Demo的exe文件添加到独显启动的列表中。(该方法只对N卡)

  首先,右击桌面 -> 点击Nvidia 控制面板吧。


在这里插入图片描述


  然后,按照下图顺序操作即可。

在这里插入图片描述


设置独显启动-- 方法(二)

  将下面代码加入到 Filament Demo源文件中。

// http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf
// The following line is to favor the high performance NVIDIA GPU if there are multiple GPUs
// Has to be .exe module to be correctly detected.
// N卡使用独显运行
extern "C" __declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001;

// And the AMD equivalent
// Also has to be .exe module to be correctly detected.
// A显卡使用独显运行
extern "C" __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 0x00000001;
  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
编译Filament Windows,首先需要下载Filament代码。可以从Filament的Github仓库中获取代码,找到Windows平台的码,然后将其下载到本地。 在开始编译之前,需要确保开发环境已经设置好。首先需要安装CMake,这是一个跨平台的构建工具。CMake可以根据代码生成相应的Makefile或者Visual Studio的项目文件,用于编译代码。可以从CMake的官方网站下载适合的版本并安装到系统中。 接下来,需要安装其他的开发工具和库依赖。Filament依赖于一些第三方库,例如protobuf、freetype和libjpeg-turbo等。这些库需要在编译之前安装到系统中。 安装完所有依赖项后,就可以开始编译Filament了。首先,在代码目录下创建一个用于构建的目录,例如"build"。然后使用CMake指定生成的目标平台为Windows,并指定"build"目录作为构建目录。运行CMake命令如下: ``` cmake -G "Visual Studio 16 2019" -A x64 .. ``` 这个命令会生成一个Visual Studio解决方案文件,用于编译Filament。然后可以打开生成的Visual Studio解决方案文件,使用Visual Studio进行编译。 在Visual Studio中,可以选择Release或Debug模式,并点击编译按钮进行编译编译完成后,就可以在生成的目录中找到编译好的Filament库文件和示例程序。 通过以上步骤,就可以成功编译Filament Windows版本。可以将编译好的库文件集成到自己的项目中,或者运行示例程序进行测试。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值