用一个平面切割网格,生成两个新的网格。参考了《快速切割网格》这篇文章( 作者CareFreeQ )。关键思路是截断三角形新增顶点,原文对截面进行了简单处理,默认了截面是凸面,而且只有一整块。切割角色模型的皮肤网格要做额外处理。
加入时间停止,环境光变暗等特效,做处决敌人的效果:
Tricks
不填充切口网格
角色模型比较复杂,简单地把切口当作凸面来对顶点排序,无法完美闭合切口:
解决方案是对模型背面着色,再加上一些自发光,则看起来像是“填充了”切口,同时也节省了切口顶点的排序计算。缺点是难以给切面更复杂的效果,因为根本不存在切面网格,仅仅是看上去像是“切面”。不过目前简单地对切口着色已经足够。
切割皮肤网格前先Bake
切割皮肤网格前,要先调用bake方法复制一份,把皮肤网格变成一般网格,否则在SkinMeshRenderer的MeshFilter中拿到网格数据,是模型在T-pose时的数据。Bake方法把模型实时的姿势给“截取”了下来,之后才能开始切割。