UE4复刻王国之泪中究极手的胶水交互效果

交互时出现的胶水预览:

预览的胶水和粘合后的固体胶,似乎都是实时生成的模型,UE4中貌似没有特别方便的模型生成方法,UE5里有Geometry Script插件但不太确定能否能达到实时的要求(官方给的定位貌似是制作阶段资产流程优化)。所以还是基于模型顶点偏移做实时的效果。

模型构想

简单模型,注意UV

编写WPO材质。善用Named Reroute节点管理功能模块;利用UV计算世界空间位置和偏移,好处是不依赖WorldPosition节点,连续的,在PixelShader中可以得到逐像素的法线。

(懒了,没用数学方法算法线,直接用的计算得到的世界坐标DDX DDY再Cross求的,分辨率差一些)

(再仔细一看游戏截图貌似也不用算法线来计算菲涅尔效果,因为那貌似就不是菲涅尔……不过做都做了是吧)

简易Niagara

超简易蓝图,验证最低程度的效果

修改一下TPS模板工程中的小人蓝图,让玩家能以类似王泪中的操作方式操作。法师移动和挥手动作都来自Mixamo。视觉上简单仿了一个UI和后处理材质。鼠标左键可以使用引擎自带的Physics Handle组件实现抓握,用法参考内容示例工程。

抓握物品时的旋转操作,王泪制作时应该是下了功夫的。乍看之下是横转竖转都是每次45°,8次一个循环,但是某些特殊角度时横转/竖转是6次一个循环。我没太摸清规律,所以做了动画辅助自己思考他是咋实现的(参考游戏中操作一块悬浮石)。

(旋转未完待续)

王泪中使用究极手时模型特殊点会吸附,吸附逻辑比较好处理,先跳过,在超出吸附范围时则需要一个通用的算法来取两个模型之间的最近点对和距离,这个算法就是GJK Algorithm。在UE4.27中的Chaos模块中有已经实现好的算法,只需要在C++中拿到模型的碰撞Body设置,转化为Chaos::GJKDistance方法需要的类即可。测试效果如下。

(吸附未完待续)

发表评论