日期:2026-08-02 | 项目:M-382 / P581 | 在线试:https://metazero-terminal.pages.dev/maptext/
入口:选模板「⭐ 大都市(东京/纽约 · 模块化楼房)」→ ▶渲染 → 🚶走进去;想看零件点「🏢 楼房图鉴」
原来一栋楼是一根挤出的柱子 + 几十个窗户光点,远看像针、近看像铁丝笼。
现在一栋楼是四段随机拼出来的(底座+中段+冠顶+屋顶件),墙面走可平铺的立面贴图。
一张图里 1,173 栋楼长出 480 种不重样的组合,而且比原来更省——光点从 31,353 降到 6,116(省 5.1 倍),三角从 23,768 降到 13,048,帧率 101%(没有变慢)。
| 主席原话 | 做法 |
|---|---|
| 「像东京那种房子,很多密集的窗口,但那些都是贴图」 | 9 种立面贴图,其中「东京密集窗」就是 8 开间 × 6 层一格一窗;白天/夜晚各一套 |
| 「没必要花太多资源」 | 窗户一个几何体都不建。整面墙只有 2 个三角形,几层几开间由 UV 重复次数决定 |
| 「有些高楼、中层的、低层的,你有些大类,每个大类里面多一些种类」 | 四个大类按最终高度自动分档,每类有自己的零件池和立面池 |
| 「他们都有对一个楼房分不同部分,然后做随机拼接」 | 底座/中段/冠顶/屋顶件四段各自抽签,抽签只认 (seed, x, z),所以同一份文本永远长出同一座城 |
主席要「几套不同的思路」——这三套我都认真算过账,选第三套是有理由的:
RepeatWrapping 铺满整面墙。一面墙 = 2 个三角形。map 属性挂在材质上,7 套材质风格一个都不用改(霓虹/日光/黏土/卡通/玻璃全都自动带上贴图,蓝图/线稿两套线稿风自动不带)。这是 B 做不到的。| 大类 | 高度 | 特点 | 能抽到的立面 |
|---|---|---|---|
🏙️ 超高层 mega | 150m 以上 | 摩天楼:一定有裙房和冠顶,顶上常带航空障碍灯 | 玻璃幕墙 / 东京密集窗 / 竖向长窗 / 横向带窗 |
🏢 高层 high | 60–150m | 写字楼、大厦:立面最密,楼顶常有水箱和机房 | 东京密集窗 / 玻璃幕墙 / 横向带窗 / 纽约石材方窗 |
🏬 中层 mid | 20–60m | 公寓、商厦:阳台格和石材方窗最像真实街区 | 阳台格 / 东京密集窗 / 纽约石材方窗 / 混凝土小窗 |
🏪 低层 low | 20m 以下 | 商铺、民居:靠招牌墙和雨棚撑出街面烟火气 | 招牌墙 / 阳台格 / 混凝土小窗 / 老城石砌 |
实测一张 384×384 大都市图的分布:超高层 297 · 高层 349 · 中层 445 · 低层 82。
| 段 | 候选 |
|---|---|
| 底座 podium | 直落地 / 商业裙楼(外扩一圈矮体量)/ 宽台基 / 架空柱廊 / 层层退台基座 / 商铺雨棚 |
| 中段 shaft | 直筒 / 收分锥体 / 退台三段 / 束腰桶身 / 错位分段(每段扭一点)/ 竖向凹槽(带通天壁柱)/ 双塔并排 / 圆筒 |
| 冠顶 crown | 平顶 / 女儿墙 / 阶梯冠 / 尖塔 / 皇冠立柱 / 斜切顶 / 穹拱顶 / 桅杆天线 / 退台冠 |
| 屋顶件 kit | 楼顶水箱 / 机房空调阵 / 停机坪 / 楼顶广告牌 / 航空障碍灯 / 楼梯间出口(按大类给概率,最多挂 3 件) |
实测:一张图 1,173 栋楼 → 480 种不重样的(大类/底座/中段/冠顶/立面)组合,六种底座、七种中段、九种冠顶、六种屋顶件全部真的出现过(不是列了不用)。
| 名字 | 一格几开间 × 几层 | 长什么样 |
|---|---|---|
东京密集窗 tokyo | 8 × 6 | 一格一窗、密到发亮 —— 新宿写字楼的标准脸 |
玻璃幕墙 glass | 6 × 4 | 整面玻璃 + 竖向铝框,反光深浅不一 —— 丸之内/曼哈顿中城 |
竖向长窗 slim | 6 × 4 | 通天石柱夹深色玻璃 —— 帝国大厦那种装饰艺术竖线条 |
横向带窗 ribbon | 4 × 4 | 一圈到底的水平长窗 —— 现代主义板楼 |
纽约石材方窗 prewar | 5 × 4 | 暖色石材 + 规整方窗 + 窗台线 —— 战前老公寓 |
阳台格 apart | 5 × 4 | 外挂走廊 + 栏杆 —— 东京公寓最认得出来的一张脸 |
混凝土小窗 conc | 6 × 5 | 大片素混凝土,窗又小又少 —— 仓库/机房/野兽派 |
招牌墙 shop | 4 × 3 | 每层都挂竖招牌 + 雨棚 —— 歌舞伎町那种低层商铺 |
老城石砌 stone | 4 × 3 | 错缝石块 + 小窗 —— 复古英伦/石头老屋 |
每种都有白天/夜晚两套:夜里窗户是亮的(暖黄/冷白/蓝白三色随机),白天窗户是深的、墙是浅的——和地面「夜色/白天两套颜色」是同一个套路。
什么都不写=全部随机拼:
`
@legend
A tower h=170..330 color=#8fd8ff win=.85
`
这一行就够了——高度落在 170–330,于是自动判为超高层,再从超高层的池子里抽底座/中段/冠顶/屋顶件/立面。
想钉死某一段就写出来:
`
C tower2 h=110..210 tier=mega facade=glass shaft=setback crown=spire podium=retail
`
| 新属性 | 意思 |
|---|---|
tier | 大类,不写=按高度自动分(mega/high/mid/low) |
facade | 立面贴图(上表 9 个 id),facade=none =不要贴图、回到纯色面 |
podium / shaft / crown | 钉死某一段零件 |
兼容性:老写法 form=taper roof=spire 一个字都不用改,仍然按原样长(只是墙面多了贴图)。复古英伦、废土、迷宫、赛博朋克四套老模板的楼型实测一个像素都没变。
同一张 512×512 赛博朋克大城,只切换"墙面走不走贴图":
| 三角 | 光点 | 线段 | draw call | 帧率 | |
|---|---|---|---|---|---|
| 老写法(纯色面+窗户光点) | 23,768 | 31,353 | 67,021 | 6 | 4.23 fps |
| 新写法(立面贴图) | 13,048 | 6,116 | 61,661 | 15 | 4.26 fps |
| 变化 | −45% | −80%(省 5.1 倍) | −8% | +9 | 101% |
> ⚠️ 帧率是在 swiftshader 纯 CPU 软件渲染下测的,绝对值没有意义,只有比值可信。真机 GPU 高得多。
另一个干净对照:一张只有 100 栋满窗高楼、一件地面装饰都没有的图 —— 老写法 6,400 个窗户光点,走贴图后只剩 153 个(而且这 153 个是楼顶航空灯和尖塔灯,不是窗),省了 42 倍。
三套回归测试全绿(本地 + 线上各跑一遍,共 110 项):
| 套 | 项数 | 内容 |
|---|---|---|
| 楼房设计系统 | 25/25 | 四档分布、九种立面、贴图真挂上、随机拼接真出多样、同种子可复现、钉死零件、老模板不受影响、7 套材质、图鉴、走进去不卡楼、无 JS 报错 |
| 第一人称 | 18/18 | 走/看/飞/碰撞/窗口跟人搬/车不上人行道/活物不重叠 |
| 材质+小地图 | 12/12 | 8 套模板 0 报错、7 套材质逐像素互不撞脸、FPS 读数、小地图、随机传送 |
最强反对:「立面贴图能解决大都市感」可能是错的。
真正让人觉得"这是东京"的,也许不是窗户密度,而是招牌、电线、空调外机、狭窄巷道这些街道级杂物。如果是这样,那把力气花在立面上是花错了地方。
回应:两者都贡献,但顺序不能倒。没有立面时,一栋楼就是一块纯色板——贴什么招牌都救不回来;有了立面,招牌才有地方挂。所以先立面、再街道杂物。
可证伪锚:主席看完这版截图,如果说"还是不像东京",那说明我判断错了,瓶颈在街道级杂物和巷道尺度,下一步应该转去做那个,而不是继续加立面种类。这一条主席一句话就能检验。
诚实列缺口:
span=2x3)才能出现"一整个街区是一栋大楼"和院子/停车场。1. 多格建筑 span=2x3 —— 上一份报告点名的头号结构缺陷,做完城市形态立刻不一样
2. 街道级杂物 —— 沿街招牌、电线杆+电线、空调外机、自动贩卖机(这是"东京感"的另一半)
3. 地面材质分种类 —— 沥青/车道线/斑马线/人行道铺砖,各走各的贴图
4. 约束型规则 forbid / require —— 让随机生成不再出荒唐结果
*支撑文件:web/terminal/maptext/buildings.js(立面贴图生成器+零件池+四档大类+抽签器)· web/terminal/maptext/maptext.js(图例新属性+大都市模板)· web/terminal/maptext/index.html(渲染器+楼房图鉴)*