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渲染管线)
Visual Studio 的安装网上教程无数,就不赘述了。说明一下注意事项:
1. 所要安装的组件如图勾选即可:
2. 建议 Window 10 SDK的版本不要随意更换。安装自己经常使用的版本。
默认安装,没有特殊要求。其中Python版本是Filament官方建议。而Git和Cmake下载安装最新版本即可。
Filament的源代码可以使用Git,直接从Github上克隆下来(克隆地址在第一节环境说明中)。但是这样直接克隆代码一般速度会很慢。一个比较有高效的下载方式是使用Gitee转存Filament源代码,再从Gitee克隆到自己的电脑中。
首先,注册登录Gitee。 网址:https://gitee.com/
然后,将Github上的Filament源码克隆到Gitee中。如下图操作:
1. 运行Git Bash
2. 选择安装位置 (安装到D盘)。命令:cd /d
3. 克隆Filament源代码(使用自己仓库中Filament的克隆地址)。 命令:git clone https://gitee.com/thebigapple/filament.git
CMake构建Filament比较简单。首先,进入Filament根目录。创建一个空文件夹,命名按自己喜好(一般使用build或out命名)。
构建完成后,我们进入之前自己新建文件夹内,找到TNT.sln,使用VS2019打开工程进行编译。
1. 右击 “解决方案”
2. 点击 “生成解决方案”
3. 可以自己根据喜好选择使用Debug模式或Release模式
1. 右键点击 shadowtest
2. 点击 “设为启动项目”
3. 点击调试
看到一个猴头在旋转,就大功告成了!
设置独显启动-- 方法(一)
将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;