PBRT-V3体渲染笔记
一 基本原理整理
影响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体渲染笔记相关推荐
- Physically Based Rendering,PBRT(光线跟踪:基于物理的渲染) 笔记
提起PBRT(Physically Based Rendering: From Theory to Implementation)这本书, 在图形学业界可是鼎鼎大名, 该书获得2005年软件界J ...
- GPU Gems1 - 9 有效的阴影体渲染
这章全面讲述了用于实时阴影渲染中常见两种流派之一的阴影体(Shadow Volumes)技术,又称模板阴影(Stencil Shadows)技术,重点是得到正确的角度的情形,减少几何图形和填充率的消耗 ...
- [译]基于GPU的体渲染高级技术之raycasting算法
[译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...
- 斯图加特大学GPU光线投射体渲染技术提携
斯图加特大学GPU光线投射体渲染技术介绍 前言:在以往人们的印象中,美国的CG技术是一世界第一流的,而没有注意德国CG技术的发展.事实上,德国大学的CG是相当高的,与美国第一流的大学学术交往非常频繁. ...
- Q128:PBRT-V3,“体渲染”积分器的“传播方程”(15.1章节)
对比"路径追踪"积分器和"体渲染"积分器中长度为n的路径上返回的光的计算:
- Q127:PBRT-V3,理解“体渲染”积分器的关键竟然是这张图
"体渲染"积分器是在"路径追踪"积分器的基础上考虑了场景中的介质,相当于是对"路径追踪"积分器的拓展. 所以,在学习"体渲染&qu ...
- Q126:PBRT-V3,VolPathIntegrator(体渲染)流程概述
最近在学体渲染,老实说,挺费劲的! Medium的原理.采样.对应的光传播函数.VolPathIntegrator的实现等等,都已经过了一遍. 现总结一下初浅的理解吧. VolPathIntegrat ...
- Cesium中使用Sampler3D,3D纹理,实现体渲染
Cesium中使用Sampler3D,3D纹理,实现体渲染 Cesium目前(20221231)还不支持直接使用3D纹理,但是其实内部已经可以WebGL2,而且内置常量也有3DTexture.所以,可 ...
- [体渲染]渲染一个球体
最终效果 思路 伪体渲染 通常体渲染是模拟射线在模型中逐步判断,每个像素需要for循环若干次逐步递进,然后对每个路过的像素进行加工,步距决定精度,最终输出. 消耗相当高,但如果我们绘制的是可预测的规则 ...
- Cesium Volumn 体渲染
Cesium中的体渲染 上篇介绍了Cesium中的BoxGeometry的本地坐标获取方法,获取了本地坐标后,我们就可以开始做体渲染相关的东西了.将相机坐标也换算到模型本地坐标,即可计算得到以相机为起 ...
最新文章
- 渗透测试是否需要学习Linux
- OpenGL(glut)模拟太阳系:太阳,地球,月球,火星
- MySQL---表操作
- 程序员面试题精选100题(25)-在从1到n的正数中1出现的次数[算法]
- 将Sublime Text 3设置为Python全栈开发环境
- JQ插件的写法及使用整理
- 基于asp.net的Web开发架构探索(转)
- python 二分查找_LeetCode基础算法题第120篇:二分查找算法
- 服务器文件权限在哪里,服务器中的文件权限设置在哪里
- 为什么excel图片会变成代码_会EXCEL便可定制自己的办公管理软件(超简单,无代码)...
- 程序员又迎一利器,联想 LeapIOT 工业互联网平台大曝光
- 2017年10月份计算机网络管理,2017年下半年网络管理员考试上午试题及答案
- 数据库日志采集系统方案设计
- 基于Springboot+Vue实现前后端分离进销存管理系统
- Ubuntu触摸屏校准
- Spring framework源码 Constants学习
- 2021-2027全球与中国厨房工作台安装服务市场深度研究分析报告
- cenos需要注意的小功能
- CES生产函数中参数的意义
- 云原生(三十三) | Kubernetes篇之平台存储系统部署