以下为个人学习笔记整理,涉及坐标内容统一用右手坐标系,课程官网

# Advanced Topics in Rendering——Appearance Modeling

# Appearance Modeling

  • Non-surface models
    • Participating media
    • Hair / fur / fiber(BCSDF)
    • Granular material
  • Surface models
    • Translucent material(BSSRDF)
    • Cloth
    • Detailed material(non-statistical BRDF)
  • Procedural appearance

# 无表面模型(Non-surface models)

# 散射介质(Participating media)

类似雾和云之类的物体。

  • 光线在介质内有可能被吸收。
  • 介质内部有光源的情况。
  • 光线经过介质后,一部分被随机的散射到各个方向,另一部分会穿过介质。
  • 介质会接受到来个各个方向的光,最终通过某个方向射出。

image-20210203162003072

# 相位函数(Phase Function)

用于描述光线的散射角度分布。

image-20210203194346246

# Rendering
  • 随机选择一个直线距离发生弹射。

  • 随机选择一个方向弹射。

  • 把每个弹射点和光源求光照亮度合。

image-20210203194736664

# Hair Appearance

如何渲染出真实的人物头发。

image-20210203194956709

# Kajiya-Kay Model

假设光线照射到头发后,会有一个圆锥形的反射,和一个球形的漫反射。

image-20210203195046765

Kajiya-Kay Model 得到的渲染效果。

image-20210203195220388

# Marschner Model

定义光线穿过头发会发出以下几种光线

  • R:光线打到圆柱上被反射出来的光线
  • TT:光线透过圆柱,折射两次后穿出的光线
  • TRT:光线穿过圆柱,在圆柱内部经过反射出来的光线。

image-20210203195309428

把头发视作一个玻璃材质的圆柱,经过玻璃柱会有能量的损失。

image-20210203195649107

考虑三种类型的光线「R」、「TT」、「TRT」。

image-20210203195724481

最终效果非常理想:

image-20210203195815053

# Fur Appearance——As Human Hair

动物毛发能否按照人物头发的方式进行渲染?效果不太理想。

image-20210203200104241

动物和人的毛发结构不太相同,动物的「Medulla」相比于人的要大的多。而「Medulla」会把光线散射到四周。但是计算人的头发时认为头发内部都是由「Cortex」组成,而「Cortex」会吸收射入的光线,这样会导致动物毛发看上去更暗。

image-20210203200214085

「Medulla」占比和渲染效果:

image-20210203200437074

# Double Cylinder Model

把圆柱分为三层,单独描述「Medulla」。

image-20210203200550022

通过该模型可以简单的得到光线的散射

  • RR:光线打到圆柱上被反射出来的光线
  • TTTT:光线透过圆柱,折射两次后穿出的光线
  • TRTTRT:光线穿过圆柱,在圆柱内部经过反射出来的光线。
  • TTsTT^s:光线经过一次折射后穿过「Medulla」后被散射到四周的光线。
  • TRTsTRT^s:光线经过一次折射一次反射后穿过「Medulla」后被散射到四周的光线。

image-20210203200748192

把五种光效的结果相加,得到正常毛发的颜色。

image-20210203200955548

# Granular Material

颗粒状的模型结构。

image-20210203201321465

根据颗粒物占比来对最终形成的物体进行渲染。

image-20210203201606303

# 表面模型(Surface models)

# Translucent Material

# 玉石(Jade)

image-20210203201814096

# 水母(Jellyfish)

image-20210203201948411

# 次表面散射(Subsurface Scattering)

光线从某个点进入物体表面后,通过某个点钻出物体表面。

image-20210203202045275

# Scattering Functions

该性质违反了 BRDF 的前提假设。由此产生了一个新的反射函数 BSSRDF:

S(xi,wi,xo,wo)S(x_i,w_i,x_o,w_o)

由于光线入射和出射点不一样了,所以,如果要得到某个方向上的光线亮度。

不但要对入射到某点的半球面光线进行积分,还需要对在某个面积内所有的入射点进行积分:

L(xo,wo)=AH2S(xi,wi,xo,wo)Li(xi,wi)cosθidwidAL(x_o,w_o) = \int_A \int_{H^2} S(x_i, w_i, x_o, w_o)L_i(x_i,w_i) \cos \theta_i dw_idA

image-20210203202425038

# Dipole Approximation

通过引入两个点光源来达到次表面散射的效果。

  • 一个在物体内部。
  • 一个在物体内部对应的外部。

image-20210203203035169

# BRDF vs BSSRDF

image-20210203203310548

# Cloth

布料的渲染。

image-20210203203511204

image-20210203203449944

# Render as Surface

给定一个编制的方法,就可以定义一个材质的 BRDF,就能够把它渲染出来。

image-20210203203759203

但是有些材质实际上不能当成一个表面去渲染,例如天鹅绒之类的。

image-20210203203857383

# Render as Participating Media

把布料当做是散射介质来进行渲染。效果会比较好,但是更加消耗。

image-20210203204028263

# Render as Actual Fibers

或者尝试对每一根纤维都进行渲染。

image-20210203204137968

# Detailed Appearance

有些物体的渲染太过于完美,以致于看上去不真正。

image-20210203204316067

真实世界的汽车会有很多的划痕,鼠标的高光也有一些颗粒。

image-20210203204438385

# Statistical NDF vs Actual NDF

正常渲染所使用的法线分布函数(NDF,参考十八课的 Microfacet BRDF)太过于完美。真实世界的法线分布则更加的不规则,更多的细节。

image-20210203204809098

要实现这样的效果,可以给物体增加一个单独的法线贴图。

image-20210203205203718

但是这样渲染起来将非常的耗时且困难。

image-20210203205305208

# Difficult path sampling problem

蒙特卡洛积分时的抽样也很困难。很难捕捉到从摄像机到光源之间能够通过微表面反射的来的光线路径。由于每个微表面都是镜面,都有自己对应的法线。

所以要让光线能够从某个固定点出发,经过某点反射后达到一个固定的终点是比较困难的。

image-20210203205435306

# BRDF over a pixel

假设每个像素可以覆盖多个微表面。通过某个区域的各个微表面法线,计算出该区域整体的法线分布。

得到法线分布后,就可以通过微表面的渲染方法来渲染微表面模型。

image-20210203205747583

一个像素对应的微表面大小也会决定一个微表面分布所求得的法线分布。

image-20210203210159024

不同类型的法线贴图也会产生不一样的法线分布结果。

image-20210203210332983

# Recent Trend:Wave Optics

如果物体足够小,小到和光线的波长近似的时候,光的「波」性质就会体现出来。

image-20210203210649412

# 波动光学下的「Detailed Material」

image-20210203210727899

# Procedural Appearance

通过程序化生成的材质。在没有任何纹理贴图的情况下,来设定各个位置的纹理。

# 噪声函数(Noise Function)

可以用来生成复杂的地形,海面,各种复杂的纹理,且噪声函数产生的材质是适用于 3D 的。

image-20210203211017638

# 关键字:

  • Bidirectional Subsurface Scattering Reflectance Distribution Function(BSSRDF):双向次表面反射分布函数