前几天复盘了一下Guru大神制作Donut的教程,一边感慨大神教程把每个模块都摸了一遍实在是精心设计,另一方面也有些遗憾,比如渲染器设置和材质的精细调节都没有点,其中最“难受”的是玻璃杯的材质部分。
这个是PrincipleBSDF调出的玻璃材质后Cycles直出的结果,虽然透明参数已经开到了最大,仍然可以看出玻璃内部反射有些“闷”,看样子是没有给焦散了。
查了一下Cycles因为是用的蒙特卡洛单向路径追踪,想做出焦散非常难。在这方面,得益于Metropolis采样算法,Luxcore的双向路径追踪渲染器能获得比较好的效果。well, that make sense...
BUT!
换来换去太麻烦了,材质球又得重新调,这可麻烦大了。有么办法能偷一下吗亲? 有!!
整体思路:
Glass材质本体 + 人工状态的阴影 , 用shadow作为mask,合并两种材质
1.几何体本身依然使用glass材质;
2.计算透射光的影响并人为更改,求得人工焦散阴影;
3.通过Light Path合并1中的几何体和2中的焦散阴影;
先上材质球。
左侧是用着色点的法向和视线的方向做的点乘,两个矢量点乘获得一个标量,这个标量就是光线入射强度。
着色点法向 ON, 视线方向OA ,光源光线方向OB,一个简单的光线追踪模型。因为入射角和反射角关于法线对称,所以透射强度既可以用光线和法向点乘,也可以用视线和法向点乘。
视线方向OA对应几何体节点的incoming,所以用OA和Normal 在Vector math里做一个dot product。得到了透射强度,重新remap一下,这里一定要根据实际情况调节ramp(虽然是假的但也要装得认真一点)。
Glass材质本体没什么好说的,Light Path的作用是为Mix Shader添加mask。
撸个图康康!
最终对比,玻璃的折射细节更丰富,焦散也没有那么尴尬了。
话是这么说,不过距离真正的焦散解算还是差了很多,喝杯水睡了。
Cheers!