现代的游戏引擎或者渲染引擎在渲染光照时为了渲染的效率往往会使用一些二维纹理贴图来储存一些计算光照以及着色的影像数据,这就是基于图像的光照(Image-Based Lighting, IBL)。当然在部分教程中可能会将IBL狭义地限定为使用球面贴图(Spherical Map)或者立方体贴图(Cube Map)的环境贴图(Environment Map)。事实上,基于图像光照包含了处理光照以及着色的影像数据的一系列算法或方式,而本文则将从一个相对宏观的层面来介绍IBL。

法线贴图(Normal Map)

法线贴图是计算机图形学中处理光照增添物体表面细节的一种常用方式,而事实上,法线贴图也可以被视为广义上的基于图像光照的一种。无论是传统的布林冯模型(Blinn-Phong)还是基于物理的渲染(Physically-Based Rendering, PBR)也好,当物体表面的属性(材质)确定时,影响光照效果的最主要的因素就是物体表面的法向量,而法线贴图则是使用了一张二维的图像来记录物体表面的法向量,使用图片的RGB通道记录法向量的值(这也是为什么法线贴图看起来通常是蓝紫色的),在计算光照时在法线贴图上进行采样从而计算光照,而非使用模型的三角形面或顶点的真实法向量值。这样做的好处是可以在相对简单的物体表面呈现出复杂的细节,而不用真正地使用细节更加复杂的模型。

高度贴图(Height Map):凹凸贴图(Bump Map)、视差贴图(Parallax Map)、位移贴图(Displacement Map)

高度贴图的作用是记录一个公寓或低于三角形面的高度,因此只需要使用一个值来记录该高度数据,所以高度贴图往往呈现出灰度图的效果。目前来说,高度贴图一般有三种实现的手段即凹凸贴图(Bump Map)、视差贴图(Parallax Map)和位移贴图(Displacement Map)。

凹凸贴图是一种相对早期的技术,它记录高度值以此来生成物体表面的法向量,目前来说,往往会采用前文提及的法线贴图来显式地处理记录法向量的问题。

视差遮挡贴图使用高度贴图中的信息来人工调整渲染平面时使用的纹理坐标,从而使曲面看起来包含随着摄影机移动而半正确移动的曲面细节。

位移贴图将会实际的修改模型来进行曲面细分,顶点将会按照位移贴图中记录的法向量进行移动,从而使得模型拥有更加丰富的细节,这也是效果最好的的一种方式,但这就意味着更高的开销,这也是计算机图形学中不可避免的Trade-Off(即取舍、权衡、协调)的问题。

环境贴图(Environment Map)

环境贴图看起来像是从场景中对象的角度拍摄的环境全景照片,水平方向覆盖360度,垂直方向覆盖180度或360度。环境贴图的作用类似于对象周围一般照明环境的描述,通常用于以低成本渲染反射或者处理间接光照,最常见的两种格式是球形贴图(Spherical Map)和立方体贴图(Cubic Map)。

球面贴图(Spherical Map)看起来像是通过鱼眼镜头拍摄的照片,它被视为被映射到一个半径无限的球体内部,以被渲染对象为中心。球坐标是用球坐标来解决的。在赤道附近,有很多水平和垂直分辨率。但是,当垂直(方位角)角接近垂直时,纹理沿水平(天顶)轴的分辨率降低到单个texel。立方体地图是为了避免这个问题而设计的。

立方体贴图(Cubic Map)看起来像是由六个主要方向(上、下、左、右、前和后)拍摄的照片拼凑而成的合成照片。在渲染过程中,立方体贴图被视为以正在渲染的对象为中心,在无限远处映射到长方体的六个内表面。要读取与对象表面上的点P相对应的环境贴图纹理,我们将光线从摄影机移到点P,并围绕P处的曲面法线反射它。反射光线将一直跟踪,直到它与环境贴图的球体或立方体相交。对点P着色时,将使用此交点处的纹素值。

在实际的应用当中,UE4引擎使用了反射捕获(Reflection Capture)技术来处理反射,这事实上也是一种环境贴图贴图技术,即通过在场景中放置SphereReflectionCapture这样的Actor来记录反射。此外,UE4中还使用了体积光照贴图(Volumetric Lightmap)来记录环境中的间接光照,该技术在空间中均匀的分布球体来记录反射的间接光。

反射捕获

体积光照贴图

小结

除了以上提及的集中IBL外还有许多其他类型的光照贴图,如UE4引擎中就存在大量预先生成的光照贴图,使用IBL的目的就是为了预先的处理尽可能多的光照信息从而在游戏事实渲染的过程中提高效率。

UE4自动生成的光照贴图

