Unity 风吹草的实现

https://zhuanlan.zhihu.com/p/74157932
https://twitter.com/minionsart/status/1014226452378775557
https://www.cnblogs.com/crazii/p/7337143.html
这篇已经很详细了,我对他的东西做些补充

在这里插入图片描述

先是普通的三角函数的实现

大概是这个函数,只不过需要调整参数去你拟合真实的风吹草,当然函数比这个要复杂
在这里插入图片描述
s i n ( x ) + s i n ( 2 ∗ x ) sin(x ) + sin(2*x) sin(x)+sin(2x)

 float4 worldPos = mul(unity_ObjectToWorld, v.vertex);
 float offset = 0;
 offset += _A * sin(_w * _Time.y) * worldPos.y;
 offset += _A * sin(2 * _w * _Time.y) * worldPos.y;
 worldPos.z += offset * worldPos.y;

 o.vertex = mul(UNITY_MATRIX_VP, worldPos);

利用采样图替代原函数

在这里插入图片描述

 float2 samplePos = worldPos.xz / _WaveControl.w;
 float waveSample = tex2Dlod(_WindNoiseTex, float4(samplePos + _Time.x, 0, 0)).r;
 worldPos.x += waveSample * fix;

这样就很简单了,不过这张图需要用sd去生成,不过这种方式更加有效率

修复距离太大的变形

worldPos.x += waveSample * fix * v.vertex.y;

这里当草的位移过大的时候会有奇怪的变形和抖动,这时候需要有个平滑函数去平滑,这里可以直接用高度代替。😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值