一 基本原理整理

影响radiance在参与介质分布的三个过程:

Absortion,Emission,Scattering(分为out-scattering和in-scattering)。

Absortion

吸收系数为σa,入射radiance Li经过距离dt,吸收后的出射radiance Lo的关系如下:

      (1)

对上式解微分方程得到一个值,表示经过d距离后的剩余比例:

     (2)

Emission

这个没什么好说的,直接上公式:

Out-Scattering

out-scattering也是radiance衰减的一个表现,散射系数为σt,方程如下:

     (3)

该方程和方程(1)完全一样,除了系数σ,因此Absortion和Out-Scattering合并可以得到一个衰减系数σt。

所以整体的transmittance的微分方程解为:

    (4)

其中d = |p - p'|。

Transmittance的意义是:radiance经过距离d后,得到的fraction。

公式(4)中的指数部分的负数,叫两点之间的optical thickness

In-scattering

In-scattering能增加出射的radiance,那么在确定一个出射方向时,有多少radiance能散射到出射方向呢?

这里引入一个phase function,描述一个点在某个方向的出射分布,可以理解成是每个出射方向的概率密度函数,假设出射方向是ω,入射方向是ω',那么有如下的公式:

in-scattering得到的radiance是:

        (5)

假设p点上的自发光是Le,那么p点增加的radiance可以表示如下:

     (6)

传输方程

传输方程描述的某个点延某条路径的radiance。

现在只考虑从一个surface的p0点反射出来的radiance的某一点p的传输方程:

公式如下:

            (7)

公式(7)的第二项表示路径里所有点的In-Scattering贡献。

回顾LTE方程,需要把bsdf函数,积分域,几何函数全部做一个针对参与介质的修改。

二 实现

采样t

提到采样,那就要问,到底我们要采样什么?

和普通的LTE不一样,LTE采样的是BSDF的方向,而带参与介质的渲染,还需要采样路径方向上的,用于估计该路径的radiance贡献。

这里有个先决条件,就是射线是一定会和surface相交的,即射线的tMax一定不是无穷大,该射线会经过参与介质medium。

假设surface的点是p,射线方向是-ω,那么射线方向的点的概率是pt(t),改点的位置是p + tω。

那么取得surface上的顶点的概率是:

            (8)

有了概率,就可以对贡献做估计,β是估计出来的throughput。

surface上一点的throughput估计:

medium上一点的throughput估计:

这里为什么要加上σs?Out-Scattering的衰减要考虑在内。

到目前为止,我们已经根据采样点和该点的概率密度估计出Throughput,接下来我们还需要估计光照的radiance。

也是分两种情况:

如果采样点是surface,直接采样bsdf进行估计。

如果采样点是medium,那么我们要估计的是公式(7)的第二项的积分(自发光忽略):

根据重要性采样,取一个pdf形状接近Tr或Ls的,pbrt中用Tr作为pdf的分布。

反函数法求t:

当t < tMax的时候,那么pdf函数是:

当t > tMax时,说明采样到的点是surface上的交点,这时的pdf是:

由于pdf是一个float值,而σt,Tr都是Spetrum,所以需要随机采样一个Spetrum的channel,然后按上述反函数法求t,

然后在把channel的pdf加取来取平均值。

接下来就是要采样Li了,类似bsdf,如果是介质中一点,通过phase函数采样入射光。

采样Phase function

均匀介质的phase函数用的是Henyey–Greenstein,公式如下:

对phase function做积分:

所以概率密度函数是:

根据概率密度函数的转换:p(θ, φ) = sinθp(ω)

边际概率密度函数求p(θ)

条件概率公式:

p(φ | θ) = p(θ, φ) / p(θ) = 1 / 2π

反函数求φ:φ = 2πξ1。

下面求p(θ)的CDF,过程很复杂,需要借工具来求,https://www.symbolab.com/solver/calculus-calculator

最后可以得到pbrt的结论(g ≠ 0)

g = 0时,pHG = 1/4π,概率密度按如下算:

θ的CDF如下:

所以这个时候有:

整个采样过程完毕。

