10

Real-Time Polygonal-Light with LTC

 3 years ago
source link: https://zhuanlan.zhihu.com/p/84714602
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Real-Time Polygonal-Light with LTC

图形学 | 研二

我初步实现了 14 年寒霜的光照方案[1],涉及了四种面光源(长方形,圆盘,球,胶囊)的漫反射和高光。漫反射部分解决的挺好,高光很 trick,能量不守恒。

16 年 SIGGRAPH[2]上有一篇由 Unity,Ubisoft 和 Ready At Dawn 联合推出的大作 Real-Time Polygonal-Light Shading with Linearly Transformed Cosines[3],里边的 LTC 方法直接解决了多边形面光源的实时面光源问题,真是厉害!厉害在哪里?

!!!实时,精确解 !!!

我很早就在刷知乎的时候从

那了解到了这一惊艳、精彩绝伦、陈独秀的技术,菜鸡超级想实现一波。

方法实现在了自己写的渲染引擎 RenderLab 里,有兴趣的朋友可以康康

v2-59fa7b3e9f0e9ba638b2cb5074f8a7d5_720w.jpg

目录

  1. 线性变换球面分布
  2. 以 LTC 近似 BRDF

双向散射分布函数 BRDF 在确定了入射方向和粗糙度后,其变成一个球面分布函数(原本的函数并不是简单的球面分布函数),可视化如下

即使是各向同性 isotropy 的 BRDF,在倾斜视角的视角下,BRDF 也会表现出各向异性 anisotropy 和偏斜(最大值不在平均方向上)。

各向异性

在多边形光源 Polygonal-Light 渲染中,所需要解决的问题就是求辐照度 irradiance 积分

[公式]

多边形辐照度积分

其中 [公式] 是 BRDF 函数,P 是多边形。

如果 BRDF 是 lambertian [公式],且光源各处强度恒定 [公式] ,则积分变为 [公式] ,这有解析解,由 18 世纪时的 Lambert 给出(下边详述)。

然而 BRDF 的球面分布很复杂,辐照度没有解析解。

这篇论文发现可以用一个线性变换将一个球面分布函数 [公式] 变成另一个球面分布函数 [公式] (就是对分布的参数进行变量代换,用了线性变换,后边可见具体形式)。具体地,可以将 BRDF 球面分布函数转变成 [公式]球面分布函数, 从而解决了上述积分问题。

2. 线性变换球面分布

将原球面分布函数 [公式] 经过线性变换后能得到新的球面分布,称为线性变换球面分布 Linearly Transformed Spherical Distributions, LTSD

2.1 定义

[公式] 是原始分布

线性变换 [公式] 可用 3 x 3 的矩阵表示。注意本文只用单位向量,故具体的变换是 [公式] (而不是简单的 [公式] ),逆变换为 [公式] 。注意在线性变换后进行了标准化使得最终的变换非线性。但为了直观还是使用“线性”这个词。

[公式] 作用一个线性变换可以得到一系列分布函数,称为线性变换球分布函数族 linearly transformed spherical distributions (LTSD),就是 [公式] 乘上一个 Jacobian

[公式]

其中 [公式] 是变换 M 的 Jacobian[3](Jacobian的推导看论文的附录A,就是微分上的几何推导)。

[公式] 是缩放和旋转时, [公式] 不改变分布的形状,此时 [公式]

证明
当 M 是缩放时,有
[公式]
当 M 是旋转时,有
[公式]

2.2 性质

  • 范数: [公式]
  • 多边形积分: [公式],其中 [公式](就是将每个多边形的点作线性变换)

这个多边形积分的线性变换是本文的核心,其实就是简单的积分变量代换。很基础,但这个发现很晚才有。

3. 以 LTC 近似 BRDF

在渲染中,我们需要将 BRDF 线性变换成余弦分布。下边具体说明

3.1 LTC

[公式]

[公式] 代入 [公式] 即可得线性变换余弦 linearly transformed cosines (LTC)。

3.2 拟合

使用了 GGX[4] BRDF(菲涅尔项为 1),近似的 [公式]

[公式]

对于各项同性的 BRDF,BRDF 只取决于入射方向 [公式]​ 和粗糙度 [公式] 。对于任意 [公式] 我们找到一个 LTC 来近似,也就是找到一个 M(这是非线性优化问题,可用各种工具求解)。由于各向同性 BRDF 有平面对称性且 LTSD 有缩放不变性,M 可表示为

[公式]

在实践中发现,这样子 a b c d 随 [公式] 的变化不平缓[5]
在最终的实现[6]中使用的矩阵是
[公式]

