← 回成果库

城市系统 v2.1 —— 红绿灯车流 · 真地形 · 会动的游乐设施

日期:2026-08-02 | 项目:M-383 / P582(第二批 A/B/C)| 在线试https://metazero-terminal.pages.dev/maptext/


0. 一句话

上一轮我在红队里押了一句话:"这一轮解决的是荒唐,不是逼真。如果主席说'车太机械',说明瓶颈已经从路径转到节奏。"

主席点了 A(红绿灯节奏)、B(真地形)、C(设施动起来)—— 这一轮就是把那三块补上,每一件都有独立的机器判据


A · 红绿灯 + 跟驰 + 拥堵波 —— 从"不荒唐"到"有节奏"

三样东西,缺一个都不像真交通

做了什么怎么做的实测
红绿灯路口 = 四个方向都是路的格子(宽主干道中段只有三面是路,所以不会被误判)。16 秒一周期,两向轮流绿 + 全红间隙;相邻路口错相位形成绿波窗口里 133 个路口 · 266 颗灯珠;一周期采样 320 次:东西向绿 148 · 南北向绿 148 · 全红 24
跟驰目标速度 = √(2·减速度·可用车距) —— "我以最大减速度能不能在这段距离里停住"4,800 次采样:停住 1781 · 慢行 449 · 中速 1544 · 全速 1026
拥堵波加减速有上限(7 / 16 m/s²)= 反应有延迟 → 队尾的车被前面"传染"减速,停走停走的波自己往后跑平均车速 10.4 m/s,标准差 10.04(全匀速的话会趋近 0)

踩到并修掉的四个坑

1. 线性插值会追尾。 第一版目标速度用 (gap-SAFE)/(FREE-SAFE) 线性插值 —— 但减速有上限,等插到"该停了"时已经刹不住。改成物理判据后同轴穿模从 140 帧降到 0。

2. 两格宽主干道 = 两条并排车道,车能在半路拐进旁边那条再拐回来 —— 又变成"短距离来回开"(实测残留 3 辆就是这么来的)。加了只在路口拐弯(真车就是这样),归零。

3. 拐弯那一瞬间车道偏移会突变。 旧方向的"右边"≠ 新方向的"右边",车会瞬间闪 9 米,刚好闪到别的车身上。改成前半格内平滑过渡(车头朝向也一起平滑转,不然会瞬间打横)。

4. 出生点随机抽会抽重 —— 两辆车一出生就叠在 4 米内。这不是开车开出来的毛病,是发牌发重了,在出生环节一次性去重。

最终体检(同一张图 240 帧)

`

掉头 0 · 跑错地 0 · 同轴穿模 0 · 原地打转 0 辆 · 净位移占路程 92%

`


B · 真地形 —— 公园的小山能走上去

上一轮的"小山"是画在平地上的一个体块:看着有山,走上去还是平的。主席直接点了这个。

做法

实测

检查结果
高度场对不对山顶 11.33m · 半坡 6.39m · 山外 0m(半径 55m)
人能不能走上去山外眼高 1.7m → 山顶眼高 13.03m,抬升 11.3m(正好等于山高)

城区仍然是平的 —— 全图地形要牵动道路、楼基、车流,那是另一个量级的工程,这一轮不碰。


C · 游乐设施动起来

新开了一个「动态层」

整座城是合并成几块的静态几何(所以几万个三角才只用十几次 draw call)。会动的东西不能待在里面。所以单开两条小缓冲

缓冲装什么实测占用
设施(线)摩天轮 / 过山车车厢 / 旋转木马432 顶点(上限 4096)
灯珠(点)每个路口两颗红绿灯266 顶点(上限 1024)

每帧只重写这两条,静态那几万个三角一个字节都不用碰

动的细节

实测


我自己的判据也修了三处(诚实留痕)

这一轮有三次是判据本身错了,不是代码错了。都改了,并写清为什么:

原判据错在哪改成
"净位移小" = 原地打转绕街区一圈回到原点也是净位移小 —— 那是正常交通量"离起点最远到过多远"(在一格内蹦的车永远出不了 45m)
两车 <5m = 穿模垂直方向两辆在路口拐角相距 3m 是真实的只算同一条轴上的;垂直方向的另计一个数,分开报
全画面平均色差 = 有没有动细线在转,一平均就淹了改成"有多少比例的像素真的变了"

> 第三条在改完之后,判据值从 0.28(测不出)变成 1.43%(清清楚楚)。前两条改完之后,被误判的"毛病"归零,真正的毛病(同轴穿模 140 帧)反而暴露出来并被修掉了。


实测汇总(本地跑一遍、把线上文件下载回来再跑一遍,共 98 项全绿)

项数内容
A/B/C 新增15/15红绿灯 6 项 · 真地形 3 项 · 动起来 3 项 · 车流不退化 1 项 · 无报错
A–G 综合28/28跨格建筑 · 车和机器人 · 街道杂物 · 新立面 · 车流 · 设施 · 贴图尺度
楼房系统25/25四档分布、12 种立面、随机拼接、老模板不受影响、7 套材质
第一人称18/18走/看/飞/碰撞/窗口跟人搬/车不上人行道/活物不重叠
材质+小地图12/129 套模板 0 报错、7 套材质逐像素互不撞脸、FPS、小地图

红队:这轮哪里可能判断错了

最强反对:「拥堵波」这个说法可能是过度包装。

我量到的是"速度标准差 10.04"和"停/慢/中/全四档都有"。但速度分散 ≠ 存在拥堵波。真正的拥堵波是一个沿车队向后传播的时空结构(stop-and-go wave),要证明它存在得看"减速事件的传播速度是负的"。我没测这个。现在的证据只能支持"车流不再匀速、有排队和起步",不足以支持"有拥堵波"

回应:机制上是对的 —— 加减速上限 + 跟驰确实是 stop-and-go wave 的标准成因(这是交通流理论里的经典结果)。但我量到的东西比我说的弱,所以这份报告里"拥堵波"三个字应该读作"具备产生拥堵波的机制,且速度分布确实不再均匀"。

可证伪锚:下一轮如果去测"减速事件沿车队的传播速度",测出来是负值(约 -15~-20 km/h,交通流理论的经典值),才算真证实。如果测出来是 0 或正的,那说明我这套只是"随机快慢"不是"波",需要重做。

诚实列缺口


*支撑文件:web/terminal/maptext/index.html(车流引擎 v2.1 + 地形高度场 + 动态层)· facilities.js(设施内部布局)· maptext.js(道路/设施/span)· buildings.js(12 种立面)*