渲染算法学习(五)-- Real-Time Global Illumination

本文深入探讨了多种全局光照技术,包括Reflective Shadow Maps (RSM)、Light Propagation Volumes (LPV) 和 Screen Space Ambient Occlusion (SSAO)等。通过对每种技术原理和实现细节的讲解,为读者提供了全面的全局光照解决方案。

Global Illumination (GI)

  • 全局光照 = 直接光照 + 间接光照
    • 直接光照用上几节使用的方法即可得到
    • 间接光照,使用次级光源(着色点充当光源)
  • 求解实时渲染中的GI问题,实际上是解决一次bounce的间接光照
    • 要求
      • 简单
      • 快速

Reflective Shadow Maps (RSM)

  • 思想
    • 使用间接光照着色着色点需要哪些条件
      • 确定哪些区域(面片)被直接光照照亮
        • 使用shadow map确定次级光源区域
          • 因为只要没有被遮挡,着色点就会接受全局光照,可计算
        • 阴影贴图上的每个像素都是一个面片
          • 因为阴影贴图是场景中当前视图离散深度值,每个像素能表示一定区域内场景中所有物体的初略深度值(因为是离散值,不能准确描述深度信息)
          • 分辨率越低,每个像素表示的区域越大,越不准确
        • 假定次级光源是diffuse的,这样次级光源在任意方向上radiance是均匀的
      • 确定每个被照亮的区域对当前着色点光照贡献是多少
        • 将被照亮的着色区域看作面片光
  • 实时渲染中间接光照
    • 当前着色点接收次级光源光照的公式如下(渲染方程)
      L o ( p , ω 0 ) = ∫ Ω p a t c h L i ( p , ω i ) V ( p , ω i ) f r ( p , ω i , ω o ) c o s θ i d ω i (1) \tag{1}L_o(p, \omega_0) = \int_{\varOmega_{patch}}L_i(p, \omega_i)V(p, \omega_i)f_r(p, \omega_i, \omega_o)cos\theta_i \mathrm{d}\omega_i Lo(p,ω0)=ΩpatchLi(p,ωi)V(p,ωi)fr(p,ωi,ωo)cosθidωi(1)

    • 由于次级光源为一个面片光。因此,公式(1)中的 d ω d\omega dω实则为:
      d ω = d A c o s θ ′ ∣ ∣ x ′ − x ∣ ∣ 2 (2) \tag{2} \mathrm{d}\omega = \frac{\mathrm{d}Acos{\theta^\prime}}{||x'-x||^2} dω=xx2dAcosθ(2)
      其中:

      • θ ′ \theta^\prime θ为次级光源出射光线与法线的夹角
      • A A A为次级光源的面积
    • 因此公式(1)变换
      L o ( p , ω 0 ) = ∫ A p a t c h L i ( q → p ) V ( p , ω i ) f r ( p , q → p , ω o ) c o s θ p c o s θ q ∣ ∣ q − p ∣ ∣ 2 d A (3) \tag{3}L_o(p, \omega_0) = \int_{A_{patch}}L_i(q\to p)V(p, \omega_i)f_r(p, q\to p, \omega_o)\frac{cos\theta_pcos\theta_q}{||q-p||^2} \mathrm{d}A Lo(p,ω0)=ApatchLi(qp)V(p,ωi)fr(p,qp,ωo)qp2cosθpcosθqdA(3)
      其中

      • L i ( q → p ) L_i(q\to p) Li(qp)为次级光源当前着色点的radiance
        • 计算
          • 思想
            • d A \mathrm{d}A dA足够小的时候,可以不用积分,直接使用 d A \mathrm{d}A dA与所有项相乘即可近似(黎曼积分,自己升维Idea能用到)
          • 由于次级光源假定为diffuse,则其BRDF为常数:
            • f r = ρ / π f_r = \rho/\pi fr=ρ/π(不是公式3的BRDF)
            • L i ( q → p ) = f r ⋅ Φ d A L_i(q\to p) = f_r \cdot \frac{\Phi}{\mathrm{d}A} Li(qp)=frdAΦ
              • Φ d A \frac{\Phi}{\mathrm{d}A} dAΦ为入射Irradiance
                • Φ \Phi Φ为flux
      • L i ( q → p ) = f r ⋅ Φ d A L_i(q\to p) = f_r \cdot \frac{\Phi}{\mathrm{d}A} L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值