旅行社有个传说:金牌领队老陈的行程单永远是铅笔写的。别人带团照本宣科,他带团——清晨看一眼谁精神饱满、谁顶着黑眼圈,爬山时听谁喘粗气、谁在前面催“快点快点”。午饭后他默默把两小时的山路换成水边长廊,傍晚又“临时发现”一处篝火晚会。整团没人掉队,也没人觉得无聊。同行追问秘诀,他咧嘴一笑:“我写的不是行程单,是活剧本。” 这就是AI导演系统的灵魂。传统游戏就像打印好千份的固定行程单:所有玩家看到一样的剧情、一样的难度、一样的敌人密度。而AI导演(Director AI)像老陈一样坐在后台,一边看玩家的操作表现,一边实时改写接下来的游戏剧本——难度高了偷偷降一点,剧情冷了悄悄加个悬念,让每个人都恰好停留在“还想再玩一局”的兴奋点上。它不写死剧情,而是让剧情活起来。
理解AI导演系统,是进阶游戏AI开发者的核心能力:它教会你如何用数据观察玩家、用算法调节体验,把“好玩”从玄学变成工程。
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
心流通道模型 (Flow Channel) 心流通道 (Flow) 动态难度调整 (DDA) 滞后带 上限 (降低难度) 心流通道:挑战=技能时进入心流 | DDA: 滞后带函数防止难度震荡 | 剧情弧线:铺垫→高潮→转折→收尾 | Director宏观控制+行为树微观执行
导演系统原理
老陈当领队,靠的不是背导游词,而是“观察—判断—改写”的三步循环:看到游客放下相机,就明白这站该结束了;听到有人打听下一站,就决定把惊喜提前。行程单在他手里不是命令,而是草稿。传统游戏里的关卡设计师很像死板的旧式领队——把20页行程单打印好,每位游客都走同一个流程。
于是就有了AI导演系统。它的官方名字叫Director AI,是一种位于NPC人工智能之上的“高层导演”。它不像战斗AI那样控制单个敌人的格挡闪避,而是负责回答三个问题:玩家现在什么状态?我希望他达到什么体验?下一步我该投放什么事件?这正是老陈的“看人下菜碟”。
Director AI 的三个部件分别是感知器(读遥测数据)、决策器(对照体验目标做决策)、执行器(向行为树和关卡系统下达指令)。它们构成一个永不停机的反馈循环,让游戏世界每时每刻都在回应玩家。
老陈的决策函数就是他十五年的带队直觉;Director AI 的决策函数则是设计师写的策略代码。两者都在做同一件事:让剧本跟随人,而不是人跟随剧本。
- Obs_t(观察输入)t 时刻感知到的玩家状态集合,如血量、位置、连续死亡次数、推进速度。
- Goal(体验目标)导演要维持的高层目标,例如“让成功率维持在 50%”或“下一分钟制造一次惊吓”。
- D(决策函数)导演系统内部的策略逻辑,把观察和目标映射成一个具体的世界动作。
心流理论模型
老陈带团的平衡术是“别让阿姨无聊,别让大爷爬不动”。他选路线的标准不是风景多好,而是强度恰好——队伍太快就停下来讲个典故,队伍太慢就偷偷把行程缩短。这套朴素的土办法,心理学界有个著名名字:心流(Flow)。
心理学家契克森米哈赖发现,当挑战难度和人的技能水平匹配时,人会进入一种忘我的沉浸状态。挑战太高,人觉得焦虑;太低,人觉得无聊。这条夹在焦虑与无聊之间的窄带,就是“心流通道”。AI导演存在的全部意义,就是让玩家尽可能待在这条通道里。
想象一个连跪十局的菜鸟——对手步步惊心,他只想摔手柄;再想象一个通关十遍的老手——敌人一碰就倒,他只想打哈欠。这两种极端都是心流通道的逃兵。Director AI 用挑战度(C)和技能度(S)两个数字描述玩家,并用下面的偏差判断距离。
老陈总说“让游客稍微垫垫脚就够得着”,这句话被Director AI翻译成一句代码:永远把挑战推到你踮脚可及的位置。太远是挫败,太近是无聊,心流就在那一踮脚之间。
- C(挑战水平)当前关卡、敌人、谜题对玩家提出的客观要求强度,由难度参数决定。
- S(玩家技能)导演根据历史表现估算的玩家能力值,数据越新越可信。
- Δ(偏差)两者差值的绝对值。导演的目标不是消灭它,而是把它压到阈值 θ 以内。
玩家行为建模
老陈的“读心术”听起来玄学,其实全靠观察:谁端着相机不停按快门,谁把景区手册翻了三遍,谁在长椅上坐得最久。他从不问游客“你累不累”,因为嘴会撒谎,腿不会。游戏里的玩家也一样——窗口弹出的“您觉得难吗?”没人认真填,但死亡次数和操作频率从不骗人。
Director AI 的感知器靠的是遥测数据(Telemetry):每次击杀、每次阵亡、每段跑图耗时、道具使用、技能命中率、甚至手柄摇杆的抖动幅度。这些原始数据被聚合成一个玩家实时画像,导演据此判断:这是个刚上手的新人,还是正在挑战极限的老兵?
数据繁多,不能眉毛胡子一把抓。AI导演给每个指标分配一个权重:连续死亡次数可能权重高,因为它是挫败感的强信号;跑步总路程可能权重低,因为有人就是爱好兜风。把这些加权信号加起来,就得到了 t 时刻的技能分 St,成为后续所有决策的基础。
老陈的读心术本质是大脑给一堆观察信号自动加权:哈欠权重高,脚步声轻快权重高,手机刷的时间长权重更高。Director AI 把直觉变成数学,把观察变成数据流——读心从此不再靠缘分。
- x(行为指标)第 i 个遥测指标在 t 时刻的归一化数值,比如最近5分钟死亡3次。
- w(权重系数)每个指标的相对重要程度,由设计师根据游戏类型调参。
- S_t(技能分)加权求和后得到玩家当前技能水平,用于心流偏差计算。
NPC行为树协同
老陈不是一个人战斗。他手下有讲解员、安全员、司机,每个人手里都有一本“工作手册”:讲解员按手册讲景点历史,司机按手册走固定路线,安全员按手册巡查。老陈从不抢他们的活,但会在关键时刻递张纸条:“三号车游客有点躁动,司机慢点开,讲解员加个冷笑话。”
NPC行为树(Behavior Tree)就是NPC的工作手册。它规定了单个NPC在什么条件下做什么事:巡逻、警戒、追击、对话——清晰、稳定、可预测。Director AI 则是老陈,它不逐帧指挥NPC,而是以“事件”为单位下发指令:在转角刷一队敌人、切换boss的狂暴状态、触发一段剧情动画。
行为树保证了NPC的“基本功”,导演系统提供了“即兴发挥”。两者协作时,游戏既能维持底层AI的可靠性,又能涌现出千人千面的戏剧化体验,这就是分层AI设计的魅力。
这个式子让导演学会“看人下菜”:新手面前少放偷袭,高手面前阴招不断。老陈的纸条能传得准,靠的是15年眼力;导演的纸条能传得准,靠的是这道概率公式。
- e_t(导演事件)导演可以投放的高层事件,如增援敌人、掉落武器、切换bgm。
- σ(sigmoid函数)把任意数值压缩到 0~1 之间,便于当作概率使用。
- β0 与 β1(回归系数)β0 是事件的基础倾向,β1 是技能对触发概率的影响斜率。
动态难度调节
老陈带团爬黄山,最常做的事就是“偷换行程”。上午看队伍健步如飞,他不动声色地把两小时山路改成三小时索道加山腰徒步;下午有人喊饿,他就把晚餐餐厅从山顶换成山脚火锅店。游客只觉得“今天运气真好”,不知道那叫动态难度调节。
放到游戏里,这个问题叫 DDA(Dynamic Difficulty Adjustment)。固定难度曲线的麻烦在于:玩家的技能是一条不断变化的波浪线,而难度却是一根铁棍,两头永远对不上。Director AI 的做法是让难度变成一根自适应弹簧——玩家的胜率低了,弹簧就松一松;胜率高了,就紧一紧,让胜率始终浮在目标区间附近。
难度参数可以是怪物血量倍率、敌人数量、解谜步数或者弹药补给频率。调节时有一个关键原则:每次只拧一点点。如果玩家刚死了一次,下一秒难度掉到腰围,他会立刻意识到“游戏在可怜我”,出戏感会毁掉所有体验。
老陈“偷换行程”的精髓就是小步慢调:游客完全察觉不到,只感到这一天舒服极了。AI导演同理——好的调节是无形的,你以为是自己变强了,其实是世界悄悄为你弯了弯腰。
- D_t(当前难度)t 时刻的难度值,如怪物伤害系数 0.8。
- P_target(目标胜率)设计师期望的玩家胜率,射击游戏常取 0.5 左右。
- α(调节步长)每次调整的力度,太大显得被操控,太小跟不上状态变化。
- P_t(近期表现)最近若干次遭遇的实际胜率,导演每 30 秒重算一次。
剧情节奏编排
老陈的行程单上从不出现“周一爬山、周二看庙、周三购物”这种平均分配。他会安排周六清晨登顶看日出(兴奋),中午湖边草坪野餐(放松),傍晚意外撞见当地火把节(惊喜)。他管理的是情绪的波形:有波峰,有波谷,让人期待波峰,享受波谷。
游戏剧情的节奏感同样需要设计。如果敌人一波接一波永不停歇,玩家的交感神经累到麻木;如果三小时纯对话,玩家眼皮打架。Director AI 不只是调难度,还要管节奏:决定什么时候释放信息、什么时候引爆战斗、什么时候让玩家喘息,用一条“紧张—放松”的波形控制大众情绪。
节奏不是越高越好,而是越有起伏越好。紧张之后的放松让放松更甜;放松之后的紧张让紧张更刺激。AI导演用一个加权评分来量化当前节奏感,并把它作为下一段编排的参考。
老陈最得意的一招是“日落前把惊喜憋到最后”。Director AI 的节奏曲线也深谙此道:永远在玩家即将厌倦时,递上下一个高潮。
- A_t(紧张度)当前战斗强度、计时压力、恐怖元素浓度的综合值。
- N_t(新奇度)新区域、新机制、新剧情信息的刺激量,防止重复感。
- F_t(疲劳度)连续高强度玩法造成的疲劳累积,长时间不加休息会飙升。
- w(权重)三个维度对节奏感的相对贡献,由玩法类型决定。
系统评测优化
老陈有个好习惯:每晚收团后,独自在酒店大堂写复盘笔记。今天哪段讲解游客低头玩手机最多?哪家餐厅光盘率最高?明天行程怎么调?他带的团之所以口碑爆棚,不是因为第一天行程完美,而是因为他每天都在修正。
Director AI 上线后同样需要评测系统。没有评测,导演就不知道自己是把玩家带向心流还是赶向弃游。常用指标有:次日留存率、平均单次游玩时长、关卡完成率、死亡后重试意愿、玩家问卷里的“紧张感评分”。这些数据如同老陈的复盘笔记,告诉团队哪个环节出了问题。
评测不能只看绝对值,还要做对比实验。最常用的是 A/B 测试:一半玩家开启AI导演,一半关闭,其他条件不变,对比两组人的留存和心情指标。这种同擂台对比能回答一个关键问题——导演系统到底有没有让游戏更好玩?
老陈的复盘笔记从不用形容词,只记数字——“下午3点讲解,8人低头看手机”。Director AI 的评测也很诚实:留不住人的系统,文学修辞再花哨也没用。
- Y_treat(实验组指标)开启导演系统的那组玩家的留存率或平均游玩时长。
- Y_ctrl(对照组指标)关闭导演系统的玩家的同一项指标。
- Lift(相对提升率)提升率的正负与大小,决定导演系统是否值得保留和推广。
实现与挑战
老陈最怕什么?不是行程满,而是突发状况——暴雨封山、团员发烧、车队抛锚。再好的导演也得准备应急预案。游戏里的Director AI同样要面对现实世界的冷酷约束:算力、延迟和玩家的心理防线。
第一道坎是计算开销。导演系统每秒都在做数据采样、状态估计、事件决策,这些计算必须挤在游戏主循环的预算里。60帧的游戏每帧只有约16毫秒,导演系统如果吃掉大半预算,渲染和物理就只能喝西北风。所以工程上常用分帧调度、降低采样频率、精简模型来把导演的开销压到极限。
第二道坎是“上帝之手”露出马脚。玩家是一群敏锐的侦探:如果每次残血时转角必出补给包,他们立刻会识破导演的把戏,感到被操控。系统需要在随机性和引导性之间走钢丝,让调节像老陈的偷换行程一样神不知鬼不觉。此外,系统还要面向设计师保留参数化解释能力:为什么这局难度降了?哪个指标触发的?没有透明度,策划不敢放心交付。
老陈的精明之处是准备了三套雨天方案、两套夜间方案、一套应急送医方案。Director AI 的工程挑战本质也一样:既要出色,又不能添乱,还得让所有人看得懂它为什么这么做。
- c_k(子任务耗时)感知采样、画像更新、难度计算、事件调度各自消耗的时间。
- 16ms(一帧预算)60 FPS 下每一帧的硬性时间上限。
- Σ(总预算约束)所有导演子任务的累计耗时不得超过单帧预算,否则游戏掉帧。
AI 应用场景
团队射击游戏的“活导演”——以《求生之路》为例
阶段:玩法平衡与体验优化
解决的问题:传统固定难度下,四人小队中菜鸟和高手混搭时体验两极分化——高手嫌无聊,菜鸟被虐哭。AI Director 实时扫描队伍的血量、推进速度、失误次数,动态生成丧尸潮规模和补给点位置,让每一波危机都“惊险但可过”。
具体案例:队伍残血逼近终点时,导演悄悄压低尸潮频率、在必经之路刷一个急救包;队伍满血满地图乱逛时,导演用一声特感嘶吼把节奏重新拉紧。玩家只感到“这游戏真懂我”,实际上是导演在看数据做调度。
生存恐怖游戏的“心跳调节器”——《生化危机》自适应难度
阶段:玩家行为建模与动态难度调节
解决的问题:恐怖游戏的最大敌人是“麻木”。固定难度下,老玩家对丧尸见怪不怪,新玩家连第一个转折点都过不去。动态难度通过命中率、受击频率、道具库存评估玩家压力,在“缺物资”与“太富足”之间自动摆荡。
具体案例:玩家连续三次被丧尸咬到残血,系统悄悄提高补给刷新率并降低敌人警觉范围;玩家一枪未失地清空房间,导演便让下一只怪物从更高难度的潜伏点出现。恐惧感因此始终维持在心流边缘。
竞技手游的“隐形排位师”——匹配系统的导演逻辑
阶段:系统评测优化与体验闭环
解决的问题:竞技游戏最怕新玩家被老玩家单方面屠杀,最怕高手排不到势均力敌的对手。匹配系统本质上就是一个超大号的Director AI——用ELO/MMR分数作为玩家技能的“遥测数据”,不断把对手难度拉向50%胜率附近。
具体案例:连胜五局的玩家会发现自己开始匹配到更强的对手,连败三局的玩家会因为一局“势均力敌”的翻盘而重拾热情。这个“隐形导演”让日活跃用户和次留数据显著改善。
Python 演示
import random class PlayerModel: def __init__(self, skill=0.5): self.skill = skill self.results = [] def play_round(self, difficulty): win_prob = self.skill / max(self.skill + difficulty, 1e-6) win = random.random() < win_prob self.skill += 0.02 if win else -0.01 self.skill = max(0.05, min(0.95, self.skill)) self.results.append(1 if win else 0) return win def recent_rate(self, window=10): return sum(self.results[-window:]) / min(window, len(self.results)) class DirectorAI: def __init__(self, target=0.5, alpha=0.05, difficulty=0.5): self.target = target self.alpha = alpha self.difficulty = difficulty self.log = [] def run(self, player, rounds=60): for i in range(rounds): win = player.play_round(self.difficulty) rate = player.recent_rate() self.difficulty += self.alpha * (self.target - rate) self.difficulty = max(0.1, min(0.9, self.difficulty)) self.log.append((i, player.skill, self.difficulty, rate, win)) def main(): random.seed(42) player = PlayerModel(skill=0.45) director = DirectorAI(target=0.5, alpha=0.05, difficulty=0.5) director.run(player, rounds=30) print("回合 玩家技能 导演难度 近期胜率 AI调节") for i, s, d, r, win in director.log: if i % 5 == 0 or i == len(director.log) - 1: trend = "升" if d > 0.5 else "降" print(f"{i:4d} {s:6.3f} {d:6.3f} {r:6.2f} {trend}") if __name__ == "__main__": main()
win_prob = self.skill / max(self.skill + difficulty, 1e-6)玩家胜率随难度上升而下降,模拟“挑战越高越容易失败”的客观规律self.difficulty += self.alpha * (self.target - self.recent_rate)导演的核心动作:近期胜率低于目标就降难度,高于目标就升难度self.difficulty = max(0.1, min(0.9, self.difficulty))难度钳制,防止系统把玩家逼到必败或必胜的极端random.seed(42)固定随机种子,保证每次运行结果一致,方便演示调参效果director.run(player, rounds=30)一个完整的“带队回合”,每回合玩家打完一局,导演就更新一次难度
常见误区
误区我一直以为AI导演系统就是更高明的“挑战系统”,专门在后面盯着我的操作,一旦发现我变强了就偷偷加怪,让我永远不能轻松通关。过关越难,说明导演越尽责。
正解导演的首要目标是心流,而不是难度。心流等于挑战匹配技能,难度只是达成匹配的手段。当玩家残血、连败、精疲力尽时,优秀的导演会主动“放水”,降低尸潮强度、多给补给。就像领队老陈看到游客喘气会改走缓坡——真正的导演擅长妥协,而不是碾压。
为何常见:很多人把“AI对手”和“AI导演”混为一谈。AI对手以击败玩家为目标,导演以维持体验为目标,两者本质完全不同。
误区我认为上了Director AI之后,所有NPC都必须由导演直接控制,原先那些行为树代码全都得重写,不然导演没法指挥它们演出一场好戏。
正解这是分层设计思想没吃透。行为树负责“单个NPC怎么走路、怎么攻击”,导演负责“什么时候在哪儿刷几只怪、要不要触发boss”。导演通过事件和参数间接影响行为树,像老陈给助手递纸条,而不是抢过司机的方向盘。行为树代码几乎不用重写,只需预留事件接口。
为何常见:看到导演系统“指挥全场”的演示,容易误以为它是全能操控者,忽略了分层架构的价值。
误区我感觉判断玩家状态很简单,看胜率就够了——赢得多说明他很强,输得多说明他很菜,导演照着调难度就行,不用再收集别的数据。
正解胜率是结果,不是状态。挫败感可能藏在单局17分钟的第12次死亡里,无聊可能藏在五分钟没开一枪的散步里,紧张可能藏在残血躲进柜子的三十秒里。AI导演需要多维信号融合:命中率、连续死亡、道具利用率、通关耗时、移动速度,像老陈同时看脸色、看脚步、看相机,而不是只看一句“今天开不开心”。
为何常见:胜负是最好采集的数据,人天然倾向于用最省事的信息做判断,但游戏体验恰恰藏在细节里。
误区我觉得AI导演的最高境界是让玩家一直赢、一直爽,把难度调到接近零,保证每局都有正反馈,玩家一定会流连忘返。
正解一直赢意味着挑战趋近于零,玩家会迅速进入“无聊”区间,恰恰离开心流通道。心理学研究表明,人最享受的状态是“差一点就赢”的临界点。好的导演会让玩家感受六成把握的刺激,偶尔输一局,再送一场漂亮的翻盘。成就感来自克服适度困难,而不是躺在胜利的温床上。
为何常见:直觉上“赢=快乐”,但忽视了快乐是挑战与能力碰撞出的火花,完全碾压强敌的胜利,三局之后就不值钱了。
面试题
Q1. AI导演系统的核心目标是什么?
- A.让游戏难度持续提高
- B.维持玩家的心流体验← 正确答案
- C.接管所有NPC行为逻辑
- D.削减游戏的研发成本
答案:B。导演系统服务于体验目标而非难度目标。把难度无限提高会让玩家焦虑,接管全部NPC逻辑会失去分工优势,削减成本更不是导演的职责。就像老陈带团,核心是让每个人都玩得尽兴,而不是把团带得多累。
Q2. 挑战过高和挑战过低时,玩家分别容易陷入哪种状态?
- A.兴奋与舒适
- B.焦虑与无聊← 正确答案
- C.紧张与放松
- D.愤怒与平静
答案:B。心流理论认为,挑战远超技能时人焦虑,挑战远低于技能时人无聊,只有二者匹配才进入心流。兴奋、舒适、放松都不是这两个极端区域的典型特征,焦虑与无聊才是偏离心流通道的两个出口。
Q3. Director AI 与NPC行为树的正确关系是?
- A.导演逐帧替代行为树
- B.二者彼此完全独立
- C.导演调度事件,行为树执行动作← 正确答案
- D.行为树决定导演目标
答案:C。导演系统是高层的体验调度者,行为树是低层的NPC执行者,二者是协作而非替代。导演投递事件、调参数,行为树按手册完成动作。这就像老陈递纸条给司机,而不是抢方向盘——逐帧替代和完全独立都曲解了分层架构。
Q4. AI导演通常采集哪些遥测数据来感知玩家?
- A.死亡次数与通关时间← 正确答案
- B.眼睛的虹膜颜色
- C.操作频率与命中率← 正确答案
- D.道具使用与移动路径← 正确答案
答案:ACD。遥测数据必须是能被游戏系统记录的玩家人机交互信号,死亡次数、通关时间、操作频率、命中率、道具使用和移动路径都是常用指标。虹膜颜色属于生物特征采集,既不出自游戏机制,也有隐私争议,不在导演系统的典型感知范围内。
Q5. 动态难度公式 D_{t+1} = D_t + α(P_target − P_t) 中,α 代表什么?
- A.目标胜率
- B.当前难度
- C.难度调节步长← 正确答案
- D.玩家技能值
答案:C。α 是每次更新的调节力度,也就是学习率。目标胜率是 P_target,当前难度是 D_t,玩家技能值综合在 P_t 的表现中。α 太大会让玩家察觉“上帝之手”,太小则跟不上状态变化,它是 DDA 系统中最需要谨慎调参的旋钮。
Q6. 《求生之路》里的AI Director 主要根据什么来调整游戏体验?
- A.玩家所处网络延迟
- B.队伍血量与推进状态← 正确答案
- C.玩家角色皮肤品质
- D.游戏内置语音音量
答案:B。《求生之路》的导演系统实时读取队伍血量、推进速度、失误次数等战斗状态数据,动态生成丧尸潮和补给。网络延迟、皮肤、语音音量都是局外的非游戏体验信号,导演系统不依赖它们,就像老陈不会因为你鞋的颜色决定行程强度。
Q7. AI导演系统在实际落地中会面临哪些挑战?
- A.实时计算预算紧张← 正确答案
- B.玩家可能识破被操控← 正确答案
- C.调节过程缺少可解释性← 正确答案
- D.剧情自动生成无需测试
答案:ABC。导演系统要挤进每帧几十毫秒的预算内(A);调节太明显会被玩家反感(B);策划需要知道“为什么这局降难度了”,否则不敢上线(C)。D 恰恰相反,导演系统上线前必须经过大量A/B测试和回归验证,跳过测试是灾难。
Q8. A/B测试评估AI导演时,Lift 公式的分母代表什么?
- A.实验组的指标值
- B.对照组的指标值← 正确答案
- C.两位实验的玩家差
- D.测试迭代的轮次数
答案:B。Lift = (实验组 − 对照组) / 对照组,分母是基线对照组的值。它用来衡量开启导演系统相比原版玩法的相对提升率。实验组在分子上,玩家差和轮次数都不在公式里。
Q9. 优秀AI导演在调节难度时应当遵循哪些原则?
- A.平滑调整避免玩家察觉← 正确答案
- B.将近期表现纳入决策← 正确答案
- C.只依据固定剧本推进
- D.围绕心流通道不断微调← 正确答案
答案:ABD。好的导演每次只动一点,小步快走,让玩家察觉不到(A);决策依赖近期表现窗口,而不是远古数据(B);它的核心操作就是围绕心流偏差做微调(D)。固定剧本是传统游戏的旧做法,正是导演系统要打破的东西。
Q10. 60FPS游戏帧率下,AI导演系统每帧的计算预算上限约为多少?
- A.8毫秒
- B.16毫秒← 正确答案
- C.33毫秒
- D.50毫秒
答案:B。60FPS意味着每一帧只有约16.67毫秒的完整预算,导演系统必须和其他所有系统共享这16毫秒。8毫秒太苛刻,33毫秒和50毫秒对应的是30FPS甚至20FPS的渲染节奏,达不到流畅标准。这个约束迫使工程师用分帧采样和精简模型来节省开销。