Advanced Appearance Modeling 外观建模
🛬

Advanced Appearance Modeling 外观建模

Tags
GAMES101
Published
Published May 11, 2022
Author

Non-Surface Models

Participating Media 散射介质

Fog
notion image
Cloud
notion image
  • At any point as light travels through a participating medium, it can be (partially) absorbed and scattered.
如果云中间有光源,那么中间会发光。
在光线行进的过程中,云里面有各种晶体,会把光线随机打到其他光线去。
传播的时候也可能接收到其他地方散射过来的光。
有些光传播着能量就没了,例如乌云,穿不过去,就等于被吸收了。
notion image
 
  • Use Phase Function to describe the angular distribution of light scattering at any point x within participating media.
任何一个点都会向各种地方散射,怎么散由一个函数来定义:Phase Function(相位函数,这个函数决定是均匀地散(下图左2),还是主要往背后散(下图左1)或者向前散(下图左3),与 BRDF 很像。
notion image

Rendering

  • Randomly choose a direction to bounce
  • Randomly choose a distance to go straight
  • At each ‘shading point’, connect to the light
notion image
假如已经在介质中的某个地方,往某个方向走,走多远决定介质吸收能力有多强(黑的乌云、薄雾能穿更远)。走多远停下来之后,光线应该往哪个方向打(散射),这样可以生成一系列的路径,只不过在任何一个点都可能发生一个方向的改变。找到 path 之后来计算整个路径。
💡
考虑的不是渲染方程,因为渲染方程考虑的是光线如何与物体表面作用,不是和体积如何作用,这由其他方法来做,但思想相同。

Application

notion image
notion image
notion image
💡
巧克力是一种散射材质,人的皮肤也是,例如可以把手指放到电筒前,仍然有光线穿过。

Hair Appearance

notion image
💡
描述一个头发的光学属性,要考虑光线与一个曲线如何作用,而不是和面的作用。
人的头发有两种不同的高光,一种是无色的高光,一种是有色的高光。

Kajiya-Kay Model

一开始研究头发,有一个简单的模型。有光线打到圆柱上,往四面八方散射,对于头发来说,对头发来说,考虑成会散射出一个圆锥。同时又会散射到四面八方,就像 diffuse + specular。
notion image
效果:
notion image

Marschner Model

广泛利用的模型。
考虑的是光线打到圆柱上,肯定有一部分直接反射掉,也有一部分会穿(折射)进去,再穿出去。如果把反射记做 R,穿透的折射记做 T,那么光线要穿透一个头发要穿两次,产生 TT 的光线传播方式。还有一种是光线进到头发里面了,在头发内壁发生反射又往回走,再发生第二次穿透,就是 TRT。这样我们可以定义不同的光线传播。
notion image
notion image
这个模型把头发当成玻璃圆柱,局部头发可以认为是直的。外层叫 cuticle 表皮,内层叫 cortex。头发内部有色素,光线穿进头发,在传播过程中会被部分吸收,再传出去。
如果人的头发是黑的,就是色素多。如果是金发,这种就是吸收少,光线直接出去了。
经过玻璃柱的时候会有光线的能量损失,产生颜色。
Marschner Model 考虑了三种和光线的作用,如上图右边。
综合考虑之后,能得到效果很好的模型。
notion image
我们之前计算的是光线与一根圆柱作用,那也只是和一根头发的作用。如果光线和多根头发作用,可想而知,光线会从一根头发进去出来再到第二根头发...这种就是多次散射。
💡
这也是为什么渲染头发很困难,因为计算量很大。
notion image
notion image

Human Hair vs Animal Fur

💡
人的头发能不能拿来描述动物的毛发? 渲染出来发现不对,得到的是下图左边的效果,而不是右边的。
  • Cannot represent diffusive and saturated appearance
notion image
notion image
头发中间是 Medulla(髓质),内部结构很复杂,会把光线打到四面八方。人和动物都有,但动物的髓质特别大,光线进去更容易发生散射。
下图渲染图可以看到逐渐增大髓质大小所影响的改变。
notion image
notion image
如果髓质占头发直径 15% 左右,效果也明显。

Double Cylinder Model

 
notion image
notion image
notion image

Granular Material 颗粒材质

notion image
一堆小东西形成的模型。
▪ Can we avoid explicit modeling of all granules?
  • Yes with procedural definition.
 
notion image
沙子堆成的城堡,每一个单元上都有不同的石子,并且各自成分是百分之多少,最后渲染出来。
⚠️
渲染非常耗时间,因此没有广泛应用。
notion image
notion image

Surface Models

notion image
Translucent(translucent 不能称为半透明材质,semi transparent 才是半透明)。这个光线在穿过材质的时候涉及吸收也设计散射,说明光线能从某个地方进入光线,再从另一个地方出一个表面。而不是只延一个方向传播并被吸收,它可以打到其他地方去。
notion image

Subsurface Scattering 次表面散射

Visual characteristics of many surfaces caused by light exiting at different points than it enters
  • Violates a fundamental assumption of the BRDF
notion image
 
光线从一个点进入表面,在内部发生大量反射之后,从另外一个点出表面。
notion image
notion image
为了描述这种方式,我们称之为次表面散射。可以看做是 BRDF 概念的一个延伸,因为 BRDF 是打到一个点,再在一个点出来,往不同方向去,作用都在一个点上。BSSRDF 则是一个点进来,可以从任意其他地方出去。
notion image

Scattering Functions

  • BSSRDF: generalization of BRDF; exitant radiance at one point due to incident differential irradiance at another point: 和 BRDF 一样,中间加了一个 sub surface scattering。xi wi 是从哪个点进来,哪个方向进来。xo wo 则是从哪个点出去,哪个方向出去。相当于 BRDF 的一个延伸。
  • Generalization of rendering equation: integrating over all points on the surface and all directions (!) 原本是对各个方向进行积分,现在不是了,而是考虑一个点,如果表面是次散射表面,我还要考虑其他方向点反射出来会不会贡献在这个点上,也就是说不能只考虑从各个方向进来的光,也要考虑从各个方向进到其他点的光。因此需要对方向积分,也要对面积积分。

Dipole Approximation [Jensen et al. 2001]

  • Approximate light diffusion by introducing two point sources.
手心按在手机闪光灯上,会发现闪光灯一片好像有往外走的光源。就好像是手心底下有光源在发光,这就是基本思想。
人们发现半透明介质就好像这个原理,一根光线打到物体底下,就好像物体底下有光源,会从底面照亮着色点周围的一片。为了物理上的真实,被推出来了一个光源不够,对应上方也要有一个光源,相当于两个光源。用两个光源照亮着色点这一块,就很像次表面散射得出来的结果。
notion image
notion image
notion image
notion image

BSSRDF: Application

notion image

Cloth

  • A collection of twisted fibers!
    • 布料是一系列缠绕的纤维组成的,但缠绕有不同的层级。
  • Two levels of twist
经过不同的缠绕,会形成不同的 Ply,Ply 再经过缠绕形成 Yarn 线。
有了线之后,被织成布。
notion image

Cloth: Render as Surface

和针织、纺织的方向有关,根据不同针织的图案,得出最后的样子。
notion image
 
notion image
但天鹅绒所有纤维都是往外一根一根的,不是一个平面,不能用 BRDF 来表示。

Cloth: Render as Participating Media

  • Properties of individual fibers & their distribution -> scattering parameters
    • 更准确的做法,是把织物认为是空间中分布的体积,这样就能划分成超级细小的格子。比如下图左边的围巾。每个格子大概知道它们的朝向分布、复杂程度。可以把这些性质转化成光线的吸收和散射,就很像渲染云一样。
  • Render as a participating medium
notion image

Cloth: Render as Actual Fibers

另一种方法,我们知道纤维是怎么缠绕的,就可以将每一根纤维都显然出来。
  • Render every fiber explicitly!
notion image
💡
上面三种方法都有人用,考虑到不同应用场合,需要多花时间。

Detailed Appearance

notion image
看现今渲染器的结果不太真实,是因为很多情况下,结果过于完美,没有划痕。

Real world is more complicated

notion image
真实世界,车子高光附近能看到金属网结构的划痕,划痕发生在空气中各种的灰尘颗粒、车外层的清漆。鼠标的高光也有小的凸起构成。真实世界是不完美的。
notion image
notion image
notion image

Recap: Microfacet BRDF

notion image
微表面模型最重要的是微表面的法线分布,但描述分布用的是很简单的模型:例如正态分布、高斯。我们用这种分布去描述法线的分布,自然得到的是看上去没什么细节的结果。因为法线分布没有什么变化。
notion image
我们需要的法线分布,基本符合统计规律,又有自带的细节。都考虑进去就有比较好的结果。
notion image
大的高光由很多个高光形成,需要很大的法线贴图。
不同的法线模型(车子喷漆中加亮片,亮片很小但会形成不同方向,就有不同的反光)
notion image
⚠️
虽然我们可以定义不同的细节,但是渲染出来十分困难。 下图右边是两小时的结果,渲染完成大概需要一个月。
notion image
💡
困难在我们认为微表面是一个镜面。
从摄像机打一根光源过去,打到表面,知道法线,知道镜面反射方向,很难通过反射的方式让光线打到光源上去。
notion image

Solution: BRDF over a pixel

考虑一个像素会覆盖很多微表面,如果能把一个范围的微表面上的法线分布算出来,就能替代原本光滑的分布,并且用在微表面的模型里。
notion image

p-NDFs have sharp features

如果考虑一个像素覆盖了多大的范围,会得到各种神奇的法线分布 NDF。
如果一个像素覆盖了非常多的微表面,那么这些微表面就会显示出统计学的规律,例如右下挺圆的,像高斯分布。
如果覆盖范围小,就会显示出独特的性质,法线分布看上去就很有特点。
notion image

p-NDF shapes

notion image
不同类型的法线贴图,会引起不同的法线分布。例如左边右上刷过的,就能得到一系列各向异性的分布。左边坐下离散的亮片,每个亮片都是离散的法线,就会得到很多离散的点。
杯身像橘子皮,头像磨过的。宏观的东西一定由微观的东西构成。
notion image
 
微观和宏观是相对的。如果我们远处看一个海面,我们可以考虑海面的波纹,每一帧用不同的细节,表现出波光粼粼的效果。
notion image
 
notion image

Recent Trend: Wave Optics

💡
细节就这样解决了吗?不对。当我们引入细节的时候,我们还用几何光学来解释就不对。物理上说当物体非常小,和光的波长相当的时候,就不能再假设光线的传播是沿着直线传播,就必须假设光是波,这样就涉及到衍射、干涉的现象发生。
notion image
notion image
假如人在小黑屋中,只能用一个点光源,用手机的光照亮金属片,会发现金属片原本是一个颜色,却在上面看到不同的颜色。拍一张图,放大,会看到各种颜色的点。
用一个白色的光照射一个物体,反射出的就应该是白的。如果不是白的,就一定有波动光学发生。
notion image

Detailed Material under Wave Optics

波动光学的公式很复杂,在复数域上做各种积分...
notion image
波动光学得出的 BRDF,和几何光学得出的 BRDF 挺像的。但又有自己的特点,不连续。光会干涉,干涉会引起有些地方加强,有些地方减弱。
notion image
拿去渲染,用波动光学渲染,会发现没有什么表面是白的。
notion image
 
notion image

Procedural Appearance 程序化生成的表面

💡
程序化生成:用一定的方式去生成,而不是真的去生成,我可以动态地去查询它。
  • Can we define details without textures?
    • Yes! Compute a noise function on the fly.
notion image
notion image
我可以定义三维的纹理,纹理在三维情况下存储量会马上上来。因此我们不存,什么时候要用,什么时候就去查。这种查的函数就叫 Noise 噪声函数。这些函数能提供一些很神奇的 Noise,例如像木头纹理的 Noise。Noise 函数定义在空间中,如果我们把木头砍两半,可以看到切面上长什么样,二维纹理就不行。
💡
Procedural:随用随取。不生成,要用的时候再找。
例如游戏车上的锈可以这么生成。
notion image
notion image
notion image
notion image
Autodesk 可以生成三维的木头,并且不用生成,可以直接去查询木头中间任何一个部分,任意切割都可以得到内部的东西。
能够把真实的物理的东西,把程序化生成结合一块,得到非常真实的结果。
notion image