接上文Material小结
刚刚看了‘Path Tracing in Production’,里面提到了Weta digital的Manuka材质系统,在这里总结一下,算是对之前Material小结的一个补充。
之前主要是讲BRDF,现实中不仅包括reflectance,也包括transmittance,因此,除了BRDF外,还需要BTDF,而BS(cattering)DF也是BRDF+BTDF的合集。
Layer-based material system
基于Manuka material system,来介绍这个分层材质系统。用户可以任何组合多个BSDF构成一个材质堆栈(material stack),真实世界的材质大都也是如此,比如下面是对树叶这个材质的分层解读,这里包括譬如角质层,叶肉,表层蜡质等,都有不同的材质表现和反射属性。
Manuka对BSDF进行了归类:BRDF只反射,BTDF只折射,BSDF既反射又折射(半球面),BCSDF(我不清楚这个,大概针对毛发这类材质)。在设计时,所有BSDF都有一个相同的接口,除了要实现Sample,Eval和PDF这些基本方法外,还会提供一些材质特殊的信息,比如平均方向,折射率,粗糙度等
Manuka采用的是一种shade-before-hit策略,通常,我们都是在intersection后获取交点对应物体的材质属性,这一切在Manuka中已经预处理了,好处是支持很多复杂的视觉效果,但缺点是占用大量的内存,因此,压缩是一个很关键的技术,通常,会用8bit来存储颜色,而粗糙度等属性则会用16bit。
材质系统的图层叠加(layering operation)有两种方式:水平和垂直,具体包括Mix,Coat,Blend和Add,其中Mix和Blend属于horizontal,而coating和add属于vertical。个人理解Blend是Mix针对只有两层材质的特殊形式给出的优化,相比blend,add仅支持发光材质。
同时,真实世界中,不同材质在叠加时,自身的属性也可能会变化,比如水泥,干水泥较为明亮或中度灰,而湿水泥则变暗,这里会有一个accumulation techniques,在叠加材质时可以更改折射率,粗糙度等属性。
以人体皮肤的例子,我们通过图层叠加的方式,来模拟大千世界各类复杂材质。
作者:Peter6
原文链接:https://mp.weixin.qq.com/s/jt1S1\_cQvGMlhYaYbrLa8A
微信公众号:
推荐阅读
更多GPU及渲染技术干货请关注Arm Mali GPU技术专栏。