当前课程知识点:移动图形概论 >  第六章 光源与光照 >  6.3 使用着色器渲染颜色 >  使用着色器渲染颜色

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

使用着色器渲染颜色在线视频

下一节:反射与折射

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

使用着色器渲染颜色课程教案、知识点、字幕

各位同学大家好

今天的课程将介绍

影响物体颜色的外界条件

今天的主要内容将介绍

影响物体颜色的光照环境等多种因素

和如何有效的利用这些因素

对物体颜色进行计算

在我们之前的课程中

已经介绍了漫反射和镜面反射

这些都是经典光照模型的一部分

在经典光照模型中

物体的总光量是由环境光 漫反射和镜面反射

三部分叠加而来的

我们前面的示例代码中

没有考虑环境光

那会带来什么问题呢

看一下运行效果

当视角转到光源的垂直方向时

可以看到

物体的背光表面是纯黑色的

没有照明也就看不到任何颜色

而真实的环境会在各个方向存在照明

即使在光源的阴影里也能看到淡淡的色彩

为了实现类似的效果

就可以在光源模型中增加环境光

这个环境光可以简化为

是没有方向 均匀的照明

有了环境光就不会出现纯黑的表面

视觉效果会更好一些

另外

实际的光源还可以是有颜色的

当用带有颜色的光照射物体的时候

不光物体的表面亮度会变化

颜色也会有相应的变化

例如

使用红色的光源照射白色物体的时候

物体的表面也会呈现出红色

这个颜色的变化可以由各种光强分量来改变

环境光

漫反射和镜面反射都可以具有不同的颜色

之前的示例代码中都简单的认为这些光是白光

这是前面的点光源顶点着色器代码

在统一变量中

增加了光源的颜色变量

LightColor

将漫反射颜色

DiffuseLight发送到片段着色器

而不是仅仅发送亮度

diffuseLight是这个程序漫反射增加的部分

它用光源的颜色与漫反射光强相乘

增加了光源颜色的属性

这是上节课介绍的点光源片段着色器代码

这里计算 diffuseLight 漫反射光的时候

除了增加了光源的颜色

还加上了环境光的分量

这个分量通过ambient统一变量传入

在计算高光的时候

也利用了光源的颜色属性

之前的代码使用vec4(1.0) 替换 lightColor变量

相当于光源是纯白色

在计算光源强度的时候

另外一个需要考虑的因素就是衰减

对象离光源越远

落在对象上的光的强度就越弱

为了真实地模拟光源

需要适当地计算每个光源的衰减情况

定向光源通常不使用衰减因数

因为光源比较遥远

可以认为在整个场景中强度没有变化

同学们可能还记得在物理课上学过光的能量

同光源距离的平方成反比

但在实际环境中由于存在环境反射等多种作用

通常在着色器代码中使用的公式是屏幕上展示的这个

其中Ac是常量衰减因子

AI是线性衰减因子

Aq是二次衰减因子

而dist是点与光源之间的距离

在程序中 这三个衰减因子是常数

通过统一变量传递给着色器

在计算片段最终颜色的时候

还可以考虑物体的材料属性

我们之前用到的材料颜色

可以认为是一种材料属性

如果考虑到材料表面会有不同的镜面反射率

通过类似的方法可以把反射率数据作为一种特殊的纹理传入着色器

对每个片段计算与反射率相关的反射数据

这样会获得更加真实的显示效果

这种情况下

片段的颜色就由屏幕上这个公式来计算

镜面反射的部分增加了新的系数

经典光照模型在大部分情况下可以高效的完成令人满意的图形渲染效果

但由于它的算法比较简单

还是具有很多的局限性

比如没有考虑物体的影子

当场景中存在多个物体时

部分物体的光照可能会被遮挡

另外环境光的建模也过于简单

比如红色物体在光源的照射下会反射红光

那么它旁边的物体也会呈现一些红色

这在经典模型中也没有考虑

第三点是在经典模型下

物体都过于平滑

显得不够真实

还有

就是没有对自发光物体进行建模

对于自发光物体仅仅提高亮度还不够

还必须增加一些光晕效果

才更加符合实际情况

好 今天的课程就到这里

谢谢大家

移动图形概论课程列表:

第一章 课程简介

-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 中的实用工具介绍

-综合测试

使用着色器渲染颜色笔记与讨论

也许你还感兴趣的课程:

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