当前课程知识点:移动图形概论 >  第七章 基于物理的渲染 >  7.3 PBR 的实现 >  PBR 的实现

返回《移动图形概论》慕课在线视频课程列表

PBR 的实现在线视频

下一节:Vulkan 介绍

返回《移动图形概论》慕课在线视频列表

PBR 的实现课程教案、知识点、字幕

同学们大家好

今天我们继续介绍基于物理渲染的实现细节

今天的主要内容包括

实现基于物理的渲染用到的素材和素材的基本使用方法

演示中使用的素材可以分为四个不同的类别

一模型及相关纹理

二环境贴图纹理

三双向反射分布函数查找表

四全局照明纹理

大部分信息存储在纹理图像中

大大降低了着色器程序的复杂度

下面我们分别看一下这些素材

在我们的示例程序中

使用的最主要的素材就是头盔的模型

它是被渲染对象的网格结构

包括所有顶点的信息

接下来我们看一下反照率纹理

它是对象的正常基色或漫反射光下的颜色

这意味着

此纹理信息不包含任何阴影或定向光源信息

可以把它看做是对象在正常白光下的颜色

原始的素材是一个二维的正方形纹理数据

这里把它按照纹理贴图的方式

覆盖在模型表面

看起来更直观一些

这是粗糙度纹理

它用来描述物体表面的粗糙度或光滑程度

在基于物理的渲染中

粗糙度决定了物体表面如何发生镜面反射

同样我们把它作为单通道的颜色

作为纹理数据

覆盖在了模型的表面

回顾之前介绍过的BRDF函数

粗糙度对其中的DFG参数都有影响

在计算反射光线时会多次用到

金属性纹理决定应将材料看做是绝缘体还是导体

诸如木头和陶瓷之类的绝缘体

倾向于吸收和散射光从而产生漫反射

而诸如金属之类的导体则产生镜面反射

金属性可以是二值数据

也可以是0到1之间的一个系数

因此金属性决定了

应如何将漫反射光和镜面防射光的计算相结合

自发光纹理包含了物体表面上

任何自发光光源的信息

这类光源可以是LED和LCD显示器

在着色器程序运行完所有复杂的PBR数学运算之后

只需将自发光的分量添加到最终像素的颜色中

就可以实现自发光的效果

法线纹理用于描述物体表面的细节信息

它将法线向量的三个分量

作为颜色编码到纹理数据中

由于法向量都是基于表面的局部方向来定义

主要朝向是z轴方向

因此作为颜色表示时

其第三个分量也就是蓝色分量比较明显

整体看起来是一个蓝色的纹理数据

它可以用来描述原模型中没有定义的细节

可以通过法向量的方式表现对象上的凸起或凹陷

在获得漫反射产生的照明分量时

将使用从此纹理采样的表面法线信息来进行计算

使用法线纹理的方式可以降低模型的复杂度

如果没有法线纹理

更多的细节也就意味着更多的顶点

利用法线纹理可以定义每个像素的法线方向

增加了模型的细节信息

从这个对比图可以看出

使用500个三角形的简单模型

通过使用法线纹理之后

可以获得与使用

400万个三角形的同样模型的精细效果

环境光遮蔽纹理用来表达对象的不同区域

在环境光下的亮度

环境光遮蔽可以根据模型的几何结构预先计算

如果同样强度的光从各个方向照射到对象

则对象较外露的部分亮一些

而较封闭或遮蔽的区域暗一些

通常通过从对象表面上的点

向各个方向上投射光线来计算阴影量

光照射到对象另一部分的比例越大

该点将在环境光遮蔽下显得越暗

在光照处理的最后增加对此纹理的利用

可以大大提高渲染效果

这里列出了前面介绍过的全部模型相关数据

它们是 Khronos 工作组在网站上公开的开源模型

可以用来对算法进行验证

这个模型的名称是Damaged Helmet

接下来看环境贴图

环境贴图存储来自现实场景中的真实照片

既可以用来做3D纹理

也可以用来计算

后面的辐照度贴图和预滤波环境贴图

辐照度图通过环境贴图来计算

它记录了每个方向上的照度

可以对漫反射的情况进行计算

通过3D纹理可以很容易地进行采样

预滤波环境贴图是镜面反射计算中的第一项求和部分

代表镜面反射部分的光照信息

它根据粗糙度的不同

有不同级别的mip贴图

也可以作为3D纹理进行采样

BRDF查找表是镜面反射计算中第二项求和部分

可以使用粗糙度和视角对查找表进行采样

以确定F0的缩放比例和偏差

在着色器程序中

F0与缩放比例相乘

然后加上偏差计算求和的结果

最后我们看一看源代码中

这些数据分别对应哪些文件

在SDK中这些文件分布在不同的地方

但都在examples的assets目录下

我这里把它集中到一个目录里

其中bldflut是BRDF的查找表

DamagedHelmet是3D模型

然后名字中带Albedo的是反照率纹理

带emissive的是自发光纹理

带nomal的是法线纹理

名字中包含occlusionRoughnessMetallic那个是环境光遮蔽

粗糙度和金属性

三个标量数据组成的一个纹理

misty开头的三个文件分别是环境贴图

辐照度图和预滤波环境贴图的纹理

剩下的文件中

Satara开头的三个文件是另外一组环境贴图

sphere.pod是一个球体模型

cpp代码是程序源码

另外还包含四个着色器程序代码

同学们课后可以通过阅读这些代码

来了解程序实现的具体细节

好 今天的课程就到这里

谢谢大家

移动图形概论课程列表:

第一章 课程简介

-1.1 课程基本情况介绍

--课程基本情况介绍

-1.2 GPU 相关基础知识

--GPU 相关基础知识

-1.3 OpenGL ES 技术发展历史

--OpenGL ES 技术发展历史

-1.4 PowerVR SDK 安装和使用

--PowerVR SDK 安装和使用

-第一章测试

第二章 图形编程入门

-2.1 OpenGL ES 基本概念

--OpenGL ES 基本概念

-2.2 编写第一个图形程序

--编写第一个图形程序

-2.3 主要 API 介绍

--主要 API 介绍

-第二章测试

第三章 OpenGL ES 变换

-3.1 矢量和矩阵知识基础

--矢量和矩阵知识基础

-3.2 旋转与位移变换

--旋转与位移变换

-3.3 OpenGL ES 变换基础

--OpenGL ES 变换基础

-第三章测试

第四章 OpenGL ES 着色器

-4.1 着色器编程语言介绍

--着色器编程语言语法

--着色器编程语言特殊语法

-4.2 着色器编程实例

--着色器编程实例

-第四章测试

第五章 颜色与纹理

-5.1 颜色的基本概念

--颜色的基本概念

-5.2 纹理素材的使用

--纹理素材的使用

-5.3 立方体纹理

--立方体纹理

-第五章测试

第六章 光源与光照

-6.1 光照的基本概念

--光照的基本概念

-6.2 光源模型

--光源模型

-6.3 使用着色器渲染颜色

--使用着色器渲染颜色

-6.4 反射与折射

--反射与折射

-第六章测试

第七章 基于物理的渲染

-7.1 基于物理渲染的基本概念

--基于物理渲染的基本概念

-7.2 基于图像的照明

--基于图像的照明

-7.3 PBR 的实现

--PBR 的实现

-第七章测试

第八章 PowerVR 工具简介

-8.1 Vulkan 介绍

--Vulkan 介绍

-8.2 SDK 中的实用工具介绍

--SDK 中的实用工具介绍

-综合测试

PBR 的实现笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。