unity-法线贴图&BlendTree&特效VFX

法线贴图

法线贴图:记录了一个需要进行光影变换的贴图上的各个点的凹凸情况的贴图,显示芯片根据贴图的内容来实时生成新的有光影变换的贴图,从而实现立体效果

法线贴图不是真正的贴图,故不会直接贴到物体的表面,其作用就是记录每个点上法线的方向。

原理

模型面数越高,可以表现的细节越多,效果越好,但面数多了,顶点数便多了,计算量变大了。为了能用尽可能简单的模型来做出更好的效果,最初提出纹理映射,但它只影响像素阶段输出的颜色值,不能让模型有凹凸的细节,故提出法线贴图解决此问题。

最早在计算时需要逐顶点计算光照,然后每个像素的颜色在各个顶点的颜色之间插值,在此情况下,面数决定一切效果。但在像素着色器出现后,可以通过逐像素来计算光照效果。在计算时,会计算此像素所在面的法向量,此法向量也是由这个面周围的顶点的法线插值得来。当改变法线的方向,则可以改变这个点的光照结果。

在平面的情况下,感觉物体的凹凸很大一部分取决于面的亮度,有了对比,就容易感觉有凹凸。因此通过改变法线来改变面上点的光照条件进而可以让观察者感觉这个面有凹凸

sXFc0U.png

BlendTree

混合树(Blend Tree)按不同程度组合所有动画的各个部分来平滑混合多个动画。即将多个动画融合在一起按条件触发。

  1. Animator选择新建混合树的状态,右键选择Create New Blend Tree in State

sXFRk4.png

  1. 双击Blend Tree打开InspectorMotion处新建需要混合的多个动画。

  2. 选择参数Parameter是通过速度Speed计算还是通过垂直加速度verticalVelocity,两个都是Float类型

  3. 在各个动画的Threshold设置不同的参数值来控制其出现的时间

sXFg7F.png

  1. 在脚本中为动画参数赋值,即关联实际角色与动画设置的参数。
1
2
3
4
5
6
int fallID;
//fallID为Animator状态参数的编号
fallID = Animator.StringToHash("verticalVelocity");

//设置跳跃BlendTree的动画,其float值就是角色刚体y轴跳跃的加速度,
anim.SetFloat(fallID, rb.velocity.y);

解决更换场景也不销毁某对象

在代码中使用DontDestroyOnLoad(gameObject)方法

代码中给角色添加特效VFX

  1. 脚本中创建特效变量
  2. unity中将特效拖入对应变量中
  3. 使用Instantiate(origin,position,rotation)方法替换当前角色的位置为特效动画
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020-2021 Aweso Lynn
  • PV: UV: