当前位置:首页|资讯

【科普】面向高中生的可微渲染导论

作者:布朗尼蛋糕_Official发布时间:2024-10-30

Why Differentiable Rendering?

传统的渲染(正向渲染),是指像游戏渲染画面那样只管从场景到输出结果,不需要考虑太多。然而可微渲染不一样,它要求渲染函数是可导的。

可是,对渲染函数求导有什么作用呢?我们一步步往下看。

反向渲染 Inserve Rendering

反向渲染,顾名思义,和正向渲染相反。正向渲染就是正常的场景参数-渲染结果的流程,通俗地说就是 3D 场景参数-2D 图像 的过程,而反向渲染则是从 2D 图像-3D 场景参数 的过程。

例如一些利用 2D 图像就能渲染出 3D 场景的炫酷软件,它们的核心之一正是反向渲染。

不过,我们不是一开始就能把扫出来的 2D 图像给好好 3D 渲染出来的,最开始渲染出来的结果一定是很粗糙的,与真实值(Ground Truth)有一定的差距,于是我们需要一次次地优化场景参数,利用优化后的场景参数进行渲染,才能逐渐接近 Ground Truth。

正向渲染 - 抽象化表示

p、几何体参数 g、材质参数 m、光照参数 l),然后输出一张图片 %5Chat%7By%7D

f,则渲染过程可表示为:

%5Chat%7By%7D%3Df(p%2Cg%2Cm%2Cl)

这是一个多元函数。

%5Cmathbf%7Bx%7D%20%3D(p%2Cg%2Cm%2Cl),此时渲染函数变成了一元函数:

%5Chat%7By%7D%3Df(%5Cmathbf%7Bx%7D)

核心:场景参数优化

在选择性必修第三册里,我们学习了一定的数理统计知识。例如一元正态线性回归模型、最小二乘法估计参数等。你是否觉得这些知识离应用很远,只是个便于抢分的知识点?待会儿就不是了。你会真的感受到它们在前沿领域中正在扮演着十分重要的角色。

y_1%2Cy_2%2Cy_3%2C...%2Cy_n,而与之对应的 3D 重新渲染出的图像序列为 %5Chat%7By_1%7D%2C%5Chat%7By_2%7D%2C%5Chat%7By_3%7D%2C...%2C%5Chat%7By_n%7D

y_i 和 %5Chat%7By%7D_i 有差距,那么我们的目的就是尽可能缩小差距。如何量化这个差距呢?这就是课本里的“随机误差”,它定义如下:

%5Chat%7Be_i%7D%3D%5Chat%7By_i%7D-y_i

%5Chat%7By_i%7D 是预测值,y_i 是真实值。它们分别对应我们的渲染值和 Ground Truth。

%5Chat%7By%7D%3Dbx%2Ba 的例子来说明,也就是找出参数 a%2Cb 让总体随机误差平方和:

Q(a%2Cb)%3D%5Csum_%7Bi%3D1%7D%5En%20%20%5Chat%7Be_i%7D%5E2%3D%5Csum_%7Bi%3D1%7D%5En(bx_i%2Ba-y_i)%5E2 

达到最小,这就是最小二乘法。课本教的方法是暴力构造出一个二次函数,得到了 a%2Cb 的最小二乘估计:

经典 “注意到”

y%3Dax%5E2%2Bbx%2Bc 在 -%5Cfrac%7Bb%7D%7B2a%7D%20  处取得最小值的方法,进一步地,想到前不久才学习过的导数,我们能不能利用导数的方法进行研究呢?

这就是可微渲染中的“微”!

不过很遗憾,高中只学一元函数的导数,没学多元的,这里 Q(a%2Cb) 是个二元函数。多元函数的导数称为偏导数,大学才学。不过引入偏导数会让推导过程变得十分直观简洁,在《概率论与数理统计》里,推导  最小二乘估计的篇幅只有高中教材的一小半。

不过,我们知道了利用求导来最小化随机误差平方和,即最小二乘,是个好办法。

%5Chat%7By%7D%3Df(%5Cmathbf%7Bx%7D) 实际上是个非常非常复杂的函数(和 The Rendering Equation 有关的多重积分),求出某一点导数的解析解几乎是不可能的,于是我们发明了梯度下降法(Gradient Descent),这是一种不求解析解的数值求导方法,用于解决最小二乘估计的问题。

%5Cnabla。例如渲染函数 f(%5Cmathbf%7Bx%7D) 的导数可以记作 %5Cnabla%20f(%5Cmathbf%7Bx%7D),为了便于理解,我们写成一个喜闻乐见的形式:

%5Cnabla%20f(%5Cmathbf%7Bx%7D)%3Df'(%5Cmathbf%7Bx%7D)

这下看懂了。

f(%5Cmathbf%7Bx%7D) 定义一个总体随机误差平方和 Q(%5Ctheta),其中 %5Ctheta 是优化的场景参数

我们的目的,是要让:

Q(%5Ctheta)%20%3D%5Csum_%7Bi%3D1%7D%5En%20%5Cbig%5B%20f(%5Cmathbf%7Bx%7D_i)-y_i%20%5Cbig%5D%5E2

%5Ctheta_m 使平方和最小。

u%5E2 和 f(%5Cmathbf%7Bx%7D)-y 复合起来的函数,于是我们可以使用在选择性必修第二册里学到的链式法则

y_%7Bx%7D'%3Dy_%7Bu%7D'%5Ccdot%20u_%7Bx%7D'

得到

Q'(%5Ctheta)%3D2%20%5Csum_%7Bi%3D1%7D%5En%20%5Cbig%5B%20f(%5Cmathbf%7Bx%7D_i)-y_i%20%5Cbig%5D%20%5Cbig%5B%20f'(%5Cmathbf%7Bx%7D_i)-y'_i%20%5Cbig%5D

f(%5Cmathbf%7Bx%7D) 进行求导了。对渲染函数进行求导,就是可微渲染的核心部分。

求了导还没完,别忘了最终目的是优化参数。接着,我们使用梯度下降法不断更新参数,就可以找出 %5Ctheta_m%20%3D%5Cmathrm%7Bargmin%7D%20%5C%20Q(%5Ctheta) 了。

哇袄,这不就纯纯是机器学习,跟图形学有个毛的关系啊!(确实没啥关系

可微渲染的主要工作

学术界的工作就是集中研究如何更好地求出 f'(%5Cmathbf%7Bx%7D)

它是非常费脑筋的。渲染方程本身复杂多变,例如它里面的 Visibility 函数就处处充斥着不连续性。

不连续就必不可导,如果一个渲染器的算法存在不连续性,可微渲染将会变得十分困难,虽然理论上可以使用近似差分的方法,然而始终是没有拿得出手的效果。

由于计算机视觉、机器学习的火热,学术界在最近几年产出了很多成果。例如来自 MIT CSAIL 的论文 "Differentiable Monte Carlo Ray Tracing through Edge Sampling",它从采样出发,分别使用 Edge Sampling 和 Area Sampling 两种不同的策略去处理渲染方程的导数。

考虑到这篇文章的定位,故不打算讲渲染方程了(前面的区域以后再来探索吧

Future

可微渲染同时是计算机图形学、计算机视觉和机器学习中的前沿领域。随着 AI 的不断普及,可微渲染的重要性将会越来越高。

Reference

[1]《普通高中教科书 数学 选择性必修 第三册》,人民教育出版社,2019.


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1