IBL的完整过程

本文详细介绍了IBL(环境光照)的实现过程,包括漫反射IBL的预计算,镜面IBL的预卷积方法,如分裂和近似法,以及如何结合粗糙度和BRDF积分图进行处理。最后阐述了如何通过反射向量、法线和粗糙度计算完整的IBL结果,将镜面反射和漫反射相加得到最终的光照效果。
Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

将CubeMap的每个像素当成一个光源。
在这里插入图片描述

漫反射IBL

在这里插入图片描述

预计算出一个新的cubemap,存储了用卷积计算的每个采样方向ωo的漫反射积分结果。
在这里插入图片描述

镜面的IBL

在这里插入图片描述
镜面反射部分依赖于入射光方向和视线入射方向,尝试实时计算有入射光和所有入射视线的积分是几乎不可能的。
使用预卷积镜面反射部分的方法:分裂和近似法。
在这里插入图片描述在这里插入图片描述
加入粗糙度,根据不同的粗糙度等级,在预过滤环境图的mipmap等级存储更模糊的结果。
需要用到两个输入:法线和视线向量。卷积环境图并不知道视线防线,所以采用了一种妥协:V=R=N
在这里插入图片描述
假设所有方向的入射辐射率是全白的,那就可以用给定的粗糙度和一个法线n和光源方向ωi之间的角度或n⋅ωi来预计算BRDF的值。
Epic Games存储了用变化的粗糙度来预计算每一个法线和光源方向组合的BRDF的值,该粗糙度存储于2D采样纹理(LUT)中,它被称为BRDF积分图(BRDF integration map)。
在这里插入图片描述
上图水平表示BRDF的输入n⋅ωi,竖向表示输入的粗糙度。
2D采样纹理输出一个缩放(红色)和一个偏移值(绿色)给表面的菲涅尔方程式(Fresnel response),以便提供第二部分的镜面积分。

完整的IBL

  1. reflect(-V, N)求出反射向量R,再结合粗糙度roughness采样prefilterMap,得出镜面反射颜色prefilteredColor。
  2. 用V、N的夹角和roughness采样BRDF查找纹理,得出缩放和偏移合成反射系数。
  3. 反射系数乘以prefilterColor,得到镜面部分的结果。
  4. 用N采样漫反射IBL的辐照度图。
  5. 根据反射系数和漫反射系数,将将镜面反射和漫反射相加得到最终的IBL结果。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值