GAMES101-18:高级渲染
十八、高级渲染
18.1 高级光线传播
18.1.1 无偏 & 有偏 蒙特卡洛估计
- 无偏:不论样本数是多少,估计值的期望总是正确的
- 有偏:期望和正确值不一样;但是样本数足够多时,会收敛到正确值consistency
- 有偏 = 模糊
- 一致性 = 样本足够多时可以收敛到不模糊
18.1.2 双向路径追踪 BDPT
- 从光源、观察点开始,分别生成两个不同的半路径
- 将半路径的端点连起来
- 缺点:渲染速度慢
对于间接光较多的场景,双向路径追踪效果更好
18.1.3 Metropolis光线传播 MLT
- 用马尔科夫链进行采样
- 马尔科夫链:当前有一个样本,返回一个与之接近的样本
- 优点:可以生成一个样本分布与与任意函数形状一致的PDF
- 给任意一个路径,可以生成与之相似的路径:是一个局部的方法
适用于做困难的路径传播,因为可以由一条较好的路径开始,找到更多的路径
缺点:
- 难以在理论上计算收敛的速度
- 所有操作都是局部的,有的像素快,有的像素满,会很"脏"
- 难以用于动画的渲染
18.1.4 光子映射 Photon Mapping
适用于渲染SDS(Specular-Diffuse-Specular)路径、生成caustics
- caustics:由于光线的聚焦产生的非常强的高亮图案
分为两步:
- 从光源开始,辐射光子,直到光子打到diffuse表面,将结果记录下来
- 从摄像机开始,发射半路径,直到路径打到diffuse表面上
- 计算局部密度估计 local density estimation:
- 对任何一个着色点,取最近的n个光子,计算这n个光子占据的面积,计算其密度
- n较少时,噪声大;n较大时,会模糊
有偏估计:
- 因为dN / dA != ΔN / ΔA,只有ΔA很小时才接近dA
- 光子越多,找n个光子占据的面积越小,就更接近正确结果
- 不能确定ΔA,增加光子,因为ΔA永远不会接近dA
18.1.5 Vertex Connection and Merging
- 将BDPT和光子映射结合起来
- 使用BDPT生成两段sub-path
- 如果有两段sub-path的终点非常接近,则使用光子映射计算其贡献
18.1.6 实时辐射度 Instant Radiosity
- 已经被照亮的地方,认为是光源,照亮别的地方
- 从光源开始发射sub-path,停在某些地方,形成新的光源VPL(Virtual Point Light)
- 用新的光源照亮着色点
- 优点:快,并且效果较好
- 缺点:
- 在缝隙处会出现问题
- 不能做glossy物体
18.2 高级外观建模
外观 == 材质 == BRDF
18.2.1 非表面模型:云、 烟、雾等
Participating Media:参与介质
Phase Function:相位函数,规定光线如何散射
18.2.2 头发表面
会有两种高光:有色、无色
Kajiya-Kay模型:光线打到圆柱上,会反射为圆锥
Marschner模型:光线打到圆柱上,一部分会反射为圆锥,一部分会穿进去
- R:直接反射
- TT:穿进头发,然后再穿出来
- TRT:穿进头发,发生反射,然后再穿出来
- 定义光线和一根圆柱如何作用:R、TT、TRT
- 根据光线传播,计算和多个头发的作用
Double Cylinder Model:增加一个圆柱,模拟髓质
18.2.3 颗粒材质:Granular
由很多小石子构成的模型
18.2.4 表面模型:次表面散射 BSSRDF
Translucent:光线从一个点进入表面,在物体内发生了一系列散射,然后再从另一个点钻出表面
Dipole近似:在物体上下添加两个光源,模拟次表面反射的效果
18.2.5 布料
布料的定义
- 纤维的集合 fiber
- 纤维缠绕,可以得到不同的股 Ply
- 股绕在一起,可以得到线 Yarn
- 线织成布 cloth
将布料当作物体表面,使用BRDF渲染
将布料划分为很小的块,作为散射介质渲染
将布料划分为很多个线,类似头发模型渲染
18.3 通过修改微表面法线分布,得到不同的效果
18.3.1 对一个区域内的微表面进行积分
18.3.2 波动光学与几何光学得到的NDF
18.4 程序化生成表面
- 定义在空间中的函数,可以在使用的时候,查询空间中的某个点的值,而不是将三维纹理存储下来,噪声函数
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 华风夏韵!
评论