唔姆,趁着这个刚没写完多久,先来记录一下。

之前的火焰和晶体都过得有点久了,很多当时卡住的点都有点忘了。

不如先写最近的。

总之,玻璃质感,如下

一如既往,先分析一下组成部分——包括反射,折射,以及贴花的效果。

比想象中简单很多,这一章就讲得明了一点。

Combined

按传统地,从最后的组合,大致可以知道我们要去获得哪些信息。

最上部分,是整个效果反射的实现过程。用matcap_uv3采样了一张matcap贴图

左下角一大块用来实现折射的效果,折射效果又涉及到玻璃厚度的影响,这个我们后面具体展开来讲。

最后就是贴花,在反射和折射的基础上,加上Decal的颜色,再在总的Opacity加上这部分的不透明度,就可以实现了贴花部分不透明的效果了。

那么,除此以外,我们需要自己手动编写的几个组件,就只剩下了负责采样的Matcap_UV,以及玻璃的厚度Thick。

Matcap_UV

这里主要介绍常规的几种方法。

第一种是最常见的将世界空间下的normal转换到观察空间,再取其xy分量,映射到(0,1)范围内,即可。

这种方法已经能够初步地实现采样图像随着视线方向移动了。但在面较少,比较粗糙的模型上,效果会出现很强的拉伸感。

原因是因为相近的面之间法线的差距太小了,导致采样到的颜色会分布的比较接近。如果把这个效果放到立方体上的话,就会出现每面只有一个颜色的感觉了。

第二种,较之前有所改进,虽然已经看不太懂了。左下角不变,左上角引入了观察空间的顶点位置,注意要Normalize!!!,之后两者去做个叉乘,得到的向量,如此这般,一番操作即可。

第三种,更是极品,我已经放弃理解了。

采用world reflection来做为基础,转换到观察空间后,又是这样那样,就可以了,应季也不是不行,大概就是取xy分量,再除以个模长类似的东西,大概就是下面这个sqrt(x^2+y^2+(z+0.5)^2)*2。总之就出来了。需要深入理解的时候应该不会出现吧。

Thickness

接着,就是这一章最后的thickness了,得到thickness,就可以对refract tex做扰动,得到想要的折射效果了。

上半部分是熟悉的边缘光部分,也可以说是菲涅尔啦。这里可以帮我们得到被子两边的的厚度。

中间我们加了张DirtMask,用来模拟指纹和一些水渍。这里效果挺好的,但应该还能改进一下,毕竟感觉指纹水渍的不透明感太强了。

左下角就是针对杯底和杯口的厚度去采样的一张厚度图,感觉做多了,越发能理解贴图不过是一种信息的承载形式,和我们理解的图片已经不是一个东西啦。

至于采样的坐标,我们这里使用的是世界空间下的较锚点的偏移值来实现,这里加入了ObjectPivotOffset来调整,万一有些物体的原点不在底部。

后面除以ObjectHeight来将用于采样的y转到(0,1)范围。

这种作法,只适用于物体正立的情况,毕竟厚度贴图是类似ramp的那么个玩意,如果真要实现更好的效果,只能在建模阶段,根据y方向展出第二套uv。然后直接用第二套uv采样就好了。

那么玻璃材质的讲解就到此为止。

希望后面几天把前面没写的给好好补上。

忘性太大了,不记下来,过一会儿,就跟没学过一样了。

您必须 登录 才能发表评论