当前课程知识点:游戏程序设计 > 第八章 《材质着色与光照》 > 8.7 全局光照 > 8.7 全局光照
下面讲一下全局光照
全局光照
我们在很多游戏里面都会提到
其实就是光在跟物质不只是做一次浇灌
会做非常多次的交互
也会对我们场景的真实感
产生很大的影响
首先看下生活中
会有哪些全局光照的现象
主要有四个
第一个是间接光照
间接光照主要他产生的效果就是
光着这场景面前多次反弹
然后它每一次反弹主要的贡献是
一个漫反射的贡献为主
它看到的现象就是
我们可以看到像这个黄色的墙
假如在这个盒子顶部打一个灯的话
它黄色的墙会慢慢的把这一部分
被照明的物体慢慢染成了黄色
然后蓝色墙会把这边养成的蓝色
在一种小型场景会看到
就会快看到一个颜色蔓延的一个现象
这款色黄色叶子旁边也会有些偏黄的色
这个主要就是间接光照
然后它有那个效果
就是这光源是朝着面光源在外面
面光源是让它朝着这一边发出的光
假如只有局部光照模型的话
在这个面光源背后的部分的像素
是完全黑的一点光都没有
当时它通过光路的多次反弹
通过间接光照它可以照明到
这个墙后面的效果
然后另一个现象就是环境光遮蔽
我们常常游戏选项里面它就叫AO
AO主要是来模拟什么现象呢
就假设及主要模拟一个
大面全局的大面积的光源
模拟天空整个天空对对整个场景的光照
假设整个天空的那个能量都是均匀的话
它对这个场景光
很均匀的光照就会产生一些明亮的效果
其实也是模拟这个天宫这半球面的一个
光源对场景产生了一些阴影效果
它主要贡献也是漫反射去贡献
另外一个比较生活中能观察到的一个
就是光照方向上
这个反射
跟刚才高光反射不一样
刚才高光反射指的都是分析
则是光源要在这里的反射
主要是指在实际场景渲染中
我们可以看到一个一面镜子会反射到场景
另外一边一模一样的像
比如像那个这个桌子比较光滑的话
我们看到这个桌子可以这个这个光滑的桌面
会反射到它这个窗户的一些
这个框架的一些阴影
它这个反射现象是无处不在的
每一个表面
每一个表面都会存在
假设不是一个桌子
是一面镜子的话
就可以很清晰地反射到游戏里面
另外这个方向上的这个窗户
室外的场景
这个
然后另一部分就焦散现象
焦散现象就可以看到主要是模拟这个光路
穿过这个半透明的像这个钻石之后
打在那个地面上
投影会有一些更亮了一些光斑
还有一个比较暗的部分
其实就是因为折射值改变了光路的方向
要那些光更加聚焦像放大镜
或者是像那个有游泳池里面
会可以看到焦散现象十分明显
在游泳池的一个池底下面
我们游戏有时候也会对这现象模拟
然后有什么全局光照的方法
去模拟前面说的一些现象
主要是有三个方法
一个是
路径追踪
去跟踪每一条光路的射线
然后光子映射其实
Photon Mapping也是一个光路跟踪的方法
然后辐射度
辐射度只能模拟漫反射的现象
模拟不了前面说了一个
高光反射的一些现象
然后
然后存储在存储的一些分类
在后面在讲
然后前面两个方法
也是我们电影会用到的一个
一个离线渲染的方法吧
也是就我们可以说是接近光速的一些方法
它也可以产生一些无偏差的一些图像
假设路径跟踪
路径跟踪其实就是最暴力的
去真实的去通过算例去计算游戏场景里面
每条光路的一个反弹一个结果
我们一般起始点会从
相机出发
这里有个相机
据说射线到场景里面
然后打到场景之后
通过刚才说的那个BRDF概率函数去
计算它每一次反弹反弹出射的方向
然后再跟场景另外一个方向进行反弹
然后它在里面不断反弹
但假如这个射线没有达到光源的话
这射线贡献完全是黑的
然后我们一般会在最后一次反弹的时候
强行把它跟光源连接起来
强行连接起来的时候也要
连接关的时候也要看这个有没有物体挡到
有物体挡到的话就就变成是有阴影
没有挡到的话就直接就打到光源上面
就会有计算光源的贡献
跟它前面的一些贡献
去连成乘起来
但是
通过这种技术渲染出来的图像
就会可以看到山周边的图像
是十分多噪点的
你需要去发射每个像素会发射更多的射线
你才能接近一个完美
没有噪点来个效果
所以这个是十分耗时十分
十分耗时的一个技术吧
但我们因为现在在推RTS
就是那些光线追踪的显卡
我们也开始在渲染里面也会引入一部分
这些技术
当我们可能最多只能做到
每个像素只有一个sample
就只能是这种图像
但是我们会通过别的一些
不是无偏差的
通过一些比较模糊
像附近像素模糊的手法
是对图像进行降噪
然后
这个是一个路径跟踪的一个demo
有兴趣的话可以去shadertory自己看
然后这个是我们讲过photo mapping光子映射
它其实跟那个刚前面说的路径跟踪
其实也是类似的
但是不一样的是
它是从这个场景中的光源去发射
发射光子光子打到场景上面的时候
它跟路径跟踪不一样
就是跟路径跟踪
计算整个画面结果是不会存储任何东西的
但这个光子映射着
这就会在每一次反弹的时候
把这个能量储存起来
然后它就一直往场景发射光子
然后让这个场景的一个结构
把每一次反弹的结果都存起来
最后
这个相机在收集阶段
去观察这个场景的时候
它就会把这个前面存起来了
这些光子之间进行插值
当最新的研究里面
光子映射跟前置路线跟踪的算法
可以本质上可以做到一致
就只要你那个插值比较注意就好
要是也可以
这有个演示
这就光子映射每次发射的时候
一个演示
它从一个光源里面
发射的光子是跟场景去交互
然后再把它的一个能量才去存起来
他就越来越接近一个完美的图像
这跟前面两种都是传统离线渲染一些方法
然后后面讲一下全局光照实时的方案
因为实时都渲染不相离现象
可以有完美的一个游戏
场景的一些结构
这门一般都是用一些比较取巧的方法
就可能也有没有那么多算力
去做一个光纤的跟踪计算
但后面会讲到我们新的一些
由于新的显卡或者是
通过显卡算力越来越强的时候
我们也会开始引入一些光线的追踪办法
我先主要是分为两大阵营
一个是
屏幕空间的方法
屏幕空间的方法就是
我整个光子整个里面
光反弹的都是反弹的计算
都是通过一个屏幕空间能看到的
数据来进行计算的
另外一个世界
是世界的
整个世界结构
在GP里面能够拿到整个场景的一些
几何信息去进行计算的
它的主要信息不一定是原来拿来渲染的
一个三角面也有可能是一个体术Voxel
然后前面先讲那个
前面先讲那个屏幕空间方法
为什么会产生屏幕空间方法了
因为在我们传统渲染的时候
它本来我们就能拿到一个
屏幕的一个深度的图像
因为我前面像上一节课
那个渲染的时候也会讲到
我们去通过一个深度 Buffer
去对渲染进行那个排序
进行那个渲染像素渲染的效率优化的
这个深度 Buffer是天然存在的
我们可以拿它来有一部分的凹凸的
几何凹凸的信息来模拟这个
几何属性
我们可以在上面看到一个高度场
然后在这高度场里面发射射线
进行就是一个光路最终的计算
但它是一个很有限的几何信息
不是完全只有物体的几何三角面
因为像垂直方向的几何信息都丢失了
也没有背部的信息
所以做射线求焦的时候
它射线有可能穿越这个深度 Buffer一个表面
穿越物体表面
尽管它有误差
但是它十分的快速
深度灌充这个上节课可能要讲过
我们渲染的时候会通过深度
Buffer来个排序
去优化那个像素渲染效率
然后它也会存储出一张这个场景的深度图
这个深度图形就是从摄像机出发
这个看到这个像素最靠近相机的一个物体表面
一个深度的值
然后最早利用最早发明利用
屏幕空间计算环境遮蔽的方法是Cryengine
这就是Cryengine做出的一个,叫做screen space ambient occlusion
就是SSAO效果
然后后面后面这已经开始出现了
现在一些游戏里面有一些术语
就是HBAO
HBAO其实也是利用屏幕空间
利用屏幕空间的深度去模拟一个
AO的现象
但这个主要是Nvidia做出来的
它其实都也跟前面这个也是利用深度 photo
只是后面的计算更加改进而已
然后还有一个我们常常说的游戏里面
应用的现象是屏幕空间反射
就通过屏幕空间的深度
通过深度图去计算反射的像
当我们去上那个物体跟这个深度碰到
然后当反射和折射现再去
反射射线求焦可以在
通过这反射的那个位置
去拿取他上一帧那个渲染的结果
我就可以做出一个屏幕空间反射的效果
然后前面这种深度之间微March
一个是固定不常去做微March
就每次前进一步
然后再看这个前进的步数
是不是在这个深度图的底下
假如底下就已经碰到这个深度
然后再改进一下的
比2X搜索
然后比2X搜索更清晰的话
这个可以课后去看这个
就在HI-Z Tracing这个主要是寒霜引擎
寒霜引擎作品主要就是那个战地系列
还有那个星战系列
然后为了让平衡的反射也满足了
前面说的那个pbr渲染一个高光分布
它也会用到PBR brdf
也会有些是随机的采样
stochastic Monte Carlo sampling采样方法
最后还会进行降噪
最后的结果就这样
结果就是可以看到
在一个光滑的镜面的地面上面
它还在跟粗糙度响应
越粗糙挂那个像反射的相越模糊
而且越清晰
然后讲一个世界空间方法
也是我最近做的
前面那些没有时间讲了
然后实时光线追踪
主要是在现在一些显卡上面算力比较强
所以说现在才提出来的
主要是计算光线跟几何体求焦
但一般不会计算非常多的
不像前面路径追踪会计算
它们都是由这个方向法
模拟其中某些现象
比如前面说的间接光照
AO去单独去拿来计算
然后这个就是我最近做的这些效果
右边可以看到这个
主要就是一些AO的效果
它可以支持动态的几何体
天气变化
所有都是动态
不是预先烘焙
然后当这个AO
遮蔽的距离变得更加大的时候
它甚至可以完全的把整个天光都挡住
因为这才是一个正确的一个AO效果 叫sky AO
当它的遮蔽距离是可以做到无穷远的时候
你只能从窗户里面透出去
天光进室内
然后后面这个就是
这个实时光线它支持一个纹理的面光源
假如我给一个面光源
附上一张纹理的话
他可以照明这个场景
它除了照明场景之外
它甚至还能产生阴影
面光源还可以产生三个柱子
后面会产生一些阴影
而且富有纹理
它这里黄色可以照到上面
这个女神像是黄色红色会照到地下是红色
然后实时光线追踪
前面就是它能支持的特性
就间接光照
包括它面光源
还有整个环境
光遮蔽
现在可以看下他的具体的效果
我自己用的是一个虚幻2014早期的引擎demo
他里面只有那个原来引擎一个烘培的效果
感兴趣的话可以上优酷youtube搜一下原视频
然后这也是开了是实时光照的技术
这是光纤
最终我们要看到这个场景
他首先打关了之后刚才室外的一点点太阳光源
它室内是没有打光的
你们看到光都是通过多次反弹进的室内
这也是
2014demo
看到他
他在一个那个岩浆流出来的时候
他其实是一个模型模型的一个面光源
但是到集合形体
而且一直在流动变化
就在原来老的这种游戏在是十分难以去模拟
不能拿它去照明
周围的场景
但是在新的技术里面
就像这种流动的发光体可以动态的照明
整个场景
我看到对场景的一些影响
不过可能你要找原视频来对比
来看看 不然明显看不出
有兴趣可以看PPT来看
然后这个还可以做到
覆盖所有中高端的GPU主机
然后对于低端的GPU或者moba
我还做了一个动态实时烘焙的情况
一个可以照顾到甚至手机的话
有差不多效果
然后这是这些参考的文献
感兴趣都想更多了解是渲染的话
可以这个文献都是收集比较经典的一些
一些资料
今天主要就讲到这
-1. 1什么是游戏(上)
--选择题
-1.2 什么是游戏(下)
--选择题
-1.3 游戏是如何开发出来的
-1.4 游戏引擎(上)
-1.5 游戏引擎(下)
--单选题
-1.6 如何成为一个游戏开发者
--多选题
-2.1 什么是游戏服务器
--单选题
-2.2 游戏服务器的和分类发展
--单选题
-2.3 核心技术和实现难点
--单选题
-2.4 设计原理与方法论
--单选题
-3.1 三维坐标系统
--多选题
-3.2 向量与运算
--单选题
-3.3 矩阵与线性变换
--双选题
-3.4 四元数
--3.4 四元数
--多选题
-4.1 游戏循环概述(上)
--多选题
-4.2 游戏循环概述(下)
--单选题
-4.3 《无尽之路》的实现
--单选题
-4.4 支撑游戏的功能
--选择题
-4.5 支撑游戏的机制与系统
--多选题
-5.1 基本介绍
--5.1 基本介绍
--单选题
-5.2 随机数生成器
--单选题
-5.3 随机数分布与应用
--单选题
-6.1 什么是游戏玩法开发
--单选题
-6.2 建立愿景 Vision
--单选题
-6.3 划定边界 Scope
-6.4 迭代 Iteration
--单选题
-6.5 迭代 Iteration+抛光Polish
--单选题
-7.1实时图形渲染管道 宏观渲染系统
--单选题
-7.2实时图形渲染管道 应用阶段
--单选题
-7.3实时图形渲染管道 几何阶段
--单选题
-7.4实时图形渲染管道 光栅化阶段
--单选题
-7.5实时图形渲染管道 总结 参考
-8.1 物理回顾1
--单选题
-8.2 物理回顾2
--单选题
-8.3 材质 1
--8.3 材质 1
-8.4 材质 2
--8.4 材质 2
-8.5 材质3
--8.5 材质3
-8.6局部光照
--8.6局部光照
--单选题
-8.7 全局光照
--8.7 全局光照
--单选题
-9.1 动画介绍
--9.1 动画介绍
--多选题
-9.2 游戏动画介绍
-9.3 动画技术类型
--多选题
-9.4 骨骼蒙皮动画
--多选题
-9.5 动画流水线
--多选题
-9.6 动画前沿趋势
--多选题
-10.1 .基本概念
--多选题
-10.2 设计目标
--多选题
-10.3 传输数据分析
--多选题
-10.4 常用同步方案 1
-10.4 常用同步方案 2
-10.4 常用同步方案 3
-10.4 常用同步方案 4
--多选题
-10.5 方案对比
--多选题
-11.1 基本图元
--单选题
-11.2 图元距离(上)
--单选题
-11.2 图元距离(下)
--单选题
-11.3 图元相交测试+ 其他几何方法
--单选题
-12.1 著名物理引擎介绍
--单选题
-12.2 物理引擎原理(上)
--单选题
-12.3 物理引擎原理(下)
--单选题
-12.4 游戏中的物理体
--单选题
-12.5 物理引擎使用入门
--单选题
-13.1开发语言
--13.1开发语言
--单选题
-13.2 开发环境
--单选题
-13.3 腾讯开发组件介绍
--单选题
-13.4 网络通信+业务框架介绍
--多选题
-14.1 进程间通信(上)
-14.2 进程间通信(下)
-14.3 通信格式
-14.4 并发模型
-14.5 超时处理
-14.6 大系统小做(上)
--多选题
-14.7 大系统小做(下)
-14.8 架构层面的技术支持(上)
--单选题
-14.9 架构层面的技术支持(下)
-14.10 分布系统的关键能力
--多选题
-15.1 游戏人工智能综述
-15.2 人工智能在游戏中主要方法 上
--多选题
-15.3人工智能在游戏中主要方法 (下)
-15.4 人工智能在游戏制作中的应用领域1
--多选题
-15.5 人工智能在游戏制作中的应用领域2
-15.6 人工智能在游戏制作中的应用领域3
--多选题
-15.7 人工智能在游戏运营中的应用实践(上)
-15.8 人工智能在游戏运营中的应用实践(下)
--多选题
-16.1 游戏支撑系统(1)
--单选题
-16.2 游戏支撑系统(2)
--单选题
-16.3 游戏支撑系统(3)
--单选题
-16.4 游戏支撑系统(4)
--单选题
-16.5 游戏支撑系统(5)
-17.1 游戏逻辑服务器(上)
--单选题
-17.1 游戏逻辑服务器(下)
-17.2 外挂与反外挂(上)
-17.2 外挂与反外挂(下)
--多选题
-18.1运行环境
--18.1运行环境
--多选题
-18.2物理部署
--18.2物理部署
--多选题
-18.3系统的可运维性
--多选题
-18.4运维案列分析
--多选题