批次 510 | 2026-09-16 | 类型:纯分析批,零代码改动
你这份方案的主干是对的,而且它恰好命中了我们连续三批卡死的真正原因。但方案里有四处需要修正 —— 其中一处若不修正,会把你重新带回「两台相机」那个错误框架里。
三句话总结:
在评审你的方案之前,先纠正我自己。看完原图并做像素级测量后,我此前对样张的描述有两处硬错误:
| 我说过 | 实测真值 | 后果 |
|---|---|---|
| 「地平线在 70%」 | 56.2% | 前三批所有构图定位全部偏了 14 个百分点 |
| 「CT-1 是暗色剪影块,只有轮廓亮;我在画灯珠,方向错了」 | 完全反了 | 480 之后我一直在把城市做得更暗、更糊 —— 往反方向努力 |
实测数据(地平线以下区域,约占画面 44%):
| 指标 | 实测 |
|---|---|
| 平均亮度 | 34.9(不是"接近黑") |
| 第 95 百分位 | 94.0 |
| 亮度 >20 像素占比 | 63.6% |
| 最大连续亮块 | 479,805 px(占下半区 24%) |
| 暗区(<14)占比 | 仅 23.7% |
| 青蓝色像素占比(下半) | 96–98% |
也就是说:样张的城市区是一大片青蓝色、中高亮度、纹理极密的连续区域,塔群是个体清晰、轮廓分明的高楼 —— 完全不是"暗色剪影"。
我 490 那批"柱阵 → 细带"的两极摆动,根因不是"画法不对",而是我把目标本身看错了:我以为要压暗,实际样张的城市比我做的亮得多。
这条修正比任何参数都有价值 —— 它说明前三批的失败不在工程能力,在靶子瞄错了。
我把原图做了多尺度分解(大尺度=天空底 / 中尺度=线面结构 / 小尺度=星点与细节),分离结果如下。
这一节是你方案第一句"先把参考图拆解成可控视觉层"的实证执行。
| # | 视觉层 | 面积占比 | 构成要素 | 提取依据 |
|---|---|---|---|---|
| ① | 天空底 · 大气渐变 | 25.8% | 暗蓝渐变,左上最黑 L≈3 | 低通 σ=45 |
| ② | 星野 · 银河雾 | 1.0% | 数百颗 1–3px 星点 + 上方青色雾团 | 小尺度高通 σ1.2 − σ5 |
| ③ | 星座网络 · 连线 | 2.2% | 亮点 + 细连线,几何网络 | 中尺度线性结构 |
| ④ | 月牙 · 唯一暖焦点 | 0.04% | 金色月牙,仅 926 像素 | 暖色掩膜 |
| ⑤ | 中轴光柱 + 辐射网 | 6.0% | 垂直光柱(x=50%)+ 8–12 条辐射线 | 中央线性结构 |
| ⑥ | 山脉框景 · 左右对称 | 3.2% | 左右各一条山脊线,构成取景框 | 两侧中尺度剪影 |
| ⑦ | 城市天际线 · 密集塔群 | 12.7% | 塔个体清晰,塔尖高出地平线 | y 46–63% 中尺度 |
| ⑧ | 俯视城市肌理 · 路网/街区 | 33.6% | 道路网格 + 街区 + 环形地标 + 水系 | y > 60% 中尺度 |
| ⑨ | 前景 · 人影与地光 | 2.8% | 中心人影 + 脚下发光圆盘 | 底部中央 |
事实一:九层之间没有相互依赖 —— 层 i 的生成不需要知道层 j 的内容。
这在工程上意味着分层合成不只是"可能",而是天然可并行。你的方案成立,有实证支撑。
事实二:真正撑起画面的面积只有 4 层。
⑦ 城市天际线(12.7%)+ ⑧ 俯视肌理(33.6%)+ ① 天空底(25.8%)+ ⑤ 辐射网(6.0%)≈ 78% 的画面。
其余五层(②③④⑥⑨)合计不到 10% 面积,但全都是"气质层" —— 去掉它们画面立刻从"作品"变成"图表"。这解释了为什么单靠调城市参数永远调不出感觉:我一直在 78% 的工程层里打转,从未立起那 10% 的气质层。
事实三:画面真正的构图骨架是第 ⑤ 层"中轴光柱 + 辐射网",不是城市。
它只占 6.0% 面积,却把月亮(52.4%)、人影(画面底部中央)、城市(两侧)、道路(向外扩散)全部串在一条中轴线上。这一层我此前完全没有发现。
而它恰好是真实数据最优雅的落点 —— 可以用真实路网投影成辐射网。
| 你的判断 | 为什么成立 |
|---|---|
| 不再定义为「3D 城市场景」,改为「真实地理数据驱动的实时视觉合成系统」 | 样张是构图作品不是场景快照;九层可分离已证明这一点 |
| 先拆解参考图 → 建艺术合成引擎 → 再映射真实数据 | 这是整个困局的解。前面三批失败的机制就是从数据出发往效果上凑;正确顺序是从效果出发建立语法,再让数据填进语法槽位 |
| 先做「样张生成器」,不碰全球 / GPS / 网页 | 变量隔离。全球化和实时化都是数据生产与工程优化问题,与"能不能复刻这种视觉语言"无关,混在一起会把两者都拖死 |
| "数据真实,视觉艺术化" + 视觉高度映射 | 这条推翻了我上一批的结论。我说的"诸暨 60m 做不出天际线"只在物理真实渲染前提下成立。一旦脱离物理相机,高度就只是构图参数 —— 是我自己加了不必要的约束 |
修正一:「双视点合成」不是核心,是结果 —— 建议放弃"相机"这个隐喻
你原文有两句:前面说"双视点合成是整个方案最值得保留的核心",后面说"你不会再被'两台相机'这个错误的框架带着跑"。这两句其实是矛盾的,而后者才是对的。
真相是:当城市被拆成 ⑦ 天际线层 + ⑧ 肌理层 两个独立图层后:
旧的错误框架: 一个 3D 场景 ← 两台相机 ← 物理上互斥 ← 无解
正确的框架: 两个独立图层,各自有自己的「投影假设」
⑦ 层:假设视点低 → 塔群遮挡关系向上堆叠
⑧ 层:假设视点高 → 路网向下透视收敛
↓
合成时按带融合,不需要任何"相机"存在
"双视点"是拆层之后的自然结果,把它当成核心来追求,就会重新掉进"怎么让一台相机同时做到两件事"的死循环。 我 v3/v4 两个原型就是在这个框架里打转的。
修正二:「荧光粒子」需要精确化 —— 城市不是粒子云
样张城市的构成是三层叠加,不是粒子系统:
| 成分 | 实测占比 | 说明 |
|---|---|---|
| 线框 | ⑦⑧ 两层共 46.3% | 道路、建筑轮廓、辐射线 —— 大面积连续结构 |
| 点光 | ②④ 等 <1.5% | 星点、窗点、月亮 —— 稀疏、粒度 1–3px |
| Bloom | 全局 | 所有亮元素的辉光扩散 |
城市主体是连续线框,不是散点。如果用 GPU 粒子系统去实现,会重新掉进 440 那批「LED 点阵墙」的坑。建议措辞改为「荧光线条 + 稀点光 + Bloom」。
修正三:技术栈方向对,但阶段划分要改 —— 阶段 0 用不上 Three.js
你建议的核心栈是 Three.js + WebGL + GLSL + GPU Particle。方向我认同,但:
阶段 0(语法复刻)根本用不上 Three.js。 它是纯 2D 图层合成,一个全屏 quad 的 fragment shader 就够了。引入 3D 引擎会让人本能地去建 3D 场景 —— 这正是前面卡死的机制本身。
修正四:方案里有两个互相矛盾的下一步,建议按后者走
你前面建议「下一步做台北 101 × 3km POC」,后面说「先做样张生成器,不碰全球城市、不碰 GPS、不管网页」。
建议按后者。 台北 POC 仍要背真实数据 —— 一旦数据形态与语法不匹配,立刻又会陷入"改数据还是改语法"的双变量纠结。先纯语法(零数据),再映射(有数据),是唯一能隔离变量的顺序。台北 101 留到阶段 1 的第一个样本。
补充一:必须钉死一条代码级设计公理
「语法层可以自由,但每个进入画面的城市元素必须可追溯到真实数据」。
这条不是审美要求,是红线防御。 你的"艺术合成引擎"如果做得太自由,会自然滑向"我画一张好看的黑青插画" —— 那就是 AI 生图/纯手绘,再次触项目红线。
正确做法:每个图元带 source 字段(osm:way/12345 或 synth:seed=7),合成器可随时输出"画面构成溯源表"。你说的"不能伪造城市事实",要变成代码约束而不是口头原则。
补充二:样张里有两个"可识别性锚点",引擎必须留槽位
让用户"一眼认出这是我的城市"的,不是整体轮廓,而是具体地标:
引擎必须预留"地标高亮槽位" —— 用真实地标的 footprint 单独渲染 + 加强 Bloom。这是"这是我的城市"的唯一来源。
补充三:第 ⑤ 层(辐射网)是真实数据的最佳落点
前面提到,⑤ 是画面真正的构图骨架。它天然可由真实路网驱动:把真实道路按距离中心分级 → 投影成辐射网格 → 越近中心越亮。
这一层同时解决了三个问题:构图骨架有了、真实数据有落点了、"空间感"有了(视差就作用在这一层)。
阶段 0 · 语法复刻器 ← 现在做这个 输入:无(零真实数据) 输出:一张「同一个产品世界观」的画面 构成:9 层独立生成器 + 合成器 + 调色/Bloom 技术:Python/numpy(不碰 Three.js、不碰 worktree) 验收:你的眼睛(世界观一致,非像素一致) 阶段 1 · 真实数据映射 ⑦ 层 ← 真实建筑 footprint + 高度(含视觉高度映射) ⑧ 层 ← 真实路网 + 街区 + 水系 ⑤ 层 ← 真实路网投影成辐射网 地标槽位 ← 真实地标(台北 101 / 北京中国尊) 样本:台北 101 × 3km(有真数据)+ 诸暨(弱数据,验证高度映射) 验收:你的眼睛 + 「我能不能认出这是哪个城市」 阶段 2 · 实时化与交互 ← 才引入 WebGL/Three.js GLSL 化、60 FPS、鼠标视差、点击地标 阶段 3 · 全球化 纯数据生产问题(Geo Tile 流水线),非核心技术问题
| # | 问题 | 选项 |
|---|---|---|
| 1 | 阶段 0 的验收标准 | (A) "同一套设计语言/世界观" —— 可做,上限高 · (B) 像素级像 —— 只有贴图一条路 |
| 2 | 是否现在开工阶段 0 | 零数据、零 worktree 改动、纯沙箱出样张 |
| 3 | 视觉高度映射的边界 | 真实 60m 的楼,允许把轮廓存在感增强到什么程度?(我建议:增强轮廓与辉光,不虚构楼体数量与位置) |
产物:
assets-510/LAYERS-ct1-decomposition.png —— 样张 9 层拆解图(本分析的核心证据)ROUND-20260916-510-方案评审.md + 同内容 HTML纪律:本批为纯分析批。
src/、functions/ 零改动/sky 仍为 09-13 v2proto2d/analyze_ref.py、proto2d/decompose_layers.py关键修正记录(供后续批次引用):