【笔记】Volume Rendering

Volume Rendering

感性理解

感性理解:三维空间划分成很多体素,每个体素有RGBA四种信息,表示颜色(RGB)和透明度(A)

要渲染二维表示,我们选定坐标原点,以它为球心发出很多射线

每条射线会穿过一些体素,我们沿着光线的路径进行颜色的加权统计(权重为不透明度)

每个体素对最终颜色会造成\((1-\alpha)\mathbf {color}\)​​的影响(不透明度可视作概率,乘以颜色)

最终得到所有颜色的累计,即得到所求的颜色

公式推导

光强部分

考虑射线穿过的一个圆柱体,里面包含一些粒子,其半径为r,视面积为A

设其中粒子的密度为\(\rho(s)\)​,考虑一小段长度\(\Delta s\)​​,粒子数

\[N=E\Delta s\rho (s) \]

当\(\Delta s \rightarrow 0\),我们认为粒子不会发生重叠,此时粒子所占面积

\[E_{eff}=E\Delta s\rho(s)A \]

那么,其不透明度\(\alpha\)可以认为是

\[\alpha = \dfrac{E_{eff}}{E}=\Delta s \rho (s) A \]

一束射线,原本光强为\(I(s)\)​,通过这一小段距离\(\Delta s\)后,光强\(I(s+\Delta s)=(1-\alpha)I(s)\)

理解为,光线有\(\alpha\)​的概率撞到小球,之后光强为0,有\((1-\alpha)\)的概率穿过,之后光强不变

那么当\(\Delta s\)无限趋近0时,有极限形式

\[\dfrac{dI(s)}{ds}=-A\rho(s)I(s) \]

设\(\sigma(s)=A\rho(s)\),表征圆柱体的特性

那么有

\[\dfrac{dI(s)}{ds}=-\sigma(s)I(s) \]

这是一个微分方程,且可以分离变量

\[\dfrac{1}{I(s)}dI(s)=-\sigma(s)ds \]

两边积分得

\[\ln I(s) = \int_0^{s} -\sigma(t)dt \]

也就是

\[I(s)= I(0) \exp({ \int_0^{s} -\sigma(t)dt}) \]

令\(T(s)=\exp({ \int_0^{s} -\sigma(t)dt})\)​​,表征的是从原点到s的总透明度(光强剩余百分比),有

\[I(s)=I(0)T(s) \]

令\(F(s)=1-I(s)\),用来表示原点到s的总不透明度

那么\(F'(s)\)​​就能表示s点附近瞬间的不透明度(类似3Blue1Brown,微积分的本质里,积分上界函数的导数)

\(F'(s)=I(s)\sigma(s)\)​

颜色部分

现在有了关于单色光的光强的式子,我们要的是沿着这条光线看到颜色的期望

\[E(\mathbf c) = \int_{0}^{\infty} F'(s)\mathbf c(s)ds \]

也就是

\[E(\mathbf c) = \int_{0}^{\infty} I(s)\sigma(s)\mathbf{c}(s)ds \]

这就是最终渲染出来的颜色!

离散处理

计算机操作需要离散的做法,采用均匀采样\(t_1\)​到\(t_n\)​共n个点,间距\(\delta_i=t_{i+1}-t_i\)​

\[T(s)=\exp({ \int_0^{s} -\sigma(t)dt}) \]

改写为

\[T(t_i)= \exp({\sum\limits_{j=1}^{i-1}-\sigma({t_j)\delta_j}}) \]

同样将

\[T(s)=\exp({ \int_0^{s} -\sigma(t)dt}) \]

改写为

\[\begin{aligned} E(\mathbf c) &= \sum\limits_{i=1}^{n-1}(F(t_{i+1})-F(t_i))\mathbf{c}(t_i)\\ &= \sum\limits_{i=1}^{n-1}(T(t_{i})-T(t_{i+1}))\mathbf{c}(t_i)\\ &=\sum\limits_{i=1}^{n-1}T(t_i)(1-\exp({-\sigma(t_i)\delta_i)\mathbf{c}(t_i)})\\ \end{aligned} \]

上一篇:SSL自签名证书


下一篇:理解https的验证过程