• 【笔记】Volume Rendering Compositing Function


    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} \]

    本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/15705016.html

  • 相关阅读:
    python3使用django1.11不支持MYSQL-python的解决办法
    abp学习目录
    日常网站整理
    C#使用TransactionScope实现事务代码
    CSS禁止选择
    数据库三种事务
    设计模式总章
    几种排序方法的总结
    将图片压缩成大小格式小的图片
    常用的wsdl地址
  • 原文地址:https://www.cnblogs.com/ghostcai/p/15705016.html
Copyright © 2020-2023  润新知