随风摆动的草丛 — Unity Shader Graph 2D 初探

作者:Onyx
2020-04-22
25 22 11

效果预览

话不多说先上图。

树木,高草,顶棚与草地细节部分的动效均为着色器效果

具体实现

点击或者右键在新标签页中打开图片查看细节

基本思路

  • 核心是使用 Tiling And Offset 节点与 Gradient Noise 节点在对象 UV 上制造随机扰动,以模拟自然风的效果
  • 附加使用 UV 节点结合 Power 节点来限制扰动在对象上应用的范围
  • 最后使用 Lerp 节点插值,应用最终效果

实现细节

1. Split 节点与 Combine 节点的使用

Split 节点的用途是将 n 维矢量分离,这样就可以单独加工其中的任一维。而 Combine 节点则将这些向量重新结合在一起。

(第一次见这个 RGBA 给我看懵逼了,心想我输入的也不是颜色阿..后来查一下才知道 RGBA 只是输出矢量的标识)


2. 将 Time 节点输入来平移噪声

Time 节点是任何随时间变化的效果中必不可少的。

TimeDeltaTimeSmoothDelta 可用于随时间推进而变化的效果,而 Sine TimeCosine Time 则可以用于来回循环的效果。


3. 使用 Power 节点与 Lerp 节点来固定作用范围


UV 的取值范围为(0, 1

随着 InfluenceHeight 的增大,输出结果越来越极化,结合 Lerp 节点的定义可以固定扰动的作用范围,实现高草地下半部分不受影响的效果,更接近于现实中草地的表现。


个人感想

  • AddMultiplySubtractDivide 以及 One Minus 这些基本节点用处非常广泛,在学习时须熟练掌握其性质
  • 若要仅更改某 N 维矢量的某一维度,先使用 Split 节点将其分离,再使用 Combine 节点组合在一起
  • Gradient Noise 节点可生成均匀自然的随机噪声,在模拟风,水波等自然效果时应用广泛
  • 这个着色器瞎胡调参数能调出来好多神奇的效果……比如这个类似于穿梭的东西

我怀疑好多效果都是这样瞎调出来的……

小白一个,若有错误还请不吝指正啦。

参考链接

近期点赞的会员

 分享这篇文章

Onyx 

奇怪的人。 

您可能还会对这些文章感兴趣

参与此文章的讨论

  1. herqu 2020-04-22

    不错!

  2. 白字壹 2020-04-22

    不明觉厉!

  3. 则栋 2020-04-23

    想问,一般这种环境动效真的都是这样搞出来的吗

    • Onyx 2020-04-23

      @则栋:根据我学习时查到的资料,那些比较简单、互动也少的动效,比如水波,草地,灌木这样的比较适合用着色器实现,优势主要是简单,复用性强,并且性能消耗很少。那些动作比较复杂的物体应该直接用动画器实现的比较多了。

    • 则栋 2020-04-23

      @Onyx:涨姿势了,谢~

  4. 2020-04-23

    动画一K就出来了,搞得这么复杂

    • Onyx 2020-04-23

      @伦:最近刚好在学习这一部分,就想到哪就做到哪了哈哈

    • 像素罐头FF1 2020-04-23

      @伦:shader的好处是复用性强,重复性低,批量修改方便;和做动画相比各有优劣,况且明白了原理其实并不复杂。

  5. sdj大傻 2020-04-23

    好棒!

  6. 星渺 2021-05-22

    太棒了啊,大佬,能不能发下demo源码呢(哭)

    最近由 星渺 修改于:2021-05-22 10:07:28
  7. 冰水blue 2022-06-03 微信会员

    大佬能发下源码参考下吗

您需要登录或者注册后才能发表评论

登录/注册