散射体的3dgs建模
Title: Don’t Splat your Gaussians: Volumetric Ray-Traced Primitives for Modeling and Rendering Scattering and Emissive Media
https://arxiv.org/pdf/2405.15425
最近很喜欢云,但是现在重建/生成户外场景的都是反射表面,根本不关心天空,要么就是panorama那样的hdri贴图,体积云这一块无人在意。这篇文章是我找到为数不多的高效散射表达
BACKGROUND
RTE:
这四项分别为:一部分光被吸收,一部分光被散射走,介质可能自己发光,其他方向的光被散射进来;这个ode可以得到最下面的积分形式
in-scattering:
把球面上的其他方向的光积起来,fp是相位函数
消光系数:
大概跟粒子密度和面积有关
体渲染方程:
T是透射概率,用一个exp函数计算;Lo分为\(L_o(x,ω)=(1−α)Q+αS\),吸收(发射)项和散射项
Volumetric primitives
用3dgs的primitive计算这个渲染方程,就是把连续的积分给拆到离散的高斯球上,分别计算每段的贡献,这里分段是按gaussian的边界,一段可能有多个gaussian重叠,系数直接相加
这里计算的是最终看到的亮度 = Sum {每一段产生的光 × 到相机仍然存活的概率}
\(K_i\)是用gaussian建模上面公式的\(\rho\)的分布,乘上\(\sigma\)得到\(\mu_t\),然后\(S_k\)是这一段里的gaussian的集合,对光的贡献直接加起来,在外面乘上这一段开头到积分位置\(x_t\)的透射率
sampling
积分可以得到累积分布\(F(t) = \int_0^t p(s) ds = 1 - T(x_0,x_t)\),因此按p采样等价于采样\(\xi \sim U(0,1)\),然后搜索\(t = T^{-1}(1 - \xi)\)
为了提升速度,kernel 非常多、非常小的时候,直接在段内均匀采样
Kernels
作者研究了两种kernel:Gaussian和Epanechnikov Kernel,给出了\(\tau(t)\)的闭式解(erf函数是啥没学过啊),计算误差大的时候用 bisection solver / Newton-Raphson solver
Others
7.2提了一下对散射体optimization的方法,从一个 primitive 开始逐渐向当前 primitives 的 bounding sphere 周围随机添加新 primitives,用一种Bounded Adam优化
8对比了gaussian kernel和epanechnikov kernel,前者适合平滑体积数据(云、烟),后者适合高频细节 / 硬表面,Epanechnikov更紧凑更快。

浙公网安备 33010602011771号