炫酷特效来袭!车辆动态换漆
来源: | 作者:王蕾 | 发布时间: 2019-07-05 | 787 次浏览 | 分享到:
今天,小编给大家带来的是如何使用Kanzi工具中的shader特效实现车辆换漆。开始之前先来欣赏一段小视频。
从以上视频可以看出,车辆换漆是从车身的不同区域开始,随机向四周扩散,直至后一种颜色的车漆完全覆盖掉前一种颜色为止。其原理为——通过对噪声纹理上某个颜色值采样,把采样的结果和控制换漆的阈值进行比较,如果小于该阈值,则使用第一种颜色的漆,否则采用第二种颜色的漆。
为了实现车辆换漆,我们需要用到以下核心代码:



注释:
1、BurnSpeed为换漆速度,通过余弦函数的转换,使噪声纹理的r值周期性的变化,以实现周期性动态换漆效果;
2、Diffuse1和Diffuse2为所换两种漆的颜色;
3、BurnMap为噪声纹理,本效果采用如下噪声纹理:



此外,为高保真模拟车辆在环境及光照中的效果,增强真实感,可在该效果中添加了相应的基本色、高光反射、环境纹理以及菲涅尔反射。
1)基本色实现代码如下:



2)高光反射:
以方向光为例进行高光反射的介绍。本例中采用了Blinn镜面高光反射,它可使物体受到的光照更加真实,且光照的高光效果会随观察的角度变化而变化。其计算原理为:在不使用反射向量下,应用半角向量来计算高光效果,而半角向量只需根据观察方向和光线方向就可计算,这样就不需要用到观察方向和反射方向的夹角了,详见下图Blinn模型原理:



通过以下代码可实现上述原理:


(PS:向量的点积越大,说明两者的夹角越小,代表物体离光照的轴线越近,因而光照也越强。)

3)环境纹理。实现代码如下:




4)菲涅尔反射。需要使用的公式如下:



菲涅尔反射是指当光线照射到物体时,一些光线会发生反射,一些则进入物体内部后发生折射或散射的光学现象。在使用上述公式时,可根据视线到点的方向计算出光对各点的反射强度。好比在看水面的时候,看近处能看见水底,看远处则由于强烈反射只能看到水面及反射光。
通过上述的效果叠加就可以得到逼真的车辆换漆效果了,有兴趣的小伙伴可以动手试试哦!

相关文章