前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Material小结 2.0

Material小结 2.0

作者头像
Peter Lu
发布2020-12-17 17:08:19
4670
发布2020-12-17 17:08:19
举报
文章被收录于专栏:LETLET

刚刚看了‘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仅支持发光材质。

另外,个人理解,尽管一个材质系统是多层的,每层都是一个独立的材质,当我们会把多层看作成一个综合后的材质,比如一个材质有两层,分别对应两个BRDFs,记为

,当我们进行叠加操作时,每层都有自己的权重

,然后做一次normalization,这样就可以得到整体材质的计算公式,而不需要考虑层之间的光线折射反射效果,这里,图层间不同的叠加方式会有不同 权重计算公式:

同时,真实世界中,不同材质在叠加时,自身的属性也可能会变化,比如水泥,干水泥较为明亮或中度灰,而湿水泥则变暗,这里会有一个accumulation techniques,在叠加材质时可以更改折射率,粗糙度等属性。

以人体皮肤的例子,我们通过图层叠加的方式,来模拟大千世界各类复杂材质。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LET 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Layer-based material system
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档