目录

  • 前言
  • 一、环境说明
  • 二、环境搭建
    • 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 编译相关推荐

  1. Google Filament 源码学习(二):Material System (一)

    目录 前言 Material System Introduction Standard Model (标准材质) Standard Model Standard Model Summary Impro ...

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

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

  3. Google Filament 源码学习(六):Material System (五) - 材质系统框架

    目录 Introduction Filament 工程简化 删除 Filament 工程中非核心内容 根目录保留 build文件夹中保留 filament文件夹中保留 libs文件夹中保留 third ...

  4. 百度Apollo源码学习之Bazel编译介绍

    image.png 什么是Bazel Bazel是一个类似于Make的编译工具,是Google为其内部软件开发的特点量身定制的工具,如今Google使用它来构建内部大多数的软件.(怪不得看起来很像An ...

  5. yara 源码学习(二) 规则编译部分

    yara规则的详细信息请参考: https://yara.readthedocs.io/en/stable/writingrules.html 根据官方文档,yara规则长这个样子: [1]:yara ...

  6. Google Filament 源码学习(二):三方库分类总结

    前言 拿到Filament代码一头雾水,到底要怎么看呢,先从第三方库看起吧,如下对三方库进行了分类梳理. 注:刚刚开始学习,有很多库和基本概念都不是很清楚,有不当之处请大家随时指出,本人一定虚心接受. ...

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

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

  8. Google Filament 源码学习(五):Material System (四) - 材质系统 API

    目录 Shader public APIs Introduction Types Math Matrices Frame constants Vertex only Fragment only Han ...

  9. UEFI源码学习01-ARM AARCH64编译、ArmPlatformPriPeiCore(SEC)

    文章目录 1. AARCH64编译环境搭建 2. ArmPlatformPriPeiCore 2.1 QEMU_EFI.fd包含了什么 2.2 QEMU virt aarch64相关 2.3 从第一条 ...

最新文章

  1. ASP.NET中WebForm组件CheckBoxList编程
  2. 面向对象设计领域的OCP原则
  3. 携手百度 英特尔三大领域布局人工智能市场
  4. python接口测试-认识GET请求
  5. spring mvc 文件上传 form表单
  6. harbor登录验证_Harbor 源码浅析
  7. ASP.NET学生信息管理系统-权限管理-用户资料
  8. P1032-字串变换【bfs】
  9. 为什么用c语言程序中的if语句实现从1加到100最后的结果是负数,用C语言程式计算从1加到100的程式是怎样的?...
  10. linux的bash脚本
  11. python监控网页内容变化_使用Python监控文件内容变化代码实例
  12. oracle中的sysdba角色,oracle 以sysdba角色 登陆用户
  13. 20200210_logistic回归来预测违约的概率
  14. iOS SceneDelegate使用总结
  15. 彻底卸载微软拼音输入法
  16. ONOS 以及 ODL
  17. Design Compiler工具学习笔记(7)
  18. hadoop学习之路(2)
  19. 内存测试软件 ddr4,DDR4内存测试软件
  20. 终止正在运行的ORACLE作业

热门文章

  1. transitive dependencies (if any) will not be available, enable debug logging for more details
  2. 二叉树Ⅰ · 树型结构 · 二叉树 · 满二叉树 · 完全二叉树 · 二叉树的性质 · 二叉树的存储
  3. 以太坊:快速入门 Truffle
  4. 阿里云GPU计算型gn6i服务器配置性能好不好用?
  5. 复数计算 [(8+6i)*(4+3i)]/[(8+6i)+(4+3i)]= ?
  6. sql 查询之分段统计
  7. Mac系统brew install 安装报错 Error: Failure while executing
  8. CF 783 F. Vlad and Unfinished Business
  9. vs开发工具必备插件
  10. 华东师范大学 硕士毕业论文模版 overleaf版