【GAMES202】Real-Time Physically-Based Materials (surface models)2—实时基于物理的材质(表面模型)2

一、Linearly Transformed Cosines(LTC)

LTC方法,中文直译—线性变换余弦,主要是为了解决多边形光源下的微表面模型着色问题,并且它没有考虑Shadows想想如果我们不知道LTC之前是如何进行计算的,自然就是进行采样了。但LTC方法可以让我们避免采样来计算着色。

1.Idea

关于LTC,详细可以看这篇文章,这里我们只是简单介绍一下。实时渲染|Linearly Transformed Cosines:多边形光源中的应用 - 知乎 (zhihu.com)

这里我们只简单介绍一下,首先我们知道BRDF是一个4维的函数,而如果给定了入射方向的2维,则它会变成一个二维函数,可视化在图中呈现的是一个lobe,也就是波瓣,它对应某种分布。LTC的思路就是找到一种变换,使得从不同入射方向形成的对不同方向的lobe都可以变成一种余弦形式的分布,同时原来的光源也跟着变换也会变成一个新的面积光源。简单地说,我们通过一种变换把任意BRDF的lobe都变换成了固定的cos项,而多边形光源经过相同的变换最终不会影响计算结果,并且这种方法可以得到解析解

如上图所示,任何BRDF的lobe都可以经过变换变成cos的lobe,同时可以逆变换。

并且,由于BRDF的lobe彻底变成了cos的lobe,自然原本BRDF的所有方向都要跟着变换。并且原本多边形光源覆盖的所有方向也要变化,也就是积分域发生了变化。

2.Approach

再说公式之前我们这里先假设,多边形光源各处强度是均匀的,也就是Li都是一样的,这样我们就可以把Li拿到积分外面,如上图。其次我们把BRDF和cos项写在一块,记作F项。我们要做的就是通过M变换,把F变成cos的形状。至于为什么要在下面做归一化是因为,这些方向因为非线性变换可能会导致自身长度改变,所以要做归一化。

所有的事情基本就是做了一个变量替换,方向替换成新的方向,F替换成cos,然后把dω'单独拿出来,这样才方便求积分,其余项记作J

至于怎么计算M变换,闫令琪老师在这里说的是优化方法,本人理解应该就是给个初始值然后慢慢优化迭代,求最优。同时LTC要求预计算,对于BRDF不同入射方向产生的不同lobe都要预计算,最终形成一个矩阵,使用的时候查就可以了。

3.Result&Cons

可以看到,LTC处理多边形光源着色的效果还是很不错的。

当然我们之前提到过,LTC并没有处理Shadow问题,假如把面光源遮一般半就吃不消了。并且LTC不适合处理光源各处强度不均匀的情况。

二、Disney’s Principled BRDF

接下来我们来介绍迪士尼原则的BRDF,我们前面说过的微表面模型可以表示绝大部分材质,表示能力很强,但它也有缺点。

首先,它很难表示现实世界中真实的材质,在现实里测得的BRDF很难通过去调整它的参数来适配。其次它无法表示多层材质,如刷了清漆的木头桌子。还有,它的物理参数对于艺术家来说晦涩难懂,很不好用。

综上,我们需要一个artist friendly的材质,于是自然就诞生了Disney’s Principled BRDF。因此,Disney’s Principled BRDF不再是严格的physically correct,而是art directable。但是在实时渲染中,我们仍然认为,Disney’s Principled BRDF是PBR,因为实时渲染本身为了加速就做了许多近似。

1.Principles

- 为了看起来直观,不应该采用物理的参数,而是一些直接易懂的参数。

- 用越少数量的参数越好

- 参数值的范围区间为0~1

- 如果有必要,可以把参数调到0~1范围外的值

- 所有参数的不同组成搭配得到的结果看起来效果应该都正常合理。

2.Parameter

上图为Disney’s Principled BRDF单独一种参数调整的结果表示图,而它能表达的效果当然远不止图中这些,任何参数的不同组合都能得到不同的效果。

关于上图的参数,我们很容易知道前6项参数的表示效果,这里我们介绍一下后四个参数。

sheen参数,它是一种类似天鹅绒的效果,天鹅绒的材质就像沿着表面法线生长的一根一根的竖着的羽毛一样,而这样带来的结果是我们以Grazing angle观察表面的时候会有一种“雾化”的效果,sheen参数描述的就是这种效果。自然sheenTint就是材质的雾化效果更偏向白色还是更偏向材质定义的基础色。

clearcoat就是我们提到的清漆效果,就像糖衣一样。而clearcoatGloss定义的就是这层清漆的光滑程度。

3.Pros and Cons

• 简单易懂,方便控制。并且可以表示很多不同的材质。

• 实现非常复杂,而且不是严格的基于物理

• 巨大的参数空间,会导致冗余现象

三、Non-Photorealistic Rendering (NPR)

1.Photorealistic Rendering

在介绍非真实感渲染之前,我们先来说真实感渲染,Photorealistic,顾名思义,照片级真实感就是让我们分不清楚照片和渲染结果,我们需要正确的光照材质几何等等。

2.Applications of Non-Photorealistic Rendering

NPR的目的是营造艺术效果和风格化

NPR的流程通常是先得到真实感渲染的结果,然后在此基础上进行一些修改,以达到非真实感以及艺术感风格化的一种效果,做何种改变来达到想要的效果通常是人们研究的东西。

NPR可以应用在艺术,可视化,工业图纸说明书,教育,娱乐等方方面面。

 

3.Styles

想要实现NPR效果,我们得总结一下它们的特点,而这些特点并不是符合现实世界中的,所有我们做任何一种效果都需要进行分析如何实现,以下介绍几种常见的NPR特点的实现形式。 

