草的交互的几种实现

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

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

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

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

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

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

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

这里写图片描述

参考资料

猜你喜欢

转载自blog.csdn.net/xoyojank/article/details/80893881
今日推荐