效果预览
话不多说先上图。
树木,高草,顶棚与草地细节部分的动效均为着色器效果
具体实现
基本思路
- 核心是使用
Tiling And Offset
节点与Gradient Noise
节点在对象UV
上制造随机扰动,以模拟自然风的效果 - 附加使用
UV
节点结合Power
节点来限制扰动在对象上应用的范围 - 最后使用
Lerp
节点插值,应用最终效果
实现细节
1. Split
节点与 Combine
节点的使用
Split
节点的用途是将 n
维矢量分离,这样就可以单独加工其中的任一维。而 Combine
节点则将这些向量重新结合在一起。
(第一次见这个 RGBA 给我看懵逼了,心想我输入的也不是颜色阿..后来查一下才知道 RGBA 只是输出矢量的标识)
2. 将 Time
节点输入来平移噪声
Time
节点是任何随时间变化的效果中必不可少的。
Time
,DeltaTime
与 SmoothDelta
可用于随时间推进而变化的效果,而 Sine Time
与 Cosine Time
则可以用于来回循环的效果。
3. 使用 Power
节点与 Lerp
节点来固定作用范围
UV
的取值范围为(0, 1
)
随着 InfluenceHeight
的增大,输出结果越来越极化,结合 Lerp
节点的定义可以固定扰动的作用范围,实现高草地下半部分不受影响的效果,更接近于现实中草地的表现。
个人感想
Add
,Multiply
,Subtract
,Divide
以及One Minus
这些基本节点用处非常广泛,在学习时须熟练掌握其性质- 若要仅更改某
N
维矢量的某一维度,先使用Split
节点将其分离,再使用Combine
节点组合在一起 Gradient Noise
节点可生成均匀自然的随机噪声,在模拟风,水波等自然效果时应用广泛- 这个着色器瞎胡调参数能调出来好多神奇的效果……比如这个类似于穿梭的东西
小白一个,若有错误还请不吝指正啦。
不错!
不明觉厉!
想问,一般这种环境动效真的都是这样搞出来的吗
@则栋:根据我学习时查到的资料,那些比较简单、互动也少的动效,比如水波,草地,灌木这样的比较适合用着色器实现,优势主要是简单,复用性强,并且性能消耗很少。那些动作比较复杂的物体应该直接用动画器实现的比较多了。
@Onyx:涨姿势了,谢~
动画一K就出来了,搞得这么复杂
@伦:最近刚好在学习这一部分,就想到哪就做到哪了哈哈
@伦:shader的好处是复用性强,重复性低,批量修改方便;和做动画相比各有优劣,况且明白了原理其实并不复杂。
好棒!
太棒了啊,大佬,能不能发下demo源码呢(哭)
最近由 星渺 修改于:2021-05-22 10:07:28大佬能发下源码参考下吗