(1)Outline

我们所说的描边Outline指的并不是广义上物体的边,那么我们如何定义这种描边呢?上图用一个盒子作为例子提供了一种区分方法,如图所示。[B]oundary / border edge简写做B。其次[C]rease,代表折痕,也就是图示两个面的交界处,而[M]aterial edge自然就是材质的边界。而[S]ilhouette edge表示属于外廓的折痕,也就是图中的CS,它在图像上反应的是不同物体的分界,而在三维空间中反应不同面的交界。

描边有三种不同的做法,包括Shading,几何,后处理。

• Shading normal contour edges

通过Shading做Outline的方法和我们前面提到的[S]ilhouette edge有关,我们说过S边缘表示的是面的交界处并且两边表示不同物体。

这里用到了一个很聪明的观察,我们发现和我们视角方向垂直的法线所属的这些点正好就在我们上面提到的S边缘上,很容易想,我们看到的二维图像中物体的边界自然就是实际面片的交界处,所以对这些点进行描边是很正确的。只需要在着色时做判断就可以,我们不仅仅可以设定的是Grazing angle,还可以设定其它的角度阈值来进行描边以达到不同的效果。

当然这种方法也有问题,因为模型自身的几何特性可能会导致不同地方的描边粗细不一样,而这是无法控制的。

• Backface fattening

Backface fattening属于几何上的做法,它的基本思路是这样的,我们对已经渲染了的模型在它后面渲染一个更大的纯色的黑色的模型,自然就实现了描边的效果。当然,思路是这样,但是有许多更聪明的做法,比如,我们通过法线是可以区分模型的背面和正面的,那么对于背面我们可以对它单独扩大一圈渲染,然后指定为黑色,这样就避免了渲染两个模型。

• Edge detection in images

图像空间上的做法自然就是后期处理了,先得到无描边效果的图片,然后把它们的边缘找出来进行描边。数字图像处理上常用一种叫Sobel detector方法来找到边缘。它主要是采用了两个不同朝向的滤波,一个水平,一个竖直。我们以竖直的为例如上图第一个加权模板,显然如果对于两边颜色一样的区域,左正右负的模板会把他们合成为0,那也就不会有什么变化,而如果两边一黑一白,例如图中的砖头的缝隙,那么左白乘以正数,右黑乘以负数,它们的差距会被放大,这时候写回图像原本的值就会被变大,通过这种方法,我们也就能找出图像中的边界了。

并且,实际上我们并不是仅仅可以在最后的渲染图上去做处理,我们在图像空间中拿到的法线,深度等信息可以帮助我们更好的去做后处理来进行描边,这里就不做赘述了。

(2)Color blocks

除了描边,我们还注意到NPR中有一个特点就是色块化,真实世界中的光照有一种渐变,而NPR中则没有,转而使用大量不同的色块去强调。

这种强调让我们自然而然的想到可以用我们之前提到过的阈值化来处理,简单的说,以上图的球为例,如果某一个点的光照强度超过了某一个值,我们指定渲染一个颜色,否则渲染另外一个颜色。并且我们也有Shading和图像上的不同做法来达到Color blocks的效果。

同时,我们阈值化并不单单是二值化,而是可与量化—Quantization,也就是多值化,在不同的区间指定不同的值,如上图所示。

其次,这种不同的效果,如描边,色块这种效果是可以自由不同组合的,如上图所示。 

(3)Strokes Surface Stylization

我们上面说了两种通用的NPR特点的渲染实现方法,我们现在提供一种具体的风格来分析实现它的方法,也就是上图所示的素描风格的NPR。

首先我们自然要知道的就是,什么是素描。简单地说,就是打很多的格子,用格子的密度来表现明暗的变化。所以我们要想的自然就是如何在渲染的时候把不同点的明暗转变成格子的密度,以及这些格子密度变化的时候做出连续的感觉。于是我们想到了纹理。

我们事先定义好格子密度不同的纹理,渲染时根据着色点的明暗去不同密度的纹理上去查询就可以了。而由于纹理也是定义在物体表面上的,我们在物体上两个相近的点去查询的时候也会对应纹理上比较近的点,而如果有过度就在不同密度的纹理的相近位置查询,这样就保证了连续性。

 其次,我们还要考虑,无论物体离我们多远多近,格子的密度都不应该随着距离增改变,而只取决于着色点的明暗。而实际渲染中,由于远处物体UV的缩小,远处物体的纹理密度自然会减小,我们是不希望看到的。所以我们会对不同的纹理做一个Mipmap,而且这个Mipmap是不改变纹理的密度的,这样不管离多远我们得到的密度就都相同了。

 

4.Some Notes 

总结一下,NPR就是一个art driven问题,中途的关键是一个“翻译”的过程,也就是某种效果的实现需要通过操作哪些量得到。有时候,为了实现风格化,不同场景,不同角色,甚至不同角色的不同部位都需要不同的处理方法,才能达到整个项目的风格统一,因为有时候很难有一种通用的操作能让所有模型都做到风格统一。

其次,非真实感渲染做的好不好其实一定程度上取决于真实感渲染做的好不好。就算是非真实感渲染我们也希望它能一定程度上还原真实感渲染上的东西,所以研究一个真实感的模型对于NPR来说是非常重要的,而不是一上来就去考虑如何风格化。典型的例子就是布料,如果我们没有一个真实感的布料渲染模型,直接去进行风格化就很难。


参考 

GAMES202_Lecture_11 (ucsb.edu)

Lecture11 Real-Time Physically-based Materials (surface models cont.)_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值