下面给出节点网。
点击放大
这个节点网的关键就是要详细理解这个节点:lightInfo。
打开节点属性,仅有一个选项:Light Direction Only。
[page]
这个节点平时使用的并不是很多,它的作用是提供灯光信息,以及提供灯光相对于纹理的位置信息。但如果将其它物体(如A物体)的World Matrix与该节点的World Matrix连接,则可以返回物体(如A物体)与有lightInfo节点的材质的物体上的点的距离。
例如将上面的节点网的lambert1赋予物体B,然后将物体A的World Matrix与上面节点网中的lightInfo节点的World Matrix相连,那么将会得到物体A(中心)到物体B上每个点的距离。
而当Light Direction Only被勾选时,则只会返回物体A到物体B上每个点的垂线距离。
下面这张图就是这个材质的关键,也就是这个节点网的根。
上图中的那个Locator是怎么来的先不用管,等一下会介绍,先讲一下那两个lightInfo节点,上面那个勾选了Light Direction Only,那么它得到的信息就是物体到点的距离垂线,下面那个没有勾选,那么得到的就是距离。
然后再将这两个信息相除:距离垂线/距离=cos夹角。为什么要这么做呢,大家可以想一下,所谓3S,也就是次表面反射,那么也就是越到边缘越薄的地方通透感越强,而这种通透感并不是线形递减的,是一种非常微秒而柔和过渡,那么在这里我用一个cos波形曲线来模拟。
但这样出来的效果并不是十分满意,还需要进行调整,所以在后面在加一个平方节点和一个乘法节点(其实是同一个节点,只是选项不同),修改里面的数值可以调整材质效果。
再连接一个节点网作为材质的颜色,并与刚刚得到的信息进行相乘。
[page]
将得到的信息连接到材质球的color后,再把这个信息进行一系列的处理,再连接到物体的ambientColor(环境光),最终得到想要的结果。
下面讲一下locator
这个locator非常重要,大家仔细想一下就可以知道,要完成以上的节点必须要一个永远处在摄像机与物体连线上的locator,如果不是这样,而是一个固定的locator,那么物体也不会随着摄像机的变化而改变通透感,我们需要的是随着摄像机的变化,物体上的微妙的通透感也随着变化。
这个纯粹是通过数学计算得到的,如果数学不好的话,我一下也讲不清楚,所以大家可以看看节点网,之后再看看源文件,应该很容易明白。
另外这里用到了一个功能节点distanceBtween,它的作用是计算两个物体间的距离。
另外我还在其中一个节点(surfaceShader4)中添加了几个属性来更方便的控制,例如其中的Sss_ds就是控制locator与物体间的距离的。