基于模型的刀光特效方法论

前言

本系列旨在解决这样一个问题:很多教程以视频形式存在,里面的操作、节奏、手感,对 AI 来说很难触及。为此,笔者想用文章把这些内容写成 AI 能读、能理解、能在此基础上自己迭代的文本,补上这块资料的空缺。


方法论

在游戏开发中,为了给攻击增加一些视觉反馈和攻击范围的提示,经常会加一种被称为刀光的特效。其含义,我个人简单理解为刀挥出的轨迹。

引擎里比较顺手的实现大致有两类:一类基于模型,一类基于拖尾。本文只谈前者。

基于模型的刀光,核心是一组分工:模型负责轮廓和轨迹,贴图负责样式。用模型拉出刀光的外形轮廓,再用一套横平竖直、归一化到 0~1 的 UV 把贴图铺上去——模型怎么弯,刀光就沿着哪条轨迹走;贴图长什么样,刀光就是什么花纹。

举个反例:如果完全用 Sprite 来做,那除了一帧帧手画,能批量出帧的办法也无非是先搭一套类似的流程、再烘焙出来。显而易见,参数难调,还亏了显存。而模型 + 贴图的方案把“轨迹”和“样式”彻底拆开——模型管它从哪进、往哪走,贴图管它好不好看,两件事互不干扰。分工一旦清晰,后面的可控性也就全都有了。


轮廓

那么先要建的是轮廓。

手建轮廓,核心可以理解成一次参数化映射。我们想要的是:UV 始终保持横平竖直——贴图在 0~1 的范围里像一张正常矩形那样平铺;但模型本身,要在空间里弯成刀挥过的那条轨迹。这两件事看着矛盾,其实正是分工的意义——UV 的规整留给贴图去用,空间的弯曲交给模型去扛。

以最常见的弧形刀光为例,可以这样去理解这次映射:把 U 方向看成挥刀轨迹的展开方向,对应极坐标里的角度;把 V 方向看成刀光从内侧到外侧的宽度方向,对应极坐标里的半径。于是一张原本横平竖直的平面,就被映射成了一片扇形或月牙形的轮廓——UV 没乱,形状却弯了。

至于异形的刀光,本质万变不离其宗:无非是换一组从“规整 UV”到“目标形状”的映射关系。


贴图

贴图这层可以有很多巧思。进阶一点的做法会拆通道,比如 R 通道存形状、G 通道存高光,把更多控制权交给美术。这些先按下不表,为了把原理讲透,我们就用最朴素的情况:一张灰度图,或者直接画好的 RGB 图,贴上去。

贴图的核心,是 U、V 两个方向上的渐变。最简单的一种:左上角是 1,往右、往下逐渐趋向 0。因为刀光通常从一侧长进来,而惯用右手的劈砍多是从右往左,所以让亮的一端在某一侧、空的一端在另一侧,是为了配合后面动画里贴图滚动的方向。

不过这并不是大问题,需要反过来时,要么在 Shader 采样时 flip 一下,要么干脆把贴图镜像了事。


动画

特效的灵魂在于动态。模型和贴图有了,就差让它动起来。整段动画只由一个值驱动:刀光的进度,0 到 1,之后的一切都跟着它走。

最省事的接法是把进度接到透明度或缩放上,让刀光入场离场不要那么生硬,一般的特效也会这么做。但它的轨迹已经交给轮廓了,更顺的做法是让贴图沿着这条轨迹滚进来。这时候,之前坚持横平竖直的 UV 才真正派上用场。

机制其实就是让贴图滑进来:进度就是它滑进刀光的程度——0 时整张贴图还停在外面,刀光是空的;1 时刚好滑满,刀光完整。实现上,采样时给 U 加 offset = 1 − 进度,就是这一下滑动。

这套推拉能成立,前提是采样源有界、且被推向的那条边是空的。最简单的实现是使用图像纹理。

进度不必线性。刀光的手感是出刀快、收势缓,照着给进度 K 一条曲线就行。


结语

笔者经过尝试,在 CODEX APP 中用 GPT5.5 配合 BlenderMCP,思考强度中档的情况下已经能取到不错的效果。而在 OPENCODE 中用 DEEPSEEKV4PRO,MAX 思考强度下整体没什么问题,但经常在细节上出现错误,比如非要使用程序化纹理但又处理不好等等一系列的问题。

但理论上来说,只需要向其转述哪里不对,迭代几次应该也是能修好的。 这点之于 GPT5.5 甚至往后也可能一样,毕竟 AI 不能直接读取你的想法,技术,流程上可能不出错,但想要的效果总归是人自己提出的。