Google Filament 源码学习(一):Filament 编译
目录
- 前言
- 一、环境说明
- 二、环境搭建
- 1. Visual Studio 2019
- 2. Git & Cmake & Python3.7 安装
- 3. 克隆 Filament 源代码
- 4. Cmake 构建 Filament
- 5. 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/BV1X7411F7442. 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;
Google Filament 源码学习(一):Filament 编译相关推荐
- Google Filament 源码学习(二):Material System (一)
目录 前言 Material System Introduction Standard Model (标准材质) Standard Model Standard Model Summary Impro ...
- Google Filament 源码学习(四):Material System (三) - 材质格式 (mat)
目录 Filament Materials Guide Introduction Material definitions Format (材质定义的格式) Differences with JSON ...
- Google Filament 源码学习(六):Material System (五) - 材质系统框架
目录 Introduction Filament 工程简化 删除 Filament 工程中非核心内容 根目录保留 build文件夹中保留 filament文件夹中保留 libs文件夹中保留 third ...
- 百度Apollo源码学习之Bazel编译介绍
image.png 什么是Bazel Bazel是一个类似于Make的编译工具,是Google为其内部软件开发的特点量身定制的工具,如今Google使用它来构建内部大多数的软件.(怪不得看起来很像An ...
- yara 源码学习(二) 规则编译部分
yara规则的详细信息请参考: https://yara.readthedocs.io/en/stable/writingrules.html 根据官方文档,yara规则长这个样子: [1]:yara ...
- Google Filament 源码学习(二):三方库分类总结
前言 拿到Filament代码一头雾水,到底要怎么看呢,先从第三方库看起吧,如下对三方库进行了分类梳理. 注:刚刚开始学习,有很多库和基本概念都不是很清楚,有不当之处请大家随时指出,本人一定虚心接受. ...
- Google Filament 源码学习(三):Material System (二)
目录 Filament Materials Guide Introduction 相关术语与概念 Material Models Lit Model Base Color Metallic Rough ...
- Google Filament 源码学习(五):Material System (四) - 材质系统 API
目录 Shader public APIs Introduction Types Math Matrices Frame constants Vertex only Fragment only Han ...
- UEFI源码学习01-ARM AARCH64编译、ArmPlatformPriPeiCore(SEC)
文章目录 1. AARCH64编译环境搭建 2. ArmPlatformPriPeiCore 2.1 QEMU_EFI.fd包含了什么 2.2 QEMU virt aarch64相关 2.3 从第一条 ...
最新文章
- ASP.NET中WebForm组件CheckBoxList编程
- 面向对象设计领域的OCP原则
- 携手百度 英特尔三大领域布局人工智能市场
- python接口测试-认识GET请求
- spring mvc 文件上传 form表单
- harbor登录验证_Harbor 源码浅析
- ASP.NET学生信息管理系统-权限管理-用户资料
- P1032-字串变换【bfs】
- 为什么用c语言程序中的if语句实现从1加到100最后的结果是负数,用C语言程式计算从1加到100的程式是怎样的?...
- linux的bash脚本
- python监控网页内容变化_使用Python监控文件内容变化代码实例
- oracle中的sysdba角色,oracle 以sysdba角色 登陆用户
- 20200210_logistic回归来预测违约的概率
- iOS SceneDelegate使用总结
- 彻底卸载微软拼音输入法
- ONOS 以及 ODL
- Design Compiler工具学习笔记(7)
- hadoop学习之路(2)
- 内存测试软件 ddr4,DDR4内存测试软件
- 终止正在运行的ORACLE作业
热门文章
- transitive dependencies (if any) will not be available, enable debug logging for more details
- 二叉树Ⅰ · 树型结构 · 二叉树 · 满二叉树 · 完全二叉树 · 二叉树的性质 · 二叉树的存储
- 以太坊:快速入门 Truffle
- 阿里云GPU计算型gn6i服务器配置性能好不好用?
- 复数计算 [(8+6i)*(4+3i)]/[(8+6i)+(4+3i)]= ?
- sql 查询之分段统计
- Mac系统brew install 安装报错 Error: Failure while executing
- CF 783 F. Vlad and Unfinished Business
- vs开发工具必备插件
- 华东师范大学 硕士毕业论文模版 overleaf版