OpenGL3.3_C++_Windows(36)

PBR_IBL镜面部分

  • 镜面部分并不能像漫反射部分一样将常量提取出来,因为它受到wi和w0的影响,就比如一个x的等式,不能把x部分提取出来一样,他是随着等式变化的
  • 但是如果放在等式中,计算所有的可能性,计算量会极大,我们把镜面部分再次拆分为两个部分
  • 分割求和近似法(split sum approximation):预滤波环境贴图(辐照度) + BRDF积分贴图
预滤波环境贴图(镜面部分):
  • 这次会考虑粗糙度,因为对于不同粗糙度的表明会使用不同的mip图采样
  • 粗糙度越高,采样越分散,贴图越模糊,将保存到不同的mipmap级别的贴图中,
  • 为了确保为其 mip 级别分配足够的内存,一个简单方法是调用 glGenerateMipmap(GL_TEXTURE_CUBE_MAP)。
  • GL_LINEAR_MIPMAP_LINEAR 启用三线性过滤
  • mip 级别每增加一级,尺寸缩小为一半。
流程
  • 如果使用均匀的半球采样,计算镜面部分的辐照度,效果会很差,镜面反射依赖于表面的粗糙度,形成镜面波瓣,如果以类似方式选取采样向量将是有意义的,这个过程称为重要性采样。
  • 因为镜面的辐照度图应该和视角有关,对于采样方向和散射强度,通过DNF--BRDF中的法线分布函数生成,公式受法线,h(半程),a粗糙度影响
  • 如果要预计算,我们并不知道视角方向,如果我们假设视角方向==输出采样方向w0,这个部分中就不用考虑视角方向,从而预计算,虽然效果不是很好
重要性采样:
  • 具有更快收敛速度的采样
  • 蒙特卡洛积分(纯随机):

  • 蒙特卡洛积分:离散的解决问题,不必考虑所有

    • 在 a 到 b 上采样 N 个随机样本的子集,求和并求平均数,pdf 代表概率密度函数 

    • 随着样本数量的不断增加,我们最终将收敛到积分的精确

    • 估算是有偏的,集中于特定的值或方向

  • 低差异序列(均匀):

  • 该序列生成的仍然是随机样本,但样本分布更均匀:具有更快的收敛速度,它们会以更快的速度收敛到精确解,这使得它对于性能繁重的应用很有用。

  •  Hammersley 序列:该序列是把十进制数字的二进制表示镜像翻转到小数点右边而得

  • GGX几何函数 重要性采样:

  • 我们需要一些方法定向和偏移采样向量,以使其朝向特定粗糙度的镜面波瓣方向:

  • 有别于均匀或纯随机地,采样会根据粗糙度,偏向微表面的半向量的宏观反射方向,将 GGX NDF应用到采样中。并和随机(低差异)序列值配合使用

预过滤卷积的伪像:接缝和亮点:
  • 较低的 mip 级别具有更低的分辨率,并且预过滤贴图代表了与更大的采样波瓣卷积,因此缺乏立方体的面和面之间的滤波的问题就更明显:

  • 可以启用 GL_TEXTURE_CUBE_MAP_SEAMLESS,以为我们提供在立方体贴图的面之间进行正确过滤的选项:

  • 对镜面反射进行卷积需要大量采样,才能正确反映 HDR 环境反射的混乱变化。

  • 我们可以在预过滤卷积时,不直接采样环境贴图,而是基于积分的 PDF 和粗糙度采样环境贴图的 mipmap 

 BRDF积分贴图:
  • 假设每个方向的入射辐射度L都是白色的,在给定粗糙度、光线 ωi 法线 nn 夹角 n⋅ωi 的情况下,可以预计算结果,
  • 使用RGB通道的纹理,R为菲涅耳响应的系数,G为偏差值,
    n⋅ωi为横坐标,粗糙度作为纵坐标
  • 需要生成一张 512 × 512 分辨率的 2D 纹理
  • 对于brdf部分,我们可以再次移项变换和近似,将得到这个公式
合成最终颜色:
  • ……
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值