GAMES102 Lecture 18 Advanced Topics in Rendering
这里回顾GAMES101 Lecture 18,高级光线传播与复杂外观建模。
课程主页:
课程作业:
课程视频:
本讲内容
- 高级光线传播;
- 很多内容,主要仅供参考;
高级光线传输
- 无偏光线传输方法
- 双向路径追踪(BDPT);
- Metropolis光线传输(MLT);
- 有偏见光线传输方法
- 光子映射;
- 顶点连接和合并(VCM);
- Instant radiosity(VPL/多种光照方法)
有偏与无偏蒙特卡洛估计
- 无偏蒙特卡罗法没有任何系统误差
- 无论使用多少样本,无偏估计的期望值始终是正确的值
- 否则,就称为有偏
- 一种特殊情况,期望值收敛到正确值(如果样本无限多);
- 此时称为一致;
- 我们将在介绍光子映射后再次回到这里;
双向路径追踪(BDPT)
- 回顾,路径连接相机和光
- BDPT
- 跟踪来自相机和光线的子路径
- 连接两个子路径的端点
- 适用于光线光传输复杂的情况
- 缺点是难以实现且相当慢
思路:
效果:
Metropolis光线传输(MLT)
- 马尔可夫链蒙特卡罗(MCMC)的程序
- 使用某个PDF从当前样本跳转到下一个样本
- 非常擅长局部探索困难的光路
- 关键思想
- 局部扰动现有路径以获得新路径
- 优点:
- 适用于困难的光路
- 无偏
- 缺点:
- 难以估计收敛速度
- 不保证每个像素的收敛率相等
- 通常会产生“脏”的结果
- 通常不用于渲染动画
优点示意图:
缺点示意图:
光子映射
- 有偏的方法和两阶段方法
- 非常擅长处理镜面-漫反射-镜面(SDS)路径和生成焦散
示意图:
- 第一阶段——光子追踪
- 从光源发射光子,使它们四处弹跳,然后在漫射表面上记录光子;
- 第二阶段——光子收集(最终聚集)
- 从像机拍摄子路径,使它们四处弹跳,直到它们碰到漫反射表面;
示意图:
- 计算——局部密度估计
- 想法:具有更多光子的区域应该更亮;
- 对于每个着色点,找到最近的$N$个光子,计算这些点覆盖的表面积;
示意图:
该方法是有偏估计,因为
- 局部密度估计$dN / dA \neq \Delta N / \Delta A$;
- 但是随着点增多,$\Delta A $接近$d A$;
- 所以估计是一致的;
有偏无无偏的区别
- 有偏 == 模糊
- 一致 == 样本无限时不模糊
顶点连接和合并(VCM)
- BDPT和光子映射的组合
- 关键思想
- 如果端点不能连接但可以合并,则不要浪费BDPT中的子路径;
- 使用光子映射来处理附近“光子”的合并;
Instant Radiosity(IR)
- Instant Radiosity有时也称为多光方法
- 关键思想
- 点亮的表面可以被视为光源
- 方法
- 拍摄光子路径并假设每个子路径的终点是虚拟点光源 (VPL)
- 使用这些VPL像往常一样渲染场景
- 优点:
- 速度快,通常在漫反射场景中效果不错;
- 缺点:
- 当VPL接近着色点时会出现尖峰;
- 无法处理有光泽的材料;
示意图:
高级外观建模
- 非表面模型
- 散射介质
- 毛发/毛皮/纤维(BCSDF)
- 颗粒材料
- 表面模型
- 半透明材质(BSSRDF)
- 布
- 细节模型(非统计BRDF)
- 程序化生成模型
散射介质
在光穿过参与介质的任何一点,它都可能被(部分)吸收和散射:
使用相位函数描述参与介质内任意点x的光散射角分布:
散射介质渲染:
- 随机选择弹射方向
- 随机选择一段距离直行
- 在每个“渲染点”,连接到光源
头发外观
Kajiya-Kay模型
人类头发模型如下:
Marschner Model模型
人物头发模型改进:
头发是玻璃状圆柱体,3种光相互作用:
- R、TT、TRT
(R:反射,T:透射)
示意图:
人类头发vs动物毛发
使用上述模型无法很好地渲染动物毛发,这是因为毛发可以分为Medulla,Cortex,Cuticle三部分:
人类头发和动物毛发的Medulla(髓质)占比不同,动物毛发的髓质占比更大,更容易发生散射:
Double Cylinder Model
散射示意图如下:
颗粒材料
例如沙子,调料:
散射函数
- 许多表面的视觉特征由光从不同点射出而不是进入
- 违反了BRDF的基本假设
示意图:
BSSRDF:
BRDF的泛化:
渲染方程的推广,对表面上的所有点和所有方向进行积分:
示意图:
偶极子近似
通过引入两个点光源近似光扩散:
布料
- 扭曲纤维的集合!
- 两层扭曲
- 梭织或针织:
布料:渲染为表面
- 给定编织图案,计算整体行为;
- 使用BRDF渲染;
示意图:
布料:渲染为散射介质
- 单根纤维的特性及其分布 -> 散射参数
- 作为散射介质呈现
示意图:
布料:渲染为真正的纤维
- 渲染每根纤维;
示意图:
细节模型
之前渲染的结果过于完美:
实际情形:
微表面BRDF
表面 = 镜面微表面 + 统计法线:
计算公式:
其中$\mathbf {D(h)}$被称为NDF:Normal
Distribution
Function。
统计NDF vs 真正的NDF
统计的结果过于平滑,我们需要真正的NDF。
渲染
在该模型下,渲染很困难,因为很容易miss:
解决方案是计算像素的BRDF:
p-NDF具有尖锐的特征
p-NDF和覆盖范围有关:
波动光学
当物体很小时,不能假设光沿直线传播,需要用波来理解光。具体现象为金属勺子上的彩色现象:
程序化生成模型(Procedural Appearance)
- 利用函数计算纹理(尤其是三维情形),使得我们可以动态查询,减少存储量;
- 实现的方式是使用噪声函数;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Doraemonzzz!
评论
ValineLivere