本章目标:

  • 学习史莱姆粘液怪的制作思路,进一步掌握UnityShader

  • 使UnityShader案例丰富实战经验

配置环境:


史莱姆(粘液怪)案例制作

1. 技术实现

1.1 粘液质感

  1. 使用MatCap技术实现粘液和果冻的质感粘液质感

  2. 使用边缘光效果实现果冻边缘亮起和透光的效果边缘光效果

1.2 液体流动(质感)

使用MatCap技术实现视觉上的液体流动的效果,使用法线扰动的方法。液体流动(质感)

1.3 粘液运动(形变)

使用顶点动画的方式实现流动的效果

2. 遇见的问题以及解决方案

2.1 三平面映射替代贴图UV的方法_组合节点(Triplanar Sample)

Triplanar Sample三平面映射节点

  1. 三平面采样:(使用世界位置参数对图形UV进行采样,获得三个不同的面的数据)例如XY分量朝向参数

  2. 三平面映射遮罩

2.2 解决模型UV接缝的问题

  1. UV接缝问题的原因:UV的切线和负法线是不连续的,导致UV接缝的存在(两个方案,1、扰乱法线;2、三平面映射)三平面映射

  2. 解决方案:使用SlinmeNoise扰动WorldNormal偏移掉存在的接缝问题

2.3 顶点动画导致部分面积形变

2.2.1 解决思路

控制顶点动画的部分面积权重,来达到控制局部的扭曲以及扭曲强度。

2.2.2 解决方案:

  1. 使用顶点着色的方式对需求控制的局部面积进行绘制

  2. 使用3ds Max解决(1)使用顶点刷修改器(3)效果展示

  3. 使用Blender解决

  1. 应用到实际案例:
    顶点色(Vertex Color)当做权重乘以定点动画

2.3 进一步解决溶液物理效果(溶液物理下坠效果)

2.3.1 解决思路

使用world nomal添加系数的方式,使其顶点动画偏移值加大,Y轴向下偏移,达到基于世界法向的顶点动画的偏移值加大。

2.3.2 解决方案

  1. 对世界法线World nomal进行调整,添加一个三维向量(Y偏移)得到偏移值,world nomal Dot 三维向量锁定偏移值权重范围。

  2. 添加控制偏移流动的强度

  3. 优化操作,因为之前使用的是world nomal节点,所以把节点的顶点位置转为世界空间然后输出(一)将输出值改为绝对值(二)空间偏移后转换