“做一条卡丁车赛道,大概一公里,第三个弯很急,要能漂移过去。”把这句话交给一个文字大模型,它给出的回答通常很像样:赛道分成八个弯,第三个弯是一个接近发夹弯的急弯,前面有一段长直道,建议玩家在直道末端提前松油、甩尾入弯。读起来几乎挑不出毛病。问题是,这段文字里没有一个数字能保证“急弯真的能过”。弯道半径是多少,赛道宽几米,直道末端车速多快,刹车区留了多长,这些都没有,而游戏运行时恰恰只认这些。

文字模型负责的那一段

先说清楚文字大模型擅长什么。它能从一句含糊的话里抽出结构化意图:运动类型是卡丁车,总长约1000米,关键特征是第三弯为高难度急弯,玩法偏好是漂移。它还能写出一份规则草案:几圈比赛、起跑方式、出界怎么处理、碰撞是否减速、名次如何判定。这些是整个生成流程的起点,也是用户最容易用语言表达、最需要被“听懂”的部分。

但从这一步往后,任务的性质变了。意图要变成几何,规则要变成状态机,形容词要变成参数,而且每一项都要能被计算验证。这就是为什么在乐鱼体育的生成流程里,文字模型输出的是一份交给下游模块的“需求单”,而不是游戏本身。

Spatial Model:“很急”在几何上是什么

“很急”对人来说是一种感觉,对空间模型来说必须是一组数:转角角度、弯道半径、赛道宽度、弯前弯后的直道长度。一个文字模型如果直接输出赛道坐标,常见的失败有三种:弯道半径小到车身转不过去;赛道在某处与自己交叉;首尾没有闭合,终点线离起点差了几十米。这些错误在文字描述里完全看不出来,因为“一个急弯接一段下坡直道”这句话在语言上永远成立。

空间模型的工作是在约束下求解:总长控制在950到1050米之间,赛道宽度不小于8米,任何两段赛道中心线的距离不小于宽度加安全边距,第三弯的转角大于150度且半径在8到14米之间。满足这些条件的几何才进入下一步。

Physics:刹车距离不是形容词

有了几何,还要问车能不能在这里停得住。以一个模拟参数为例:假设轮胎与路面的摩擦系数取0.9,第三弯半径12米,那么不打滑的极限过弯速度约为每秒10.3米,约37公里每小时。如果弯前直道让车加速到每秒25米,也就是90公里每小时,而车辆的最大减速度设为8米/秒²,那么从90降到37公里每小时需要大约32米刹车距离。如果生成的直道末端到弯心只剩20米,这个弯就不是“很急”,而是“几乎一定冲出去”。

用户说“要能漂移过去”,还意味着物理模块要允许后轮在一定范围内打滑并可恢复,这需要单独的侧滑参数和恢复阈值。文字模型可以写出“漂移时保持油门”,但写不出这组参数,更无法验证它们和弯道半径是否匹配。

Rule Engine:规则要能在每一帧被执行

规则草案里的“跑3圈,先完成者获胜”,交给规则引擎之后要变成:赛道上设置若干检查点,车辆必须按顺序经过全部检查点才算完成一圈;倒车穿过终点线不计圈;出界超过3秒重置到最近检查点。没有检查点顺序,玩家抄近路穿过草地也能计圈,比赛就失去意义。规则引擎还要做冲突检测,比如用户同时要求“限时2分钟”和“跑满3圈才结束”,而模拟单圈平均需要50秒,3圈就超过了2分钟,引擎需要提示判定优先级。

Asset Generation与Runtime:看见的和碰到的不是一回事

素材生成负责赛车、护栏、看台、路面纹理。这里常见的问题是视觉模型和碰撞模型不一致:护栏看起来在赛道外侧,碰撞体却往里多伸了半米,车辆在“看起来还有空间”的地方撞墙。生成素材和生成可玩内容之间,隔着这层碰撞与交互定义。

运行时则是文字模型最难替代的部分。一局8辆车的比赛,每辆车的位置、速度、朝向、圈数、检查点进度、是否出界,都要以每秒几十次的频率更新和判定。这是一个持续推进的状态系统,而不是一次性生成的文本。文字模型可以在比赛结束后解释“为什么3号车赢了”,但它不适合在每一帧里计算3号车有没有越过检查点。

Testing:让模拟车真的跑一圈

六个模块各自产出之后,还需要一个测试环节把它们放在一起验证。在乐鱼体育的模拟流程里,一个简单的做法是让几辆不同驾驶风格的模拟车各跑若干圈:保守型在每个弯前充分减速,激进型尽量晚刹车。如果保守型在第三弯的出界率仍然超过一定比例,说明几何和物理的组合有问题;如果激进型从来不出界,说明这个弯根本不“急”。更完整的检查方法可以参考体育地图的自动检查,测试结果会回到对应模块,而不是回到文字模型重新“描述一遍”。

六个模块的分工一览

模块负责内容 文字模型能提供 为什么需要专门模块
Spatial Model 赛道几何、宽度、交叉检测 “第三弯很急” 需要求解闭合、不自交的几何
Physics 摩擦、速度、刹车、侧滑 “能漂移过去” 需要数值计算与一致性验证
Rule Engine 计圈、检查点、判罚、胜负 规则草案 需要可执行的状态机与冲突检测
Asset Generation 模型、贴图、碰撞体 风格描述 视觉与碰撞必须对齐
Runtime 逐帧状态更新赛后解释 高频、持续、确定性的计算
Testing模拟驾驶、出界率、完赛率 测试目标描述 需要真实运行并统计结果

“再急一点”之后发生了什么

用户试玩后说:“第三个弯再急一点。”文字模型把这句话解析为“第三弯半径减小、难度上调”;空间模型把半径从12米改为9米,并检查前后赛段是否仍然不交叉;物理模块重新计算,极限过弯速度降到约每秒8.9米,所需刹车距离从约32米增加到约34米,于是空间模型把弯前直道末端的缓冲区延长;测试环节再跑一轮,确认保守型车辆仍能完成比赛。整条链路里,文字模型只在第一步出现了一次。

这正是乐鱼体育在从文字到可玩游戏的分层生成中坚持的做法:让文字模型做它最擅长的理解与沟通,把几何、物理、规则和运行交给能被计算和验证的模块。一句话能说清楚一个弯有多急,但只有算过的数字才能保证玩家真的开得过去。