zoukankan      html  css  js  c++  java
  • 【笔记】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

  • 相关阅读:
    [JSOI2007][BZOJ1031] 字符加密Cipher|后缀数组
    leetcode Flatten Binary Tree to Linked List
    leetcode Pascal's Triangle
    leetcode Triangle
    leetcode Valid Palindrome
    leetcode Word Ladder
    leetcode Longest Consecutive Sequence
    leetcode Sum Root to Leaf Numbers
    leetcode Clone Graph
    leetcode Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/ghostcai/p/15705016.html
Copyright © 2011-2022 走看看