Shader处理角色皮肤特效接缝

游戏角色皮肤要做流动特效,如果使用顶点uv对效果贴图进行采样,存在以下几个问题:

  1. 因为在展UV的时候,各个结构之间基本都是拆开的,流动效果会有明显的接缝问题,破坏了效果的完整性
  2. 同样因为展UV的原因,无法保证各个部位的流动方向一致

具体效果如下:

所以,效果图采样不能使用顶点UV,可以考虑使用顶点的世界坐标或自身坐标。

如果使用世界坐标,那么就会出现角色在移动过程中,对特效流动效果产生影响,这要看具体影响程度。如果使用自身坐标,需要设置一个偏移量,因为大部分角色的模型左右对称,如果不做一个偏移并且效果贴图不是四方连续的情况下,还是会有一条中缝。

之后就是面对下一个问题:如何将3维的世界坐标/自身坐标,转换成2维的uv坐标?

可以参考网上流传的解决方案——三向贴图(Tri-planar mapping)

Unity Shader:三向贴图(Tri-planar mapping)---解决地形拉伸贴图变形以及贴图边缘的缝隙问题 - 灰信网(软件开发博客聚合)Unity Shader:三向贴图(Tri-planar mapping)---解决地形拉伸贴图变形以及贴图边缘的缝隙问题,灰信网,软件开发博客聚合,程序员专属的优秀博客文章阅读平台。https://www.freesion.com/article/42491238386/

该方式存在以下几个问题:

  1. 一张贴图三次采样,成本过高
  2. 因为最后是根据法线权重对三次采样进行叠加处理,所以,可能会有相对明显的拉伸和叠加效果,效果很不理想。如图

-------------------------------修正内容:晚上做梦的时候梦到还在调试这个三向贴图效果,法线是算法有问题,白天醒来仔细想想,理论上确实不应该出现拉丝效果。再三查证后发现上述第二点效果有误,图中出现的拉丝效果是因为使用了自身坐标+世界法线造成的。全部修改到世界坐标系或自身坐标系以后,效果如下图:

 -----------------------------修正内容 End

 最后,经过尝试,探索出一种理论上不够严谨,但是计算量小,效果还可以接受的方案。先上图:

 方案比较简单:

real2 uv = offset + real2(i.localPos.x + i.localPos.z / 2, i.localPos.y + i.localPos.z / 2);

 具体参数可以根据自己的效果进行调整,而且这个方案应该还有很大的优化空间,仅供大家参考一下解决思路。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值