基于图像的光照(Image-Based Lighting, IBL)概述相关推荐

  1. GraphicsLab Project之基于物理的着色系统(Physical based shading) - 基于图像的光照(Image Based Lighting)(Diffuse篇)

    作者:i_dovelemon 日期:2018-01-21 来源:CSDN 主题:PBR, Equrectangular Map, Cube Map, Irradiance Map, HDR Image ...

  2. 【Shader】基于图像的光照(Image Based Lighting,IBL)

    一.立方体贴图(CubeMap) CubeMap是什么? CubeMap是一个由六个独立的正方形纹理组成的集合,它将多个纹理组合起来映射到一个单一纹理,通常被用来作为具有反射属性物体的反射源. Cub ...

  3. GPU Gems1 - 19 基于图像的光照(Image-Based Lighting)

    这篇文章打破了当时立方体贴图环境(Cube-Map Environment)用法的桎梏,深入研究了更多可能的逼真光照效果.文章主要研究了基于图像的光照(Image-Based Lighting,IBL ...

  4. PBR理论基础3:基于图像的光照(上)

    一.基于图像的光照(Image based lighting, IBL) 只要了解了下面这些,就很容易理解基于图像的光照了: 直接光与间接光的区别(UnityShader9:光照基础回顾) PBR理论 ...

  5. PBR之基于图像的光照IBL (Diffuse)

    基于图像的光照(Image Based Lighting) 在开始之前,我们先来了解下什么是基于图像的光照(IBL).一个物体,不会单独的存在一个空空的环境里面,它的周围一定有其他的物体.当光源照射到 ...

  6. CSharpGL(54)用基于图像的光照(IBL)来计算PBR的Specular部分

    CSharpGL(54)用基于图像的光照(IBL)来计算PBR的Specular部分 接下来本系列将通过翻译(https://learnopengl.com)这个网站上关于PBR的内容来学习PBR(P ...

  7. PBR理论基础3.1:基于图像的光照(下)

    接上文:PBR理论基础3:基于图像的光照(上) 四.蒙特卡洛积分 蒙特卡洛积分在前篇计算漫反射项时就已经应用过了 对于定积分    ,如果无法简单求得原函数,一个尝试去求得其近似解的方法就是蒙特卡洛积 ...

  8. 基于图像的目标检测与定位方法概述

    目录 1. 目标检测与定位概念 2. 目标检测与定位方法 2.1 传统目标检测流程 2.2 two-stage检测算法 2.2.1 R-CNN 2.2.2 two-stage其他算法 2.2.2.1 ...

  9. unity-shader-基于图像的光照IBL

    title: unity-shader-基于图像的光照IBL categories: Unity3d-Shader tags: [unity, shader, 间接光, IBL, pbr] date: ...

最新文章

  1. python 字典操作 内存占用,python - 如何强行释放字典使用的内存? - SO中文参考 - www.soinside.com...
  2. @value 数组_SpringBoot @Value 读取配置,太强大了!
  3. 马哥2013年运维视频笔记 day02 Linux系统常识
  4. 直播预告 | AAAI 2022论文解读:融入知识图谱的分子对比学习
  5. boost::gil::scoped_channel_value用法的测试程序
  6. laradoc mysql acccess_安装之后,启动mysql容器失败
  7. WIX、Squarespace、WordPress 三者的优劣分别是什么?
  8. C语言试题二十七之请编写程序,实现矩阵(3行3列)的转置(即行列互换)。
  9. bat手动备份数据库,当前时间命名备份文件名
  10. 第四代双模5G旗舰:vivo X30系列为啥「超有梗」?
  11. Linux如何搭建Java部署环境
  12. 【路径规划】基于matlab GUI A_star算法最短路径规划【含Matlab源码 633期】
  13. html中有序列表的css样式,CSS 列表样式(ul)
  14. 同样是写博客,为什么我男朋友的粉丝那么多?!
  15. OC Foundation框架 数组
  16. 目标检测跟踪算法综述
  17. idea项目误删恢复
  18. php 生成gif验证码,PHP生成Gif图片验证码
  19. MSSQL Server查询优化方法
  20. 2021-07-19 暑假集训Day1

热门文章

  1. 【基础】代码操作Word时,自动更新目录(一)
  2. 吕公奇文——《破窑赋》
  3. 【git】You have not concluded your merge (MERGE_HEAD exists).
  4. 618电商平台鏖战,天猫618才是绝对主场
  5. java xtend_Java加上Xtend,满足你对C#语法的所有想象
  6. 手机当作电脑无线摄像头
  7. html做旋转的五角星,Flash AS3代码制作旋转彩色五角星动画
  8. Datadog数据包分析
  9. Lpc1768 常见错误及解决方法
  10. 【弹子兵法】四国军棋棋盘、棋子与记谱【基础篇】