详解Cubemap、IBL与球谐光照

如题所述

第1个回答  2024-08-14
Cubemap,又称立方体贴图,由六个面的2D贴图组合而成,用于模拟天空盒或在IBL中计算光照。在使用上,Cubemap的采样不再是uv坐标,而是使用一个三维向量,根据采样向量选择对应轴向的2D贴图进行采样。

在Cubemap的采样过程中,我们首先构建一个长宽都为2的正方体放在坐标原点,并将Cubemap贴上去。在立方体的某一面上移动时,主轴的值固定,剩余两个坐标在[-1, 1]间变动。将每个像素对应的采样向量转化为颜色,形成一个从左下角到右上角的UV坐标分布。

在IBL中,Cubemap上的每个像素视为一个方向光源,像素颜色作为入射的Radiance值,参与光照计算。漫反射计算时,根据公式与表面基础反射率Albedo和辐射照度Irradiance有关。Irradiance Map的每个像素点对应法线,像素颜色表示表面Irradiance。

Irradiance Map的计算有两种方法:黎曼和与蒙特卡洛积分。黎曼和方法将积分转化为离散的和,而蒙特卡洛积分通过随机采样逼近积分值。为了均匀分布随机采样点,可以使用逆变换采样方法。在Unity中,生成法线方向单位半球上的随机采样点并计算Irradiance Map。

为了简化Irradiance Map的存储和计算,可以使用球谐函数替代。球谐函数能将Irradiance Map表示的数据拟合为一系列系数,从而在使用时计算Irradiance的近似值。实践证明,使用L=2阶的球谐函数即可达到良好的拟合效果。

颜色空间的选择对于IBL至关重要。输入的Skybox Cubemap可以是线性空间或Gamma空间,但整个工作流程最好在线性空间下进行,以避免混淆。使用Cubemap时,确保颜色空间的一致性是关键。

详解Cubemap、IBL与球谐光照
Cubemap,又称立方体贴图,由六个面的2D贴图组合而成,用于模拟天空盒或在IBL中计算光照。在使用上,Cubemap的采样不再是uv坐标,而是使用一个三维向量,根据采样向量选择对应轴向的2D贴图进行采样。在Cubemap的采样过程中,我们首先构建一个长宽都为2的正方体放在坐标原点,并将Cubemap贴上去。在立方体的...

由cubemap生成lightprobe
本文将探讨如何通过cubemap生成lightprobe,以简化光照计算的算法过程。传统方法中,首先从cubemap获取irradiance map,通过半球积分对每个球面采样点进行计算,这一步需要对N个点进行N\/2次积分,然后进一步将irradiance map通过球谐投影转换为sh,进行9个球面积分。这样总体复杂度为O(N^2)。然而,存在一种...

相似回答
大家正在搜