“做一条卡丁车赛道,大概一公里,第三个弯很急,要能漂移过去。”把这句话交给一个文字大模型,它给出的回答通常很像样:赛道分成八个弯,第三个弯是一个接近发夹弯的急弯,前面有一段长直道,建议玩家在直道末端提前松油、甩尾入弯。读起来几乎挑不出毛病。问题是,这段文字里没有一个数字能保证“急弯真的能过”。弯道半径是多少,赛道宽几米,直道末端车速多快,刹车区留了多长,这些都没有,而游戏运行时恰恰只认这些。
文字模型负责的那一段
先说清楚文字大模型擅长什么。它能从一句含糊的话里抽出结构化意图:运动类型是卡丁车,总长约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米,于是空间模型把弯前直道末端的缓冲区延长;测试环节再跑一轮,确认保守型车辆仍能完成比赛。整条链路里,文字模型只在第一步出现了一次。
这正是乐鱼体育在从文字到可玩游戏的分层生成中坚持的做法:让文字模型做它最擅长的理解与沟通,把几何、物理、规则和运行交给能被计算和验证的模块。一句话能说清楚一个弯有多急,但只有算过的数字才能保证玩家真的开得过去。