【GAMES101】Lecture 18 高级外观建模

外观就是材质,就是BRDF,然后对于不同的模型,这个材质的计算不太一样

目录

非表面模型

参与介质

头发

皮毛-动物毛发

颗粒材质(Granular material)

表面模型

半透明材质(Translucent material) BSSRDF

布料

Detailed material (non-statistical BRDF)

过程中程序生成外观(Procedural appearance)


非表面模型

参与介质

参与介质或者说散射介质,是指光线穿过这个介质时会被吸收和被散射,像这个云、雾、烟……

【GAMES101】Lecture 18 高级外观建模_第1张图片

用一个函数,Phase Function,这个相位函数来描述参与介质散射光的性质,是往后集中散射、往前集中散射还是各向同性散射

【GAMES101】Lecture 18 高级外观建模_第2张图片

 这个光线在参与介质里面走得越远就说明参与介质吸收光线的能力越强,怎么来渲染呢,还是用光线追踪的方法,让光线在里面弹射,然后相连各个弹射点,计算总路径的贡献

【GAMES101】Lecture 18 高级外观建模_第3张图片

头发

 Kajiya-Kay模型把头发当作一个圆柱体,然后光线照射到头发上会形成这么一个圆锥形的散射

【GAMES101】Lecture 18 高级外观建模_第4张图片

但是Kajiya-Kay模型的效果不是特别好

然后是Marschner模型,将散射的光线分成三种,R光线是一次反射,TT光线是从一个表面折射进去然后从另一个表面折射出来,TRT光线是先折射进去,在头发内部反射一次后折射出来

【GAMES101】Lecture 18 高级外观建模_第5张图片

这个Marschner模型把头发当成玻璃的圆柱体,分成角质层(cuticle)和皮层(cortex),皮层含有色素会吸收光线,考虑三种光线和这个圆柱体的作用

【GAMES101】Lecture 18 高级外观建模_第6张图片

效果很好

皮毛-动物毛发

这个动物的毛发如果直接用人的头发模型来做的话是左图的效果,右图是用动物皮毛模型的,这也是闫神做的模型(太厉害了)

【GAMES101】Lecture 18 高级外观建模_第7张图片

结构决定性质,这肯定是因为动物的皮毛和我们的头发结构不一样所导致的,大家都有这个外面的角质层,里面吸收光的皮层,还有中间散射光的髓质,不一样的是我们人类的髓质比较小,而动物的髓质比较大

【GAMES101】Lecture 18 高级外观建模_第8张图片

这个髓质大的话,毛发透光会更多

 于是就有人(闫神)就提出了这个双层的圆柱模型,加入了髓质部分

【GAMES101】Lecture 18 高级外观建模_第9张图片

光线在原来的R、TT、TRT的基础上增加了散射穿过的TTS和散射反射出来的TRTS

【GAMES101】Lecture 18 高级外观建模_第10张图片

效果是这样的

颗粒材质(Granular material)

有一些物体它是这个颗粒状的,这个计算量就非常大

但是可以做一些简化,比如把这个物体分成一些小单元,然后根据这个单元里面包含的颗粒材质的比例来计算整体

【GAMES101】Lecture 18 高级外观建模_第11张图片

表面模型

半透明材质(Translucent material) BSSRDF

这个半透明材质指的是光线从物体表面某个点进去但是经过里面的反射后从物体表面另外的点射出来的材质,叫做次表面散射(Subsurface Scattering),像这个玉石、水母、牛奶,就是光照过去就会晶莹剔透的感觉,

【GAMES101】Lecture 18 高级外观建模_第12张图片

这个性质可以在之前的BRDF上拓展成BSSRDF,这个SS指的是Subsurface Scattering,之前的BRDF只反映的从哪个方向来往哪个方向去,这里还需要加上从哪个点来往哪个点去

相应的渲染方程也要进行修改,因为从这个点冒出来的光不知道是来着哪个点的,所以还需要对所有的方向和面积进行积分

【GAMES101】Lecture 18 高级外观建模_第13张图片

次表面散射的效果很像有一个光源在物体内部发光的效果,然后为了物理上的真实,人们推出只有底下这么个光源不够,还得有上面对称的一个光源,然后用这两个光源渲染的效果就很像次表面散射的效果,这个方法就叫Dipole Approximation

【GAMES101】Lecture 18 高级外观建模_第14张图片 然后人的皮肤也是类似的这样的透光材质,就可以用这个BSSRDF生成虚拟人物,非常逼真

布料

先来说一下这个布料的结构,由纤维缠绕成股,就是这个Ply,然后由股缠绕成线,就这个Yarn

 有了线之后就可以通过编织得到布料

对于这个布料有三种渲染方式

一个是根据这个布料的编织方式去定义好一个BRDF,当成表面来渲染

【GAMES101】Lecture 18 高级外观建模_第15张图片

但是当成表面来渲染对于那些表面本身不像平面的布料像天鹅绒就不太好,所以有这种把它当成参与介质,把布料当成体积进行渲染,用很多细细块去切分纤维,根据里面纤维的分布和朝向计算整个块的性质,当成参与介质,像这个云烟雾来渲染

最后一种方法就是直接渲染每根纤维,暴力解决

Detailed material (non-statistical BRDF)

我们渲染出来的东西太完美了看起来反而不真实

因为在真实的世界中东西本身是不完美的,或许因为做工或许是因为磨损或许是因为完美本身就不存在

用这个微表面模型来说,最重要的是这个描述法线分布的D,之前用的都是简单的分布,像这个正太分布,都是连续函数

【GAMES101】Lecture 18 高级外观建模_第16张图片

但是在真实世界中的样本分布它总是不连续的,会有很多的这种噪声存在,这才是真实的世界

【GAMES101】Lecture 18 高级外观建模_第17张图片但是这个渲染起来很难,为什么难呢,微表面模型中我们把每个微小表面都当成镜面反射,从摄像机打出光线到微表面上再反射出去,但是很难碰到光源

【GAMES101】Lecture 18 高级外观建模_第18张图片

那怎么办呢,我就从一个像素出发把它覆盖到的一片微表面区域去计算出统一的一个法线出来再计算,唉但是这个解决办法和我刚刚遇到的打不到光源的问题有什么关系,好像没解决啊?闫神怎么不多解释一下T_T

【GAMES101】Lecture 18 高级外观建模_第19张图片

由于这个光具有波粒二象性,当光遇到的物体尺寸大小和光的波长接近的时候就会发生波的现象,因此这个波动性也需要考虑

【GAMES101】Lecture 18 高级外观建模_第20张图片

过程中程序生成外观(Procedural appearance)

这个和之前学的纹理应用中的程序纹理差不多,就是我不用事先存储整个物体的材质,而是要用的时候去动态查询,通过一个噪声函数,传入物体三维的位置得到一个值来用

你可能感兴趣的:(GAMES101,图形渲染,games101,现代计算机图形学入门)