← 回成果库

楼房系统 A/B/C/D —— 多格建筑 · 街道杂物 · 三套新立面 · 车和机器人搬入

日期:2026-08-02 | 项目:M-382 / P581(第二批)| 在线试https://metazero-terminal.pages.dev/maptext/

入口:模板选「⭐ 大都市」或「⭐ 港岛老街」→ ▶渲染 → 🚶走进去 | 立面挑号看「🏢 楼房图鉴」


0. 一句话

主席点的 A/B/C/D 四件事全做完了,共 17 项新检查 + 55 项旧检查全绿,本地跑一遍、把线上文件下载回来再跑一遍

其中 A 多格建筑是上一份报告自己点名的头号结构缺陷,这次补上了。


A · 多格建筑 span=2x3 —— 头号结构缺陷补上了

做了什么

@legend 新增 span=2x2(最大 8x8)。写上它,一栋楼就吃掉一整片地块——不是四栋楼挤在一起,是一栋楼占四格

`

S super h=200..340 span=2x2 facade=glass color=#cfeaff win=.9

`

命门:谁当锚点,必须是【算出来的】而不是【抢出来的】

最容易写错的做法是"从左上往右下扫,谁先占谁算数"。这在这个系统里必崩,原因是:

> 大图只渲染镜头附近的一个窗口。人一走,窗口就搬家,扫描的起点跟着变 ——

> 于是同一栋楼上一秒是 2×2、下一秒变 1×1,走一步城就抖一次

正确做法:锚点判据 = 对齐到自己那套跨格网格 + 整片 footprint 合法,这是一个只看 (x,z) 的纯函数,跟从哪儿开始扫毫无关系。

两条硬规矩:

碰撞:整片都得是硬的

只登记锚点那一格的话,人能从楼的另外三格直接走进去。现在整片 footprint 每一格各登记一个"以自己为中心"的实心圆,拼起来就把长方体铺满了。

实测

检查结果
跨格楼真的长出来1,092 栋楼里 27 栋是 2×2,最高 645m
整片都是硬的2×2 的每一格中心都被推开(886–932m),人在楼里=false
窗口搬家不抖8 次挪窗口、重叠区比对 17,248 格,不一致 0 处

B · 街道杂物 10 种 —— "东京感"的另一半

挂墙上摆地上
bigsign 沿街伸出来的大竖招牌(歌舞伎町那一笔)pole 电线杆 + 电线
acbank 外挂空调机阵(一整面墙密密麻麻挂一排)vending 自动贩卖机(货柜面会亮)
vent 外墙排风管(从地面爬到楼顶,中间几道箍)standsign 立式灯箱招牌
ladder 外挂逃生梯bin 垃圾桶 · bikes 一排自行车 · cone 施工锥

电线的一个细节:电线杆固定放在格子边中点(不随机),只有下一格也有电线杆时才拉线——否则会有一根线吊在半空。实测 479 根杆里 212 对是紧挨着的,只有这些之间连线。

实测:10 种里 9 种在大都市图里真的出现了(cone 只在广场上、这一窗恰好没广场)——pole×318 vending×174 standsign×177 bin×95 bikes×108 bigsign×351 acbank×270 vent×74 ladder×59


C · 三套新立面(立面共 12 种,都编了号)

名字长什么样
10香港唐楼 tonglau铁窗花(井字格)+ 密密麻麻的晾衣杆 + 横伸招牌 —— 九龙那种叠得满满的老楼
11上海石库门 shikumen清水红砖错缝 + 石门框 + 十字窗棂 —— 里弄老房子
12迪拜金玻璃 goldglass金色反光幕墙 + 竖向金线 —— 海湾那种一整栋发亮的塔

新模板「⭐ 港岛老街」演示这三套:785 栋楼,唐楼×376、石库门×232、金玻璃×54。

🏢 楼房图鉴现在给每张贴图编了号(01 号东京密集窗 … 12 号迪拜金玻璃),主席看中哪张直接报号就行,不用记 slim prewar 这些英文。


D · 8 款车 + 8 款机器人搬进大都市

整批复用知识城市的 street.js,一句台词、一个模型都没重写(Rule-DEDUP-001)。

检查结果
8 款车全用上80 辆车用满 8 款(悬浮跑车 / 磁悬浮出租 / 货运卡车 / 巡逻机 / 单轮环车 / 三轮送货 / 双层巴士 / 泡泡舱)
8 款机器人全用上60 个机器人用满 8 款,名字也带过来了(守卫 G-1 / 搬运工 K-17 / 服务生 S-6…)
是真模型不是四根线平均每个活物 519 个顶点(原来车 12 个、机器人 8 个)
三套配色都用上3 套
撞上去会说话街头 J-4(6号·悬浮乐手):「这首曲子只有一个音,重复到你听出第二个音为止。」它停 3.5 秒
对话是多步 + 带岔路连点 3 步,中间真出现了带选项的岔路口

性能上仍然只占 1 次 draw call:车和机器人是刚体(只有一个绕 Y 的偏航角),所有顶点写进同一条缓冲,每帧用 cos/sin 转成世界坐标——不是给每辆车建一个 mesh。

这一步同时是剧情层的地基:一幕 = 一串步骤,步骤要么是一句话、要么是一个带选项的岔路口。以后加剧情只改 street.jsDIALOGUE,渲染这边一行都不用动。


顺手做的一件事

主席多次说「地面是黑的」。默认路面色 #14223a 实在太深,两套新模板的路面/人行道色提亮到 #2b3446 / #3c4557,配上这轮加的地面颗粒贴图,站在街上低头终于有东西看了(对比见截图)。


实测汇总(本地 + 线上各跑一遍,共 72 项)

项数内容
A/B/C/D 新增17/17跨格生成/整片实心/窗口不抖 · 8车8机器人/真模型/对话岔路 · 10种杂物/电线成对 · 3套新立面/图鉴编号/无空白贴图
楼房系统25/25四档分布、12 种立面、贴图真挂上、随机拼接、同种子可复现、老模板不受影响、7 套材质
第一人称18/18走/看/飞/碰撞/窗口跟人搬/车不上人行道/活物不重叠
材质+小地图12/129 套模板 0 报错、7 套材质逐像素互不撞脸、FPS、小地图、随机传送

性能没退步:同一张 512 大城,走贴图 vs 老写法 = 帧率 106%,光点省 5.1 倍,draw call 6→15。

⚠️ 帧率在 swiftshader 纯 CPU 软渲下测,绝对值无意义,只有比值可信


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

最强反对:「多格建筑是头号缺陷」这个判断,这轮的数据其实没证实。

27/1092 ≈ 2.5% 的楼是跨格的,比例这么低,主席看截图很可能根本注意不到差别。如果真是这样,那说明上一份报告把它排在第一位是排错了,真正的瓶颈另有其人。

回应:比例低是权重设的低weight=4 vs 低层的 7),不是能力问题——把权重调高,跨格楼立刻遍地都是。但我故意先给低比例:一座城里"整个街区一栋楼"本来就该是少数,多了反而假。这一条主席一句话就能检验:如果您说"跨格楼太少、看不出来",我把权重调上去就是了。

诚实列缺口


*支撑文件:web/terminal/maptext/buildings.js(12 种立面 + 零件池)· maptext.js(span 锚点算法 + 两套新模板)· index.html(跨格渲染 + 街道杂物 + 活物模型 + 对话引擎)*