草的交互的几种实现

本文详细介绍了三种草的交互实现方法,包括根据顶点UV计算偏移量、根据草的Pivot进行旋转以及使用MeshDistanceField求顶点到碰撞面的距离。此外,还探讨了如何使用VertexTextureFetch方式优化大量交互单位的位置信息输入,适用于雪地和沙地等场景。

草的交互的几种实现

https://blog.youkuaiyun.com/xoyojank/article/details/80893881

基本原理都差不多, 通过在VertexShader种更改顶点的位置实现, 各种做法的差别主要是偏移量的计算.
这里写图片描述

第一种做法: 根据顶点的UV来计算顶点偏移的权重, 因为草叶一般是沿纹理的一个轴方向分布的. 偏移的远近是根据顶点位置和玩家位置(寄存器传入)计算距离后得出.
这里写图片描述

第二种做法: 根据草的Pivot来计算旋转, 这种做法比直接拉伸顶点的效果要好一些, 不会出现草被拉长的情况.
这里写图片描述

草的Pivot信息是需要写进了UV2和UV3的通道里
这里写图片描述

第三种做法: 使用Mesh Distance Field求出顶点到最近碰撞面的位置, 不过只有在UE4中使用高画质和开启DistanceField之后才生效, 不是很通用和可控的做法.
这里写图片描述

前两种做法如果传入的玩家位置(或爆炸冲击波位置)数量是有限制的, 而且数量越多, shader的复杂度越高. 那比较好的做法是像赛尔达那样使用VertexTextureFetch的方式, 使用纹理输入交互单位的位置信息, 这样的话雪地和沙地也可以共享这些信息:
这里写图片描述
这里写图片描述

下面这张图就有主角和一个NPC的位置信息:
这里写图片描述

这里写图片描述
参考资料

    Dynamic Grass System by S. Krezel in Blueprints - UE4 Marketplace
    Free Unreal Engine 4 Grass Collision Project Download [UE4.17]

Unity 大面积草风吹动效果+受人物影响
---------------------
作者:xoyojank
来源:优快云
原文:https://blog.youkuaiyun.com/xoyojank/article/details/80893881
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值