【笔记】Volume Rendering -- Compositing Function
Volume Rendering
感性理解
感性理解:三维空间划分成很多体素,每个体素有RGBA四种信息,表示颜色(RGB)和透明度(A)
要渲染二维表示,我们选定坐标原点,以它为球心发出很多射线
每条射线会穿过一些体素,我们沿着光线的路径进行颜色的加权统计(权重为不透明度)
每个体素对最终颜色会造成\((1-\alpha)\mathbf {color}\)的影响(不透明度可视作概率,乘以颜色)
最终得到所有颜色的累计,即得到所求的颜色
公式推导
光强部分
考虑射线穿过的一个圆柱体,里面包含一些粒子,其半径为r,视面积为A
设其中粒子的密度为\(\rho(s)\),考虑一小段长度\(\Delta s\),粒子数
当\(\Delta s \rightarrow 0\),我们认为粒子不会发生重叠,此时粒子所占面积
那么,其不透明度\(\alpha\)可以认为是
一束射线,原本光强为\(I(s)\),通过这一小段距离\(\Delta s\)后,光强\(I(s+\Delta s)=(1-\alpha)I(s)\)
理解为,光线有\(\alpha\)的概率撞到小球,之后光强为0,有\((1-\alpha)\)的概率穿过,之后光强不变
那么当\(\Delta s\)无限趋近0时,有极限形式
设\(\sigma(s)=A\rho(s)\),表征圆柱体的特性
那么有
这是一个微分方程,且可以分离变量
两边积分得
也就是
令\(T(s)=\exp({ \int_0^{s} -\sigma(t)dt})\),表征的是从原点到s的总透明度(光强剩余百分比),有
令\(F(s)=1-I(s)\),用来表示原点到s的总不透明度
那么\(F'(s)\)就能表示s点附近瞬间的不透明度(类似3Blue1Brown,微积分的本质里,积分上界函数的导数)
\(F'(s)=I(s)\sigma(s)\)
颜色部分
现在有了关于单色光的光强的式子,我们要的是沿着这条光线看到颜色的期望
也就是
这就是最终渲染出来的颜色!
离散处理
计算机操作需要离散的做法,采用均匀采样\(t_1\)到\(t_n\)共n个点,间距\(\delta_i=t_{i+1}-t_i\)
改写为
同样将
改写为
本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/15705016.html