PBRT-V3体渲染笔记相关推荐

  1. Physically Based Rendering,PBRT(光线跟踪:基于物理的渲染) 笔记

     提起PBRT(Physically Based Rendering: From Theory to Implementation)这本书, 在图形学业界可是鼎鼎大名, 该书获得2005年软件界J ...

  2. GPU Gems1 - 9 有效的阴影体渲染

    这章全面讲述了用于实时阴影渲染中常见两种流派之一的阴影体(Shadow Volumes)技术,又称模板阴影(Stencil Shadows)技术,重点是得到正确的角度的情形,减少几何图形和填充率的消耗 ...

  3. [译]基于GPU的体渲染高级技术之raycasting算法

    [译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...

  4. 斯图加特大学GPU光线投射体渲染技术提携

    斯图加特大学GPU光线投射体渲染技术介绍 前言:在以往人们的印象中,美国的CG技术是一世界第一流的,而没有注意德国CG技术的发展.事实上,德国大学的CG是相当高的,与美国第一流的大学学术交往非常频繁. ...

  5. Q128:PBRT-V3,“体渲染”积分器的“传播方程”(15.1章节)

    对比"路径追踪"积分器和"体渲染"积分器中长度为n的路径上返回的光的计算:

  6. Q127:PBRT-V3,理解“体渲染”积分器的关键竟然是这张图

    "体渲染"积分器是在"路径追踪"积分器的基础上考虑了场景中的介质,相当于是对"路径追踪"积分器的拓展. 所以,在学习"体渲染&qu ...

  7. Q126:PBRT-V3,VolPathIntegrator(体渲染)流程概述

    最近在学体渲染,老实说,挺费劲的! Medium的原理.采样.对应的光传播函数.VolPathIntegrator的实现等等,都已经过了一遍. 现总结一下初浅的理解吧. VolPathIntegrat ...

  8. Cesium中使用Sampler3D,3D纹理,实现体渲染

    Cesium中使用Sampler3D,3D纹理,实现体渲染 Cesium目前(20221231)还不支持直接使用3D纹理,但是其实内部已经可以WebGL2,而且内置常量也有3DTexture.所以,可 ...

  9. [体渲染]渲染一个球体

    最终效果 思路 伪体渲染 通常体渲染是模拟射线在模型中逐步判断,每个像素需要for循环若干次逐步递进,然后对每个路过的像素进行加工,步距决定精度,最终输出. 消耗相当高,但如果我们绘制的是可预测的规则 ...

  10. Cesium Volumn 体渲染

    Cesium中的体渲染 上篇介绍了Cesium中的BoxGeometry的本地坐标获取方法,获取了本地坐标后,我们就可以开始做体渲染相关的东西了.将相机坐标也换算到模型本地坐标,即可计算得到以相机为起 ...

最新文章

  1. 渗透测试是否需要学习Linux
  2. OpenGL(glut)模拟太阳系:太阳,地球,月球,火星
  3. MySQL---表操作
  4. 程序员面试题精选100题(25)-在从1到n的正数中1出现的次数[算法]
  5. 将Sublime Text 3设置为Python全栈开发环境
  6. JQ插件的写法及使用整理
  7. 基于asp.net的Web开发架构探索(转)
  8. python 二分查找_LeetCode基础算法题第120篇:二分查找算法
  9. 服务器文件权限在哪里,服务器中的文件权限设置在哪里
  10. 为什么excel图片会变成代码_会EXCEL便可定制自己的办公管理软件(超简单,无代码)...
  11. 程序员又迎一利器,联想 LeapIOT 工业互联网平台大曝光
  12. 2017年10月份计算机网络管理,2017年下半年网络管理员考试上午试题及答案
  13. 数据库日志采集系统方案设计
  14. 基于Springboot+Vue实现前后端分离进销存管理系统
  15. Ubuntu触摸屏校准
  16. Spring framework源码 Constants学习
  17. 2021-2027全球与中国厨房工作台安装服务市场深度研究分析报告
  18. cenos需要注意的小功能
  19. CES生产函数中参数的意义
  20. 云原生(三十三) | Kubernetes篇之平台存储系统部署

热门文章

  1. 通信技术专业技术人员考试 动力与环境_中级通信工程师动力与环境考试大纲...
  2. Python进行模糊匹配
  3. Linux学习之 vi编辑器常用命令
  4. 使用阿里云镜像加速器为docker pull提速
  5. Go语言核心36讲(Go语言实战与应用十九)--学习笔记
  6. 学习笔记--SQLyog的使用
  7. 调试记录:基于NCN5120芯片的KNX-485桥接模块
  8. 基于FPGA的1080P 60Hz BT1120接口调试过程记录
  9. 【VS插件】VS2012设置透明背景
  10. java求职简历模板自我评价_java简历自我评价填写样本