前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >草的交互的几种实现

草的交互的几种实现

作者头像
逍遥剑客
发布2019-02-20 15:29:38
9290
发布2019-02-20 15:29:38
举报

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

这里写图片描述
这里写图片描述

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

这里写图片描述
这里写图片描述

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

这里写图片描述
这里写图片描述

草的Pivot信息是需要写进了UV2和UV3的通道里

这里写图片描述
这里写图片描述

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

这里写图片描述
这里写图片描述

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

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

下面这张图就有主角和一个NPC的位置信息:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年07月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档