柔和材质SoftShader (Maya节点)

来源:互联网 发布:在线生成数据统计图表 编辑:程序博客网 时间:2024/04/30 09:46


看料理鼠王的动作预览时,感觉他们的画面很柔和,没有死黑,暗部细节很自然,不像环境光那样平,而且光源很统一,没有错乱的明暗交界线,下午,实现了一下,3delight的shaderdl出了点问题不能编译rsl了,于是继续用Maya节点搞定...



原理

原理很简单,简单说下吧,说多了有被众神笑话的危险。

普通的Lambert是根据Shader表面法线和光线的点积计算亮度,结果小于0时截取到0,

C=clamp(0,1,(L dot N))

所谓的SoftShader就是以能显示更多的细节为目的,以失去写实度为代价,稍微改进了下,将点积的结果[-1,1]转换到了[0,1],这样原本小于0被截取的细节重新归一化后就成为了0~0.5之间的值,而原本0~1的亮部压缩到了0.5~1.

C=(L dot N)*.5+.5


实现

以下是Maya的实现节点网络:



说明

主要路线为灯光方向向量和法线向量点乘,输入到ramp的v坐标,从而调节ramp的亮度分布可以任意调节shader的颜色。

黄色区域使用相机的矩阵把camera space的法线转化为world space。

蓝色区域为取得灯光的阴影,调节亮度后输入到ramp的color gain来形成阴影。

里面一个locator,受灯光旋转约束,用来取得方向向量。


对比


左为默认lambert,暗部死黑

中为普通lambert,调亮ambient,虽然暗部变亮,但毫无细节

右为软软的SoftShader,很好的利用了0~1的范围


加Bump后更明显:



同样是一盏灯,只有右图的暗部能看到细节。


测试






上图开启阴影,Maya Software渲染,高抗锯齿,时间七八秒,场景只有1平行光,但效果不错,有点全局光的味道。

原创粉丝点击