这样拟合只用考虑 4 个变量,拟合的矩阵的逆矩阵(同样只有四个参数,在渲染过程中只需要逆矩阵)可以存储在一个 2D 四通道的 LUT 中。

拟合比对示例如下

我们要存储逆变换的四个变量参数还有被拟合的 [公式] 的范数 [公式],这样总共要用 5 个通道。

原文没有给出此范数的用处,下边我解释一下
BRDF 的积分由于几何阴影和遮蔽,总是小于 1
[公式]
相比之下,LTC 的积分总为 1,因为 LTC 只捕捉了 BRDF 的形状
因此存储了范数来准确拟合
[公式]
后续 Stephen Hill 给出了考虑菲涅尔项的情况[7]
并不是让 LTC 去拟合含 Fresnel 的 BRDF,而是将其作为 BRDF 的范数,效果挺好
[公式]
其中 [公式]

假设 [公式],则辐照度为

[公式]

其中 [公式] 有解析解(18 世纪 Lambert 给出),将多边形积分转化为线积分,如下

[公式]

其中 [公式] 。注意公式假设多边形位于上半球,实践中我们需要首先裁剪多边形。

流程如下:

  1. 采样 LUT 得变换矩阵
  2. 将多边形的各个顶点变换一下
  3. 裁剪变换后的多边形(变成三角形、长方形或五边形)
  4. 线积分(有解析解)
  5. 采样范数和菲涅尔项调整 4 的结果

其中 3 可以用第 5 节中的球近似方法简化为一个采样 LUT 的操作。

总的来说,主要消耗就是两次采样,n 次矩阵乘法,n 次线积分(n 为多边形的边数)。

5. 实现细节

5.1 精度

在计算多边形积分时,由精度问题会引发 artifacts

问题出在线积分的 acos 上(内部使用了拟合)

float EdgeIntegral(float3 v1, float3 v2, float3 n) {
    float theta = acos(dot(v1, v2));
    float3 u = cross(v1, v2) / sin(theta);
    return theta * dot(u, n);
}

我们用拟合的方式直接得到 [公式],省去了acos

优化后的效果如下

5.2 裁剪

裁剪涉及非常繁杂的条件语句

引入所谓的 vector form factor(就是 [公式] 不与法向点乘)

[公式]

我们可以找一个代理,使得它的 form factor 就是 F,且易于计算其在半球裁剪后的 [公式]

这里我们使用了球做代理[5][公式] 只取决于 F 的大小和其与法向的夹角,故可用一张 2D 的 LUT 存储。

如果不用 LUT 也可以用一个近似公式来求解

三种方案对比如下,球近似 sphere approximation 方案表现良好

我在实践中发现,球近似方案还是有 bug 的,这在球上表现了出来(怪不得官方 demo 只有平面)

看情况选择吧,一般这种现象还是不大能轻易看到的。

5.3 LUT

我从 demo 中爬出了 LUT

下边展示一下

5.4 相关源码

LTC 的两个 LUT 可在 LTCTex.h 找到

shader 相关代码可在 LTC.hdirectLight.fs 中找到

LTC 解决了多边形光源(不局限于长方形)的辐照度实时精确解问题。

吊打各种 trick,拳打 Unreal,脚踢 Frostbite。

但没有考虑阴影问题,这是非常难的问题。

后续他们还给出了线光源(可近似细圆柱)、圆盘/球光源的解决方案。我将在以后给出实现。

感谢大家的阅读。

  1. ^Moving Frostbite to PBR. 2014. https://www.ea.com/frostbite/news/moving-frostbite-to-pb
  2. ^Ke-Sen Huang. SIGGRAPH 2016 papers on the web. http://kesen.realtimerendering.com/sig2016.html
  3. ^abHeitz E , Dupuy J , Hill S , et al. Real-time polygonal-light shading with linearly transformed cosines[J]. ACM Transactions on Graphics, 2016, 35(4):1-8. https://eheitzresearch.wordpress.com/415-2/
  4. ^Walter B , Marschner S R , Li H , et al. Microfacet Models for Refraction through Rough Surfaces.[C]// Eurographics Symposium on Rendering Techniques. DBLP, 2007.
  5. ^abStephen Hill, Eric Heitz. Real-Time Area Lighting: a Journey From Research to Production, 2016. https://blog.selfshadow.com/publications/s2016-advances/
  6. ^WebGL Demo. Quad lights. http://blog.selfshadow.com/ltc/webgl/ltc_quad.html
  7. ^Stephen Hill. LTC Fresnel Approximation. https://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK