视觉规格书 v3.0c · 审计回应版 · 2026-09-16

Tempo Soul 首页视觉规格书 v3.0(整合版)

本文档地位:/sky 首页视觉的唯一权威(single source of truth)。

取代:SKY-VISUAL-STANDARD-v2.md(构图/色彩/亮度/判据全体继承并修订)、SKY-VISUAL-SPEC-v1.md、SKY-STYLE-DNA-v1.md、SKY-VISUAL-SPEC-v1-ADDENDUM-80-20.md(历史依据)。

新增吸收:老板《Tempo Soul 首页视觉规格书 V1.0》(2026-09-16)+ 批次 510 样张实测修正。

建档:可吉(WorkBuddy)|日期:2026-09-16|批次:520

上位纪律:真实数据管线红线不得触碰;未验收不得部署线上。


0. 一句话结论

把 /sky 首屏从「3D 城市场景」重新定义为「真实地理数据驱动的分层视觉合成系统」——这是正确的。但本批实测挖出了更根本的一件事:项目内部冻结的构图基线 CT-1,是老板参考图(ref-c)下半部被纵向压缩到 73.8% 的版本(两图上 48.8% 逐像素最大差仅 10,属 JPEG 噪声量级;下 51.2% 呈严格仿射关系 y=1.355x−344)。此后三个独立批次(440 / 480 / 490)、数千次迭代,全部在追这个被压缩过的靶子 —— 而且用错的判据把「城市带偏暗」判成了「城市带超亮」,修复方向整体反了。

一句话根因:靶子被改过,而且判据口径跟着一起错。 与技术能力无关。

⚠️ 本结论的证据等级与裁决状态(v3.0c 审计修正)

该结论现为 E1(本端可复现实测,方向经 falsify 检验),尚非 E0(E0 需要独立复核或老板确认)。它不依赖时间戳:方向性由「信息损失不可逆」检验确定 —— 5 种标准重采样核中最好的一个(LANCZOS)也只能从 CT-1 复原 ref-c 的 92.5% 细节,且下半部逐像素最大差达 243(远超「纯重编码」的色差量级),反命题被 falsify。

但「压缩是有意修改还是无意走样」这一点,文件本身无法回答 —— 只有老板能(§21 Q0)。 在 Q0/Q1 答复前,本文档凡由 ref-c 导出的全部阈值一律标记为「临时口径」(见 §1.4 与 §19.6)。


1. 文档地位与版本谱系

1.1 本文件是唯一权威

本文档是 /sky 首页视觉的 single source of truth。任何与本文件冲突的既有文档、代码注释、历史截图说明,以本文件为准。

1.2 版本谱系(谁被谁取代)

文档状态处置
SKY-VISUAL-STANDARD-v2.md(CT-1 冻结版)降级为历史冻结基线其 §1 北极星、§5 亮度体系、§6 元素模块、§7 风格基因 S1–S14、§8 排印、§12 红线 全数继承;其 §3 构图(CT-1 = 68.01%)被本文 §7 的 CT-2 取代,CT-1 资产本身不得删除、不得覆盖
SKY-VISUAL-SPEC-v1.md已被 v2 取代,v2 已被本文取代保留为档案;其中 §3「亮度层级 L0–L5」是参数推导源,继续有效
SKY-STYLE-DNA-v1.md被继承§1 风格基因 S1–S14、§3 嫁接矩阵 全数有效
SKY-VISUAL-SPEC-v1-ADDENDUM-80-20.md部分废止其「天 80 / 地 20」构图 废止(与 CT-2 的 57 / 43 冲突);其 §3 能量连接场、§4 地标可辨识度约束、§8 判据 V19–V28 继续有效
老板《Tempo Soul 首页视觉规格书 V1.0》(2026-09-16)主体采纳,8 处修正见 §2 审计总表

1.3 上位纪律(不可触碰)

  1. 真实数据管线红线:禁止回归 AI 猜图 / AI 生图静态方案;禁止以位图整幅贴图作为默认路径。
  2. 未验收不得部署线上。
  3. 不得删除基准资产:docs/design/ 下全部基准图、D:\专家论证稿\、AI 地图主文件。
  4. 不得以「待老板确认的口径」签发硬判据(v3.0c 新增)。任何阈值在被确认前,必须显式标注「临时口径」,且不得用它做出「达标 / 不达标」的终局判决。

1.4 证据等级与复核制度(v3.0c 新增 · 制度性修复)

本节的由来:v3.0 在 §2 写下「实测证据 > 老板原文 > 既有规范 > 我的推断」,但「本端实测」恰恰是我自己做的实验 —— 等于把「我的推断」换了个名字排到第二位。这构成一个循环:用自己未复核的实测去推翻别人的说法,再用「实测优先」这条自己定的规则为自己背书。 本节把这个漏洞制度化堵住。

等级定义可否用于推翻他人结论可否写入硬判据
E0有确定性脚本 + 原始资产 + 第三方(含老板)复现成功✅ 可以✅ 可以
E1有确定性脚本 + 原始资产,本端单方复现(无外部复核)✅ 可以(但须标 E1)⚠️ 仅可作「临时口径」,须同步给出复核路径
E2估算 / 类比推理 / 未跑脚本的肉眼判断❌ 不可以❌ 不可以
E3我的推断、记忆、直觉❌ 不可以❌ 不可以

强制要求(写入流程,不写在别处):

  1. 每一处关键测量必须注明:① 脚本路径 ② 输入资产路径(含哈希)③ 随机性(确定性 / 种子)④ 证据等级 ⑤ 复核路径(谁能怎样复现)。
  2. 关键测量清单(下列 5 项为「靶子级」测量,改一项等于改整张判据表):
  1. 「靶子级」测量在 E0 之前不得单独支撑终局判决;可写为趋势判决(偏高 / 偏低 / 方向反转),不得写为精确倍数判决(见 §19.6 稳定域)。
  2. 自我纠错同样需要外部校验:§2.4 所列「被实测推翻的结论」全部出自本端前批结论,属 E1 自纠。每条自纠须附「外部可复核的最小步骤」,否则降级为「待复核」。

本次已执行:§3.1c 的基准链溯源已按本节要求补齐脚本与证据等级,脚本 proto2d/verify_baseline_chain.py(确定性、无随机),输出 assets-520/verify-baseline-chain.json + .log.txt + VERIFY-baseline-chain.png,复核路径见 §3.1e。


2. 审计总表:老板 V1.0 规格书 × 既有规范 × 实测证据

审计口径(v3.0c 修订):E0 实测 > 老板原文 > 既有规范 > E1 本端实测 > E2/E3 推断。

修订说明:v3.0 原文写的是「实测证据 > 老板原文 > 既有规范 > 我的推断」,其中「实测证据」被隐含等同为 E0。但本批全部实测均为本端单方复现(E1),把它排在老板原文之上,等于「用自己的实验推翻老板、再用自己定的规则背书」。现改为:E1 本端实测与老板原文并列,冲突时不自行判决,走 §21 开放问题。(老板原文若被 E1 实测挑战,须在 §21 立 Q,不得在正文直接推翻。)

本节状态:§2.1–§2.4 的条目本身不变,但其「依据」列的等级按 §1.4 重新标注。

2.1 采纳(12 条 · 直接成为 v3 正文)

#老板 V1.0 条目采纳理由
1页面定义为「实时视觉场景」而非「3D 城市」与 500/510 批实测结论一致;单相机追不出目标构图
27 层结构必须独立控制,不做成一个 3D Scene510 批实测:样张可分离出 9 层,层间零依赖 ⇒ 工程上成立
3「不还原参考图,只继承构图 / 光线 / 气质 / 线条语言」这是全篇最重要的一句,直接解掉「1:1 与红线互斥」的死结
4星空必须真实天文计算(位置+时间+算法),禁随机撒点 / 禁图项目已有 Astronomical Engine,属继承而非新建
5地平线辉光是视觉锚点,且「极薄、极柔、不形成明显横线」与 v2 §3.6 已知残留(辉光带)一致,v3 定为必须解决项
6城市表现 = 高度 + 轮廓 + 极细线 + 局部辉光,不需要完整实体直接推翻 480 批「5803 栋实体化」的错误路线
7权重表:构图 ★5 / 氛围 ★5 / 轮廓 ★4 / 真实数据 ★4 / 建筑细节 ★2 / 真实 3D ★1这张权重表是资源分配的唯一依据,写进 §9 作为调参优先级
8城市肌理 = 「地图 × 星图 × 建筑线稿 × 粒子艺术」,禁 Google Maps / 3D 游戏感与 §12 硬禁令一致
9数据真实,表现艺术化(允许非线性视觉映射,不得虚构建筑)推翻我 500 批自设的「尺度天花板」约束 —— 老板是对的
10小城市三级降级(真实建筑 → 真实路网+地形 → 抽象粒子结构)诸暨实测(8km 内仅 10 栋建筑)证明这是必需品,不是可选项
11双引擎架构:Astronomical Engine + Geo-Luminous Engine + Visual Engine与项目现有模块边界吻合
12POC 五问验收(像不像那个世界 / 人在宇宙中 / 真实城市 / 生命节律 / 有无游戏赛博朋克感)用「人的眼睛」替代「机器数字」,正是 440 事故的根治药

2.2 修正(8 条 · 采纳其意,改其形)

#老板 V1.0 写法v3 修正后依据
M1「双视点合成是最值得保留的核心」降级为「结果」,不是「核心」。 正确表述:每层只保留一个投影假设,⑦⑧ 拆成两个独立图层后,「双视点」自然涌现 —— 不需要「相机」这个概念存在。把它当核心追,就会重回「怎么让一台相机同时做两件事」的死循环510 批;我的 v3/v4 原型正是死于此
M2「荧光粒子视觉世界」精确为 线框 + 稀点光 + Bloom。城市主体是连续线框不是散点实测:样张 ⑦城市天际线 12.7% + ⑧城市肌理 33.6% = 46.3% 是连续结构,非点云
M3§20 技术栈「Three.js + WebGL」方向对,但阶段 0 用不上 Three.js。阶段 0 是纯 2D 图层合成(Python/numpy 即可)。引入 3D 引擎会让人本能去建 3D 场景 —— 那正是卡死机制本身500 批实验:v3 单相机原型失败、v4 分层原型骨架成立
M4§12「Glow 宁可弱,不要强」加限定条件:弱的是 Glow 半径与溢散,不是结构层亮度。样张实测下半区平均亮度 34.9 / p95 94.0 / 63.6% 像素 > 20 —— 它是「亮而细」,不是「暗而糊」。我 480/490 批按「暗而糊」做,方向反了510 批实测
M5§22「天空占 50–60%」采纳,但必须同步裁定与 CT-1(68.01%)的冲突 → 定义新模板 CT-2,地平线 56 ± 2%。详见 §7实测:老板参考图地平线 56.2%,落在 50–60% 内,与其 V1.0 自洽;与 CT-1 不自洽
M6§26「三天 POC」移出规范(规范不写工期),改写入执行计划 §19–§21,并拆成 Day 1/2/3 可验收的层工期属计划域,不属标准域
M7§25「第一阶段砍掉 GPS / IP 定位」阶段 0 采纳;但项目现有 IP→坐标 L1 链路不得删除、不得改动,只是阶段 0 不接入已有能力;「砍掉」应读作「暂不接入」,不是「拆掉」
M8§18「可以把 10/20/30 映射成 10/25/50」采纳原则,但必须落成代码约束(每图元带 source 字段),不能只是口头原则;否则「艺术合成引擎」会自然滑向「我画了一张好看的黑青插画」= 手绘 / AI 生图,再次触红线510 批 §补充1

关于 M1 / M2 / M4 的等级声明(v3.0c):这三条是用本端 E1 实测去修改老板 V1.0 原文的表述。按 §2 修订后的口径,E1 不得直接推翻老板原文 —— 故这三条定位为「表述修正」而非「结论推翻」:它们没有改变老板的意图,只是把表述精确到可实现的层级(M1:双视点由「核心」变「结果」;M2:粒子由「散点」精确为「线框+稀点光」;M4:弱化的是「Glow 半径」而非「结构亮度」)。若老板认为这三条改动有违本意,请在 §21 立 Q 覆写。

2.3 驳回(2 条)

#条目驳回理由
R1§3「不要明显的银河 / 不要大面积紫红」 → 若读作「完全不要星云层」实测样张存在第 ② 层「星野·银河雾」占 1.0% 面积。驳回「完全不要」,保留「极弱、只作背景存在」的原文限定
R2§20「不建议把 Cesium 作为核心渲染器」 → 若读作「Cesium 完全不可用」Cesium 不用于首屏渲染是对的;但它可作为离线数据生产工具(地形/影像瓦片处理)候选之一。驳回「完全不可用」,保留「不作核心渲染器」

2.4 既有规范中被实测推翻的结论(必须作废)

本表全部条目均为 E1(本端自纠) —— 即「我推翻我自己前批的结论」。按 §1.4 纪律 4,每条附「外部复核路径」。这些自纠本身不享受 E0 待遇。

结论出处实测外部复核路径处置
地平线在 69.76%480 批及之前的误读该值来自标注面板的拼接缝(相邻行均值跳变最大处 50.88%,幅度 100.97)。v3.0c 更正归属:这条缝属于 SKY-BASELINE-CT1-annotated.png(2580×969 = 1920 画面 + 660 面板),不属于 ref-c。 ref-c(7.11)与 CT-1(7.98)均无拼接缝跑 proto2d/verify_baseline_chain.py §B;或直接量三图行跳变作废。真值 56.2%(行剖面)/ 58.4%(梯度法)。
「样张是暗色剪影,我在画灯珠,方向错了」490 批我自己的结论下半区 63.6% 像素亮度 > 20、最大连续亮块 479,805px。样张是中高亮度、纹理极密的青蓝色连续结构zone_probe_ct2.py / decompose_layers.py作废。上一批我因此把城市做得更暗更糊,方向反了。
「尺度天花板:诸暨最高 60m ⇒ 数学上做不出天际线」500 批我自己的结论「数据真实,视觉艺术化」允许非线性视觉高度映射无需脚本,属原则性判断(E1→原则)降级为「物理真实天际线不成立」;Tempo Soul 不受此限
「双视点合成是核心技术」500 / 510 批拆层后每层只有一个投影假设decompose_layers.py 九层分离降级为结果描述,见 M1

3. 基准资产裁定(本批最重要的一个决定)

3.1 事实

资产尺寸地平线(两法实测)暖色(月)来源
CT-1 冻结基线1920×96969.14% / 68.01%0.0485%docs/design/baseline/SKY-BASELINE-CT1.png
老板参考图 ref-c1920×96958.41% / 56.2%0.0485%docs/design/redraw-20260914/_refs/ref-c-老板参考构图.jpg
老板 V1.0 §22 文字—「天空 50–60%」—2026-09-16 规格书

三者中,老板 V1.0 的文字与自己的参考图(56–58%)自洽;CT-1(68–69%)是内部产物。

两种测量法:行剖面法(找地平线辉光峰值)与梯度法(行均值上升斜率最大处)。两法在两张图上系统性相差约 1–2 个百分点,故每个值给出两法结果。CT-2 取值见 §3.2。

3.1b 两靶的同口径硬对照(1920×969,CT-2 口径)

指标CT-1(旧靶)ref-c(真实目标)差异
地平线69.14%58.41%−10.7 pt
天空区 mean(0–54%)7.968.06+1.3% ✅ 基本一致
带区 mean(54–60%)10.5426.73+153.6%
带区 >20 亮度像素占比7.1%54.5%+47.4 pt
地貌区 mean(60–100%)30.6935.27+14.9%
纯黑 <1259.5%54.4%−5.1 pt
下半区青蓝(>R+6 且 G>R+2)81.0%89.2%+8.2 pt
全域 mean17.2220.07+16.6%

带区差异是这张表的核心:CT-1 的地平线在 68–69%,所以它的「54–60% 带区」仍然全是暗天空(mean 10.54、仅 7.1% 像素 > 20)。而 ref-c 的地平线在 57–58%,同样的 54–60% 区间已经是真实城市(26.73、54.5% 像素 > 20)。

用 CT-1 当靶子测「带区」,等于拿天空去比城市。

3.1c 变形链溯源:CT-1 是 ref-c 下半部的纵向压缩版(v3.0c 重写 · 已补 falsify 检验)

v3.0c 重写说明:v3.0 原文把「时间戳(16:33 → 16:39,+6 分钟)」当作主要证据。这条证据强度不足 —— 文件 mtime 可被复制 / 导出 / 保存动作改写,它只能证明「同一会话内先后生成」,不能证明发生了「压缩」这个具体变换;而且仿射拟合本身对方向不敏感(无论谁是谁的缩放,都能拟合出高相关)。本节据此重写:以「信息损失不可逆」为主证据,时间戳降为旁证。 全部数据由 proto2d/verify_baseline_chain.py 确定性复算产出。

① 事实一:上半部同源(逐像素)

区段逐像素最大差
y < 473px(< 48.81%)10(JPEG 量化噪声量级)
y ≥ 473px(≥ 48.81%)243(内容已错位)

v3.0 原文记「上半部最大差 = 0」。v3.0c 更正为 ≤ 10 —— 原值系按 5% 间隔抽样测量所致(抽样带恰好避开了那几行),全行扫描后真实上界为 10。在 JPEG 噪声量级内,「同源」结论不变。

② 事实二:下半部呈严格纵向仿射

独立复算(枚举 a∈[0.60,1.60]、b∈[−400,400],最小化下半部行剖面残差):

y(ref-c)px = 1.355 × y(CT-1)px − 344        (H = 969,行剖面残差 = 0.7793)
等价:y(ref-c)% = 1.355 × y(CT-1)% − 35.5%
反解:CT-1 下半部 = ref-c 下半部 × 0.7380(压缩到 73.8%)

v3.0 原文记 1.36 / −348、73.5%。v3.0c 复算为 1.355 / −344、73.8% —— 差异来自步长(原步长 0.01,本次 0.005)与插值方式(本次用 np.interp 而非最近邻)。两版结论一致,本版为准。

③ 事实三(新主证据):信息损失不可逆 ⇒ 方向确定

这是本次补上的、真正能 falsify 反命题的检验。设两个假说:

检验法:把 CT-1 下半块按各标准核放大回 ref-c 几何,看能否复现 ref-c。

重采样核MAE(放大的CT-1, ref-c)梯度能量比(vs ref-c)
NEAREST4.2688.0%
BILINEAR3.9880.2%
BICUBIC3.9388.2%
LANCZOS(最佳)3.9492.5%
BOX4.2688.0%

5 种标准重采样核里最好的一个,也只能复原 ref-c 的 92.5% 细节。

④ 事实四(新):排除「只是重新编码」

若 CT-1 只是 ref-c 的再编码(同尺寸、仅色差),下半部逐像素差应 < 30。实测最大差 243 ⇒ 内容位置已改变 ⇒ 排除纯重编码。(这条同时回应审计意见 1 提出的「可能是导出工具的一次重新编码」假说。)

⑤ 旁证(非主证据):时间戳与文件指纹

项ref-cCT-1CT-1-annotated
格式 / 尺寸JPG 1920×969PNG 1920×969PNG 2580×969
EXIF空空空
ICC456B sRGB / Google Inc. 2016无无
mtime16:33:4616:39:53(+366s)16:41:21(+88s)

新发现(v3.0c):ref-c 内嵌的 ICC profile 描述为 sRGB、info 含 Google Inc. 2016 —— 这是 Chromium/Chrome 内嵌的 sRGB profile 指纹 ⇒ ref-c 由 Chromium 系产出(浏览器截图 / 浏览器「另存图像」)。 这意味着 ref-c 的 mtime 记录的是「保存动作」的时间,不是内容生成时间 —— 因此 mtime 单证不足以定方向(审计意见 1 成立)。 方向由 ③ 的信息损失检验确定。

3.1e 复核路径(v3.0c 新增 · 按 §1.4 纪律 1)

项内容
脚本D:\workbuddy\2026-09-15-00-01-41\sky-build\proto2d\verify_baseline_chain.py
输入docs/design/redraw-20260914/_refs/ref-c-老板参考构图.jpg(262,699 B)<br>docs/design/baseline/SKY-BASELINE-CT1.png(1,626,873 B)<br>docs/design/baseline/SKY-BASELINE-CT1-annotated.png(1,807,857 B)
随机性无(全确定性计算,无抽样、无随机种子)
输出docs/sky/assets-520/verify-baseline-chain.json(全部数值)<br>docs/sky/assets-520/verify-baseline-chain.log.txt(全文报告)<br>docs/sky/assets-520/VERIFY-baseline-chain.png(证据图)
复现命令<python 3.13> proto2d/verify_baseline_chain.py(依赖 numpy / Pillow)
当前等级E1 —— 待任一方复跑成功即升 E0
要老板做的若您愿意,跑一次上面的命令并看一眼控制台 §D 段;或直接答复 §21 Q0

同一个脚本还顺带回答了审计意见 2 的两项(ref-c 纯净度、JPEG 量化敏感度),见 §3.1f。

3.1f 靶子纯净度与判据稳定性(v3.0c 新增 · 直接回应审计意见 2)

审计指出两个隐患:(a) ref-c 疑似「画面 + 标注面板」复合 ⇒ 用作亮度基准会被污染;(b) V44/V45 的推导基于对一张 JPEG 的 p99.9 测量 ⇒ JPEG 量化本身会削峰,精确倍数不可靠。两项均已实查。

(a) 拼接缝归属 —— v3.0 原文张冠李戴,已更正

文件尺寸最大行跳变最大列跳变
ref-c1920×9697.11 @y=34.47%10.11 @x=976
CT-11920×9697.98 @y=88.44%9.78 @x=976
CT-1-annotated2580×969100.97 @y=50.88%51.00 @x=1921

结论:那条「50.9% 拼接缝」属于 SKY-BASELINE-CT1-annotated.png,不属于 ref-c。 该文件是 2580 = 1920(画面)+ 660(标注面板)的横向复合图:列均值在 x=1919→1920 处由 12.83 跳到 60.00(面板左边框),面板底色 9.00–12.30。50.88% 的强行跳变由面板内容在纵向上的起止造成,与画面地平线无关。 历史「地平线 69.76%」正是在这张 2580px 复合图上误测的 —— 这解释了该错误的确切来源。

⇒ v3.0 原 D13「ref-c 在 50.9% 处有拼接缝」为错误归属,已在 §23.3 更正。

(b) ref-c 纯净度四查 —— 全部通过

查项方法实测判定
上下边带 UI 条行标准差(UI 条带=极低)上 5% 带 3.98(min 2.47)/ 下 5% 带 36.49 vs 全图 18.96✅ 无条带
左右边带滚动条列标准差左 3% 6.80(min 5.85)/ 右 3% 6.79 vs 全图 22.5✅ 无滚动条
纯色面板底最长「同值水平游程」(阈值 25% 宽)318px = 16.56% @y=9.39%✅ 无面板
四角 logo / 水印6% 方块亮度统计TL max 2.7 / TR max 2.0(纯黑,且 std 0.2–0.3)✅ 无浮层

⇒ ref-c 是单幅画面,不含标注面板 / UI 控件。§19 全部由 ref-c 导出的基准值未被污染,审计意见 2(a) 的风险排除。

(c) JPEG 量化敏感度 —— 结论方向可信,但精确倍数不可写死

把 CT-1(PNG 无损)按各质量重编码后重测:

JPEG 质量p99.9Δp99.9近白 L>200 占比Δ倍数
95163.00+0.000.0071%0.97×
90163.33+0.330.0074%1.01×
80163.33+0.330.0075%1.03×
70163.67+0.670.0078%1.07×
50163.00+0.000.0082%1.12×

对 ref-c(本身即 JPEG)重编码:p99.9 落在 164.0–165.67(Δ ≤ 1.34),近白占比 0.0060–0.0074%。

⇒ JPEG 量化对 p99.9 与近白占比的影响仅为「个位数点位」量级,而 480 批与目标的差距是 ~70 点 / ~130 倍量级。判据方向与量级完全可信;但「134 倍」「18.8 倍」这类精确倍数不得写成硬阈值。 §19.4b 的阈值已按此改为稳定域判据(见 §19.6)。

3.1d 这就是「两千次卡住」的真正根因

项目把老板的参考图下半部纵向压缩了 26.2%(压到 73.8%),并把这个压缩版冻结成「CT-1 基线」。此后 440 / 480 / 490 三个批次、数千次迭代,全部在追这个被压缩过的靶子。

⚠️ 两处必须由老板裁决、本端不得自行断定的地方(v3.0c 补)

  1. 意图未知:文件本身只能证明「发生了压缩」,不能证明这是有意修改还是无意走样(例如:某个上屏 / 截图 / 导出环节做了纵向适配,而产物被直接归档为基线)。只有老板能回答(§21 Q0)。
  2. 若压缩是有意为之,则 CT-1 本身就是「老板要的效果」,全部判据须回 CT-1 口径重算 —— 这是一个会翻转所有数字的岔路,必须以 Q0 为唯一开关。

在 Q0 答复前:§19 全部阈值标记为「临时口径」,不得用于终局判决(详见 §19.6)。

三层错误叠加:

层错误后果
① 靶子被改CT-1 = ref-c 压缩到 73.8% (是否为有意修改待 Q0 裁定)若为无意走样:城市永远比老板要的矮 26.2%
② 判据口径错用 CT-1 的 54–60% 带区(实际是暗天空,mean 10.54)去判定真实城市(ref-c 同区间 mean 26.73)「带区超标 +74.7%」判决方向完全反了
③ 自我加强480 批据②继续把城市压暗、压扁(winGain 收敛、高度幂压缩、TILE_Z_SCALE 调整)越修离目标越远

证据图:docs/sky/assets-520/PROOF-ct1-is-compressed-refc.png(含两图城市体等高缩放对照 —— 压缩后两块内容一致)

对照图:docs/sky/assets-520/TARGET-OFFSET-ct1-vs-refc.png(含 CT-2 分区线与实测地平线标注)

3.2 裁定(v3.0c 修订:区分「建表」与「施工」)

候选模板 CT-2:地平线 57 ± 3%(实测两法 56.2% / 58.4%);分区 天空区 0–54%、带区 54–60%、地貌区 60–100%。

门禁的两道闸(v3.0c 新增,解决原版自相矛盾)

v3.0 原文写「确认前不进入实施阶段」,但同一批又「同批完成」了 S0 回填 —— 而回填确实是实施的第一步。这是自相矛盾,现拆成两道闸:

闸允许做什么禁止做什么当前状态
闸 1 · 建表闸(不触碰 renderer,可逆,纯测量)重算基准值、建判据表、出证据图、写文档写任何渲染 / 合成代码✅ 已通过(S0 已执行,产物可一键回退)
闸 2 · 施工闸(会产出画面与代码,方向性投入)执行阶段 0 的 S1–S12在 Q0/Q1 未答复时动手🔒 关闭中 —— 等 §21 Q0 / Q1 / Q2

理由:建表闸的产物是数字与文档,即使 CT-2 被否,也只需重跑一次 probe(§28 已列此回退);施工闸的产物是画面方向,一旦押错方向就会重演 440–490 那种「数千次迭代全废」。把两道闸分开,才能既不等死、也不押错。

闸 2 的唯一开关是老板的一句话(§21 Q0 与 Q1)。在拿到之前,本端不写任何渲染代码。

3.3 为什么这是本批最重要的发现

前三个独立批次(440 LED 点阵墙 / 480 青色栅栏 / 490 竖柱阵)全部被判定为「不达标」,而判定所用的数字,是拿 CT-1(68–69%) 当靶子算的。真实目标(ref-c,老板参考图)在 56–58%。

靶子偏了约 11 个百分点 ⇒ 所有「超标 / 达标」判决都失去意义。 这是「两千次仍卡住」的第一个根因,与技术能力无关。

而且判决方向是反的。 以 480 批的带区为例:

数值对 CT-1(10.54)的判定对 ref-c(26.73)的判定
480 批实测带区20.77「超标 +74.7%」⚠️「偏低 −22.3%」⚠️

同一个实测值,换个靶子,从「太亮」变成「太暗」,结论 180° 反转。

这意味着 480 批的修复方向可能一直是错的 —— 当时为「降带区亮度」做的多轮调参(TILE_Z_SCALE / 高度系数 / winGain 收敛),是在把已经偏暗的城市继续压暗,而真实目标是一块更亮、更密、更连续的城市带(ref-c 带区 54.5% 的像素亮度 > 20)。

这与 §2.4 中「样张是暗色剪影」的错误认知互为因果 —— 两者共同构成了 440–490 三批失败的真实原因。


4. 视觉北极星(North Star)—— 唯一裁判

让用户站在自己的此时此地,面对宇宙,看见自己的生命节律。

4.1 三条不可让渡的气质判据

代号判据反例(出现即失败)
A1层级分明,无平铺所有元素同一亮度平铺;城市与天空糊成一片
A2暗空间是主体,亮是稀缺资源全屏泛亮;大面积霓虹
A3减法优先元素堆砌;为了"丰富"而加层

4.2 风格关键词(给设计 / 给 AI 的唯一口径)

Cosmic + Human + Reality + Rhythm + Luminous Wireframe + Particle + Minimal + Deep Space + Real-Time Sky + Abstract Geography

中文:宇宙、人在其中、真实世界、生命节律、荧光线稿、粒子、极简、深空、实时星空、抽象地理。

关键词不是 "3D City"。任何以 "3D City" 为目标的实现路径,一律视为方向性错误。


5. 分层结构与面积配额

5.1 九层模型(实测口径 · 权威)

样张经多尺度分解后得到 9 个可独立提取的层,层间零依赖。v3 采用此 9 层为实施口径。

#层实测面积类别与老板 V1.0 七层的映射
①天空底·大气渐变25.8%工程层= 老板① 深空
②星野·银河雾1.0%气质层= 老板① / ②
③星座网络·连线2.2%气质层= 老板② 星座
④月牙0.04%气质层= 老板 §17 月亮(单列)
⑤中轴光柱 + 辐射网6.0%气质层 · 骨架老板 V1.0 缺此项
⑥山脉框景·左右对称3.2%气质层隐含在老板④,v3 单列
⑦城市天际线·密集塔群12.7%工程层= 老板④
⑧俯视城市肌理·路网街区33.6%工程层= 老板⑤
⑨前景·人影与地光2.8%气质层= 老板⑥ + ⑦

5.2 两条由实测得出的配额铁律

铁律一:工程层撑体量,气质层定成败。

① ⑤ ⑦ ⑧ 合计 78.1%,是画面的体量;② ③ ④ ⑥ ⑨ 合计 9.2%,是画面的「气质」。后者任何一个缺失,画面从「作品」退化为「图表」。

前三个批次的全部工作量都投在 78% 的工程层里,那 9.2% 的气质层从未立起来。 这是「两千次仍卡住」的第二个根因。

铁律二:画面真正的构图骨架是第 ⑤ 层「辐射网」,不是城市。

它只占 6.0% 面积,却把月亮、人影、城市、道路全串在一条中轴线上。而且它可以直接由真实路网驱动 —— 这是真实地理数据在整个画面里最优雅的落点:既是构图骨架,又是数据落点,又是鼠标视差的载体。

5.3 分层实现约束

  1. 每层独立可开关、独立可调,禁止耦合进一个 3D Scene 后指望相机给出理想构图。
  2. 每层只保留一个投影假设(M1)。⑦ 用低视点剪影假设;⑧ 用高视点俯视假设;两者通过带融合拼接,无需「两台相机」这个概念。
  3. 层间通过 seam 位置 对齐,seam = 目标地平线(CT-2:56%)。

6. 逐层规范

6.1 ① 天空底 · 大气渐变(25.8%)

6.2 ② 星野 · 银河雾(1.0%)

保留(驳回 R1 的「完全不要」),但严格限幅:面积 ≤ 1.5%,亮度不超过相邻天空 +8。

6.3 ③ 真实星空 · 星座(2.2%)

数据来源(硬性):恒星位置必须由 用户位置 + 当前时间 + 天文算法 计算。不是随机撒点,不是背景图,不是 AI 生成。

项规范
恒星微小光点;不均匀分布;亮度有差异;极少数亮星明显突出;轻微呼吸
禁止满屏均匀小点;游戏式星空;大量闪烁;彩色星星
星座只显示重要星座(不全显);极细线;低亮度;线要像「有人用极细荧光笔在宇宙里轻轻画了一笔」
连线角度相邻夹角标准差 ≤ 5°;总张角 ≤ 120°;禁止抖动 > 5°(继承 v2 §6)
衍射星芒禁止(继承 v2)

6.4 ④ 月牙(0.04%)

6.5 ⑤ 中轴光柱 + 辐射网(6.0%)← 全图骨架

这是 v3 相对老板 V1.0 的新增层,优先级最高。

项规范
形态中轴一条光柱 + 由它辐射出的细网
骨架作用串联月亮、人影、城市、道路;画面视觉重心落在此轴
数据驱动用真实路网生成辐射网:以用户所在位置为原点,取 N 条主干道方向作为辐射线(N = 5–7,与 v2 §6 能量连接场条数一致)
亮度低于城市主体;不占 L1/L2 名额(焦点唯一律)
禁止在辉光带内形成横向连续亮带;抖动 > 5°

6.6 ⑥ 山脉框景 · 左右对称(3.2%)

6.7 ⑦ 城市天际线 · 密集塔群(12.7%)

表现优先级(严格按老板 V1.0 §7 权重表):整体构图 ★5 > 光线氛围 ★5 > 城市轮廓 ★4 > 真实数据 ★4 > 建筑细节 ★2 > 真实 3D ★1。

项规范
图元高度 + 轮廓 + 极细线 + 局部辉光。线框,非实体
禁止实体填充;完整建筑模型;CAD / Google Earth / 游戏城市感
塔身纯线框 + 窗格点阵(点径 1px / 间距 4px / α ≤ L5);禁止实体填充(继承 v2)
地标高亮槽位必须留。让人一眼认出「这是我的城市」的只有具体地标(样张右下有环形建筑、超出天际线一个量级的超高塔)
480 批状态判定「带区超亮 +74.7%」方向反了 —— 按 ref-c 应为「偏低 −22.3%」(§3.3);城市体纵高尚不足(目标 ≥ 40 pt);形态为「竖柱阵」,需重做

6.8 ⑧ 俯视城市肌理 · 路网街区(33.6%)

视觉目标:地图 × 星图 × 建筑线稿 × 粒子艺术。不是 Google Maps × 3D 游戏。

元素表现
道路极细发光曲线
建筑低亮度几何轮廓
河流连续柔和线条
地形等高线 / 粒子轮廓
大型地标明显但克制的轮廓

像素级事实:样张下半区实测 平均亮度 34.9、p95 = 94.0、亮度 > 20 的像素占 63.6%、最大连续亮块 479,805 px(占下半区 24%)、青蓝像素 96–98%。

即:⑧ 层是「亮而细」,不是「暗而糊」。 480 / 490 批按「暗而糊」做,方向反了(见 §2.4)。

6.9 ⑨ 前景 · 人影与地光(2.8%)

人物是页面的情绪核心,但:

前景环境代表「人的现实世界」,语义链:宇宙 = 无限;城市 = 现实;人物 = 我;前景 = 我所处的人生环境。表现用几何线条、曲折结构、粒子、微弱荧光、不完整轮廓 —— 形成「复杂、曲折、但仍可向前走」的空间。


7. 构图硬指标(CT-2)

7.1 分区(相对画面高度 y%)

分区区间(CT-2)内容
天空区0 – 54%① ② ③ ④ 天空底 / 星野 / 星座 / 月
带区(地平线)54 – 60%③' 地平线辉光 · ⑤ 中轴光柱 · ⑥ 山脉
地貌区60 – 100%⑦ 天际线 · ⑧ 肌理 · ⑨ 人影前景

7.2 硬指标

项指标
画幅16:9 横向 Hero(基准 1920×969;须设计移动端降级,见 §13 Q4)
地平线位置57 ± 3%(实测 ref-c:行剖面法 56.2% / 梯度法 58.4%)
城市集中区画面中下部
城市体纵高≥ 40 pt(判定口径:>20 亮度像素占比 > 35% 的连续行段;ref-c 实测 44.2 pt,CT-1 仅 32.5 pt —— 这是两靶的核心差异)
人物位置底部中央附近
两侧环境形成天然视觉框架
天空区占比50–60%(即上半部分为「黑色宇宙 + 星空」主体)
暗区占比≥ 50% 区域保持非常暗(黑色是本页重要的留白)

🔒 临时口径:本表的「地平线 57±3%」与「城市体纵高 ≥ 40 pt」均由 ref-c 导出,在 §21 Q0/Q1 答复前为临时口径(§19.6)。Q1 若选 (B),地平线须改回 CT-1 的 68–69%,纵高判据随之作废(CT-1 只有 32.5 pt)。

7.3 地平线辉光规范(视觉锚点)


8. 色彩规范

8.1 色板(严格克制)

角色色配额说明
主色黑≥ 50% 面积留白,不是「空」
第一视觉色青蓝 / 电光蓝画面主体结构样张实测青蓝像素占 96–98%(下半区)
第二视觉色极淡白蓝辅助最亮线、关键轮廓
强调色极少量暖色≤ 0.5%仅限:极少数重要地标 / 特殊光点 / 用户交互反馈 / 月亮

8.2 硬禁令

暖色禁止大面积使用。 480 批实测暖色 0.008%(月亮缺失),需补齐至设计值但不得超过 0.5%。


9. 亮度层级与光效体系(一切参数的推导源)

9.1 层级(L0–L5,继承 v2 / SPEC-v1)

级用途相对峰值
L0天光 / 地平线辉光底最高
L1焦点唯一律 · 主焦点1 名额
L2焦点唯一律 · 次焦点1 名额
L3城市主体结构—
L4次级线框 / 道路—
L5窗格点阵 / 粒子 / 星座线α ≤ 0.14

层级判据(A1):必须一眼读出「星空 > 地貌 > 城市 > 人物 > 细节」五级层次,相邻两级峰值亮度差 ≥ 25%。禁止平铺。

9.2 Glow 规范 —— 本页最容易做坏之处

原则(M4 修正版):弱的是「Glow 半径与溢散」,不是「结构层亮度」。宁可弱,不要强 —— 但不要因此把结构本身压暗。

核心线
████

第一层 Glow
░░████░░

第二层 Glow
░░░░████░░░░

禁止 ████████████████ —— 一旦出现立即变成赛博朋克 / 游戏 UI / 科幻宣传片。

9.2b 硬指标:禁止近白核(V44 / V45 · 🔒 临时口径)

目标画面在数值上「亮而不爆」:均值高(地貌区 35.27)、尾部低(p99.9 = 164.3),近白 L>200 占比仅 0.0062%。

正确的 Glow 做法:

错误做法(480 批)正确做法
能量形态少数像素饱和成硬核(p99.9 235、近白 0.940%)大范围中亮度连续结构(p99.9 164、近白 0.0062%)
观感「LED 点阵墙」/ 竖柱阵「一整块亮起来的城市」
数值特征尖峰(尾部极高 + 均值偏低)平台(均值高 + 尾部低)

一句话:靠「面」亮起来,不靠「点」爆出来。

操作禁令(v3.0c 按稳定域修订):

项规定
p99.9≤ 185(目标 164.3;实测编解码噪声 ≤ ±1.4 ⇒ 阈值留有 ~15 倍噪声余量)
近白 L>200 占比≤ 0.06%(目标 0.0062%;噪声最大 ×1.12 ⇒ 阈值留有 ~10 倍余量)
例外仅月亮与地标辉光槽位允许超出;两者合计 ≤ 0.5% 面积,且不得形成 L>230 的饱和像素簇

v3.0c 修订说明:原版写「任何图层不得产生 L > 200 的像素(月亮除外)」—— 这与实测不符(目标 ref-c 自身就有 0.0062% 的 L>200 像素)。禁令的对象不是「>200 的存在」,而是「>200 的规模与形态」 —— 即「少量离散点可以,成片硬核不行」。现按稳定域重写。此数值在 Q0/Q1 答复前为临时口径(§19.6)。

9.3 调参优先级(来自老板 V1.0 §7 权重表)

项权重说明
整体构图★★★★★先对构图,再谈其他
光线氛围★★★★★与构图同级
城市轮廓★★★★
真实数据★★★★
建筑细节★★不要再在细节上耗预算
真实 3D★已证伪的方向

10. 粒子规范

10.1 四类粒子(必须有意义,不能只是撒点)

类来源说明
A 星空粒子真实恒星天文计算
B 城市粒子建筑 / 道路 / 地标数据转换数据真实,艺术化表达
C 人物粒子人物轮廓青蓝边缘
D 环境粒子—制造空间感

10.2 行为白名单 / 黑名单

允许禁止
极慢漂移爆炸
呼吸大幅飞散
微弱闪烁快速旋转
鼠标产生轻微扰动游戏粒子效果
局部聚集粒子雨

11. 动画与交互

11.1 动画速度(整体必须慢)

元素速度
星云 / 恒星 / 星座极慢
城市粒子慢
人物极慢
环境极慢
鼠标视差即时但阻尼
Glow缓慢呼吸

禁止快速动画。

11.2 鼠标交互(必须非常轻)

对象反应
星空极轻微视差
城市轻微空间偏移
人物极小幅度跟随
粒子微弱扰动
地标局部响应

核心原则:用户应感觉「这个世界在呼吸」,而不是「我在操作一个 3D 游戏」。

11.3 交互层的技术定位(吸收老板 §4 的 2.5D 主张)

3D 数据源 + 2.5D/2D GPU 合成 + WebGL 交互层

即:数据是 3D 的,合成是 2D 的,交互层挂 WebGL。这样既有视差 / 呼吸 / 响应,又不掉进「真正 3D 城市必须物理正确」的陷阱。


12. 硬禁令(合并 v2 红线 + 老板 V1.0 §23)

12.1 视觉层禁止

赛博朋克 · 科幻城市 · 游戏地图 · Google Earth 风格 · 写实 3D 建筑 · 大面积霓虹 · 大量彩色粒子 · 紫红色银河 · 强 Bloom · 机械 HUD · 雷达 · 数据面板 · 科技 UI · 大量文字 · 复杂按钮 · 普通网页渐变背景

12.2 实现层禁止(红线 · 不可触碰)

#禁令
❌回归 AI 猜图 / AI 生图静态方案
❌以位图整幅贴图作为默认路径(?plate=1 仅留档)
❌stock 星空图片 / 普通 Three.js 星空模板
❌引入实体材质 / 阴影 / 道路光带 / 大面积暖色
❌破坏已解决能力(真实星空 / 星座标签 / 山脊 / 渐进时序 / 三层定位)
❌删除 docs/design/ 基准资产、D:\专家论证稿\、AI 地图主文件
❌绕过 :8083 代理直连裸引擎
❌未验收就部署线上
❌把阶段 0 / 阶段 1 的沙箱产物(layer-.png / compose-.png / numpy 脚本)直接搬进线上前端(v3.0c 新增)。阶段 0 产物是语法样张,只用于与老板对拍;进入线上必须经阶段 2 的 WebGL 重写 + 五问复核。产物出口仅限 §25.1 的工作目录与 docs/sky/
❌把复合 / 标注图用作测量基准(v3.0c 新增)。基准必须是单一画面文件;*-annotated.png(2580×969 等横向复合)只能用于人工阅读,禁止入任何 probe 脚本 —— 历史「地平线 69.76%」事故的直接成因即此

13. 系统架构

13.1 三引擎架构

                      Tempo Soul
                           │
          ┌────────────────┴────────────────┐
          ↓                                 ↓
 Astronomical Engine              Geo-Luminous Engine
 (天文引擎 · 已有)              (地理灵境引擎 · 新建)
          │                                 │
 真实星空 / 月亮 / 星座            城市 / 建筑 / 山河 / 地标
          │                                 │
          └────────────────┬────────────────┘
                           ↓
                    Visual Engine
              (Shader / Particle / 分层合成)
                           ↓
                      合成场景
                           ↓
                    Hero 首屏

引擎间唯一契约:两者各自输出图层,不共享坐标系、不共享相机。Visual Engine 只负责按 §7 分区融合。

13.2 引擎内部数据流

用户位置 + 当前时间
        ↓
真实地理数据(建筑 / 道路 / 河流 / 山脉 / 地标 / 高度)
        ↓
城市高度场 + 矢量数据
        ↓
 ┌──────────────┬──────────────┐
 ↓                              ↓
投影假设 A                    投影假设 B
低视点                        高视点
 ↓                              ↓
⑦ 城市天际线剪影              ⑧ 城市俯视肌理
 ↓                              ↓
 └──────────────┬──────────────┘
                ↓
         GPU 分层合成
                ↓
 ①②③④⑤⑥ + ⑦⑧⑨ + Bloom + 调色
                ↓
          Tempo Soul 首屏

注意:图中「投影假设 A / B」不实现为两个相机对象(M1)。它们是两个独立的图层生成函数,各自只保留一个投影假设。

13.3 技术栈(分阶段)

层阶段 0阶段 1+
定位不接入Browser Geolocation + IP 兜底
城市数据OSM(已有)+ DEM(已有)+ 政府开放数据 + 地标库
建筑Footprint + Height同
地形DEM → 山脊线同
数据预处理Python / numpyPython / Node.js
城市数据格式自定义 Geo Tile JSON / Binary同
高度场Raster / Heightmap(4000² @ 5 m/px)同
合成Python / numpy(2D 图层)Three.js + WebGL
Shader—GLSL
粒子—GPU Particle
荧光—Bloom + 双层线条(RenderTarget)
星空已有 Astronomical Engine同
前端不碰现有 Tempo Soul 前端

为什么阶段 0 刻意不用 Three.js(M3):阶段 0 是纯 2D 图层语法复刻,不需要 3D 引擎。引入它会产生「我该建一个 3D 场景」的本能,而那正是导致 440–490 三批卡死的机制。Python/numpy 也更快 —— 改一行、0.2 秒出图,适合逐层对拍。


14. 「数据真实,表现艺术化」的代码约束

原则(老板 V1.0 §18):允许非线性视觉映射;不能把虚假的建筑说成真实建筑。

14.1 强制字段

每一个图元(建筑 / 道路 / 河流 / 山脊 / 地标)必须携带 source 字段。

{
  "id": "b_1042",
  "kind": "building",
  "source": "osm:way/123456789",     // 真实来源;合成数据则为 "synth:roadside/v1"
  "h_real_m": 60.0,                  // 真实高度(米)—— 永不改写
  "h_visual": 138.0,                 // 视觉高度(单位)—— 可非线性映射
  "lat": 29.7271, "lon": 120.2345,
  "footprint": [[...]],
  "synth": false
}

14.2 三条硬规则

#规则
1h_real_m / lat / lon / footprint 只能来自数据源,禁止在任何渲染阶段被改写或估算
2视觉映射(h_real_m → h_visual)必须是单一、可审计、全局一致的函数,不得逐栋随机
3合成图元(synth: true)必须在图层中可区分,且合成规则必须可复现(固定种子);不得用合成数据冒充实测数据

14.3 推荐视觉高度映射

h_visual = clamp( pow(h_real_m, 0.35) * k , h_min , h_max )

15. 数据不足的三级降级(老板 V1.0 §19)

15.1 分级定义

级触发条件表现
Level 1半径 R 内带高度建筑 ≥ 200 栋真实建筑数据 → ⑦⑧ 完整
Level 2带高度建筑 < 200 栋,但路网 ≥ 100 段真实道路 + 地形 → ⑧ 降级为「路网光带肌理」,⑦ 由路网+地形推断轮廓
Level 3路网也 < 100 段抽象城市粒子结构(不做成「真实城市」),视觉语言不变

15.2 实测案例(决定此节存在的证据)

城市半径建筑道路水系判定
北京·朝阳区3 km5803123247Level 1
诸暨·暨阳8 km1040331Level 2(路网充足、建筑近零)

诸暨市中心在开放地图上只有 10 栋建筑。中国中小城市的建筑数据基本空白 —— 路有人画,楼没人画。这不是渲染问题,是数据源事实。V1.0 的三级降级不是可选项,是必需品。

15.3 Level 2 的合成纪律


16. Geo Tile 资产格式(全球化的实现基础)

16.1 目录约定

/geo/<city-slug>/
  ├── height.bin        高度场(raster)
  ├── buildings.bin     建筑 footprint + height
  ├── roads.bin         路网
  ├── water.bin         水系
  ├── dem.json          地形高程(生成 ⑥ 山脊)
  ├── landmarks.json    地标(⑦ 高亮槽位数据源)
  └── meta.json         { slug, name, lat, lon, radiusM, level, source, built_at }

渲染器完全一样,只更换 Geo Tile。 这是全球化成立的前提 —— 每个城市不再需要「生成一个场景」。

16.2 阶段边界

阶段 0 不生产任何 Geo Tile,不碰全球城市、不碰 GPS、不碰网页。


17. 性能预算(v3.0c:标注等级与依据)

本节的数字分两档,不得混用:一档是实测量级(可作判据),一档是估算(E2)(只作设计目标,不作验收判据)。v3.0 原文把二者都写成了硬指标,现更正。

环节目标依据等级
离线数据拉取 + 烘焙一次性,可 20 分钟实测:诸暨 8km / 16 片拉取实测 ~20 min;高度场 4000² @ 5 m/px 实测 ~0.2 s / 城市E1 实测
首屏加载 + 合成~~≤ 300 ms~~ → ≤ 300 ms(设计目标)E2 估算,非测量:由「CPU numpy 光线投射 10–20 s」类比推算「fragment shader < 10 ms 可达」。这是类比推理,不是实测 —— 阶段 2 必须以真实 profile 替换E2 估算
运行帧率60 FPS行业基线;阶段 2 实测E2 → 待测
交互延迟即时 + 阻尼视觉需求,非性能指标定性

关于「3 秒」的概念纠正:老板 V1.0 提到的「3 秒」混了「拉数据」与「首屏出图」两件事。拉取 + 烘焙留在离线(overpass 拉取可 20 分钟);首屏只做加载 + 合成。

阶段 2 的强制动作:在真实 GPU 上 profile 首屏,把 E2 估算替换为 E1 实测,再决定 ≤300 ms 能否作为验收判据。在那之前,任何「首屏性能达标」的声明都无效。

17.1 验收显示环境(v3.0c 新增 · 回应审计遗漏项)

审计意见 5 指出:全部亮度测量都在 sRGB 数值域上做,而五问由老板的眼睛裁决 —— 若验收显示器未校准,「亮而不爆」(V44/V45)与「暗剪影」的观感判断可能互相打架。

项规定
测量域一律 sRGB 数值域(L = RGB 均值,0–255),不做任何显示器补偿
验收环境老板的验收结论只在同一台显示器 + 同一亮度设置下有效;换设备后五问需重答
记录每轮交付的 ROUND 文档须记「验收设备 / 亮度 / 是否夜间模式」
已知风险若显示器偏冷 / 偏亮,V44「禁止近白核」的观感会更严;若偏暗,会放松 —— 以数值判据为硬约束,观感判据为软约束,两者冲突时按 §18.1 以眼睛为准,但须记录冲突

18. 验收判据总则 —— POC 五问(最高优先级)

不再用「代码完成了吗」作为验收。只问下面 5 个问题。

#问题判定
①第一眼像不像那个世界?是 / 否
②有没有「人在宇宙中」的感觉?是 / 否
③有没有真实城市的感觉?是 / 否
④有没有生命探索 / 命运 / 节律的感觉?是 / 否
⑤有没有明显的游戏 / 赛博朋克 / 地图产品感?有 / 没有

通过条件:① ② ③ ④ = 是,且 ⑤ = 没有。

18.1 判据层级与优先级

当机器数字与人的眼睛冲突时,以眼睛为准。

优先级判据性质
P0五问人之裁决 · 最高
P1§19 量化判据(🔒 临时口径)机器辅助 · 失敏风险
P2层面积配额(§5.1)结构核查

五问的显示环境要求(v3.0c 新增 · 回应审计遗漏项):五问由眼睛裁决,故必须同一台显示器 + 同一亮度设置下作答;换设备后需重答。每轮 ROUND 文档须记录「验收设备 / 亮度 / 是否夜间模式」。详见 §17.1。

冲突处理:若数值判据(P1)与眼睛(P0)冲突 —— 按本节以眼睛为准,但必须把冲突写进 ROUND 文档,不得静默忽略(这是 440 事故「用失敏指标自我打勾」的制度性防范)。

18.2 机器判据的三条使用纪律(吸取 440/480 教训)

  1. 不得自我打勾:任一口径被推翻后,必须换口径重测,不得沿用旧数字。
  2. 不得用失敏指标:「分区均亮」已被批判为失敏指标(440 就是被它判成达标的)。
  3. 迭代必须给人看:每完成一层 / 一轮,必须出图给需求方看,由他说行不行 —— 不得靠数字自我判定「在进步」。(440 与 480 两次事故的共同形态:8 轮迭代一次都没出图给人看。)

19. 量化判据(CT-2 口径)

⚠️ 全部阈值为「临时口径」—— 不得用于终局判决

本节所有由 ref-c 导出的基准值(V41–V48 的阈值列)成立于「CT-2 取代 CT-1」这一裁定之上,而该裁定尚未获老板确认(§21 Q0 / Q1)。 因此:

允许禁止
报趋势判决:偏高 / 偏低 / 方向反转报终局判决:「达标」「不达标」
用作迭代时的相对刻度(这版比上版更接近目标)用作放行依据(据此宣布某批通过验收)
在 Q1 答复后一键转正在 Q0/Q1 悬空时对外声称「按规格书达标」

转正条件:§21 Q0 与 Q1 答复 + §3.1e 的复核路径被执行(E1 → E0)。

一键回退:若 Q1 选 (B)(仍以 CT-1 为准),本节全部数字作废,重跑 probe 即可(工作量:1 个脚本 + 本节表格)。

19.1 分区口径变更

口径天空区带区地貌区
旧(CT-1 / v2)0 – 51%51 – 68%68 – 100%
新(CT-2 / v3)0 – 54%54 – 60%60 – 100%

19.2 参考值对照表(本批实测,单一方法学)

方法学:全部图像统一 resize 到 1920×969;L = RGB 均值;亮度阈值为 L 值。口径一旦固定不得混用(§18.2 纪律一)。

基准纯净度:ref-c 已做四项纯净度检查(边带 / 游程 / 边角 / 元数据),确认不含面板或 UI,数值未经污染 —— 详见 §3.1f(b)。

基准抗噪性:ref-c 为 JPEG,已实测量化敏感度:p99.9 在 q=50–95 区间波动 ≤ 1.34,基准值抗 JPEG 噪声 —— 详见 §3.1f(c)。

等级:全部为 E1(本端单方复现),脚本 verify_baseline_chain.py / zone_probe_ct2.py / target_offset.py。

指标CT-1(旧靶)ref-c(新靶)480 批实测判定
地平线位置69.14% / 68.01%58.41% / 56.2%~70%靶子本身偏 11 pt
天空区 mean(0–54%)7.968.067.28✅ 接近
带区 mean(54–60%)10.5426.7320.77偏低 −22.3% ⚠️
带区 >20 亮度占比7.1%54.5%—480 未测此项
地貌区 mean(60–100%)30.6935.2728.60偏低 −18.9% ⚠️
地貌区 p95—95.67——
下半区最大连续亮块—479,805 px(占下半区 24%)——
青蓝占比(下半区 · 严格)81.0%89.2%—口径:B>R+6 且 G>R+2
青蓝占比(下半区 · 宽松)—97.4%—口径:B>R(旧记录「96–98%」即此口径)
纯黑 <1259.5%54.4%45.4%偏低 −9.0 pt ⚠️
暖色(月亮)0.0485%0.0485%0.008%✗ 月亮缺失
全域 mean17.2220.07——
p99.9(最亮尾部)163.0164.3235.0✗ 硬高光核
近白 >200 占比0.0073%0.0062%0.940%(约为目标的 150 倍量级)✗ 差两个数量级
近白 >230 占比0.0004%0.0001%0.245%✗
画面 max246.0232.0245.7—

数值来源(v3.0c 校准):p99.9 与近白占比取 verify_baseline_chain.py §E 的确定性复算值(ref-c p99.9=164.33 / 近白 0.0062%;CT-1 p99.9=163.00 / 近白 0.0073%)。v3.0 原文记 «164.3 / 0.006%» 与 «163.0 / 0.007%»,结论一致,小数位以本节为准。

两个新发现(本批首次量化)

发现一(带区方向反了):480 批实测带区 20.77,对 CT-1(10.54)判「超标 +74.7%」,对 ref-c(26.73)应判「偏低 −22.3%」。同一数值,结论 180° 反转(详见 §3.3)。

发现二(硬高光核):目标图(CT-1 与 ref-c)几乎没有近白像素 —— >200 占比仅 0.006–0.007%,p99.9 ≈ 163。而 480 批 >200 占比 0.940%、p99.9 = 235。

这说明目标画面的城市是「亮而不爆」:均值高(35.27)、尾部低(p99.9 164)。480 批做成了相反的形态 —— 均值偏低(28.60)但尾部极高(235),即「大面积偏暗 + 少量爆亮硬核」。

这直接定义了 Glow 的正确做法:靠「面」亮起来(大范围中亮度的连续结构),不是靠「点」爆出来(少数饱和硬核)。 这条同时修正了 §9.2 —— 不只是「降 Glow 亮度」,而是禁止出现近白核。

抗噪性声明(v3.0c 补,回应审计意见 2(b)):审计质疑「对一张 JPEG 测 p99.9,JPEG 会削峰 ⇒ 精确倍数不可靠」。已实查并结论如下:把 CT-1 按 JPEG q=50–95 重编码,p99.9 波动仅 163.0–163.67(Δ ≤ 0.67),近白占比波动 0.0071–0.0082%(≤ 1.12×);ref-c 自身重编码波动 ≤ 1.34。⇒ 编解码器噪声为「个位点数」量级,而 480 批与目标的差距是 ~70 点 / 两个数量级 ⇒ 判据方向与量级不受 JPEG 影响。

但审计是对的:不得把「134 倍」这类精确倍数写进硬阈值。 §19.4b 已据此改为稳定域判据(见 §19.6)。

19.3 逐层量化判据(V32–V40 · 新增)

代号层判据阈值
V32① 天空底面积占比24–28%
V33② 星野雾面积占比≤ 1.5%
V34③ 星座面积占比 + 连线夹角标准差2–3% / ≤ 5°
V35④ 月牙存在性 + 暖色占比必须存在 / ≤ 0.5%
V36⑤ 中轴辐射网面积 + 条数5–7% / 5–7 条
V37⑥ 山脉框景面积 + 左右对称性3–4% / 双侧呼应
V38⑦ 城市天际线面积11–14%
V39⑧ 城市肌理面积 + 平均亮度32–36% / ≥ 32(防「暗而糊」)
V40⑨ 人影地光面积 + 人物相对亮度2–4% / 暗于背景

19.4 三区数值判据(V41–V43 · 按 CT-2 口径重算 · 🔒 临时口径)

判据列已改名为「趋势判决」 —— 在 §21 Q0/Q1 答复前,不允许出「达标 / 不达标」的终局判决(见 §19.6 规则 1)。

代号判据ref-c 基准允许区间480 批趋势判决
V41天空区 mean(0–54%)8.067.09 – 9.03(±12%)7.28✅ 同量级
V42带区 mean(54–60%)26.7322.72 – 30.74(±15%)20.77偏低(−22.3%)
V43地貌区 mean(60–100%)35.2731.04 – 39.50(±12%)28.60偏低(−18.9%)

V42 是「靶子偏了 ⇒ 结论反转」的直接体现:同一实测值 20.77,对旧靶(10.54)判「超标 +74.7%」,对新靶(26.73)判「偏低 −22.3%」。

容差 ±12% / ±15% 的依据:E3 经验值(本端设定,非从数据推出) —— 阶段 0 期间须用真实样本方差校准,见 §19.6 残余风险 3。

19.4b 尾部判据(V44–V45 · 本批新增 · 稳定域版本)

依据 §19.2 发现二:目标画面没有近白像素,城市是「亮而不爆」。

v3.0c 修订:原版阈值 ≤ 180 / ≤ 0.05% 建立在单点测量 + 「134 倍 / 18.8 倍」的精确倍数论证上。审计指出 JPEG 量化会削峰 ⇒ 精确倍数不可靠。现改为稳定域判据 —— 阈值与目标值的余量放宽到编解码噪声的 10 倍以上,结论不再依赖精确倍数。

代号判据ref-c 基准稳定域阈值编解码噪声(实测)480 批趋势判决
V44p99.9(最亮尾部)164.3≤ 185±1.4(q50–95)235.0严重偏高(+~70 点)
V45近白 L>200 占比0.0062%≤ 0.06%×1.12(最差)0.940%高约两个数量级
V46纯黑 L<12 占比54.4%50 – 58%—45.4%⚠️ 偏低
V47暖色(月亮)占比0.0485%0.02 – 0.5%—0.008%月亮缺失
V48青蓝占比(下半区 · 严格口径)89.2%≥ 85%——待测

稳定域阈值的设计逻辑(重要):V45 阈值 0.06% 与目标 0.0062% 之间留了 ~10 倍余量,而实测编解码噪声的最大漂移仅 1.12 倍。⇒ 阈值比噪声宽一个数量级,结论不依赖「精确倍数」这种脆弱论证。 480 批的 0.940% 即便打满噪声折扣,仍是阈值的 ~15 倍以上。结论稳健,但表述必须用「两个数量级」,不写「150 倍」这类精确倍数。

V44/V45 的操作含义:禁止出现近白硬核。 城市层要「整体提亮 + 消除爆点」,即把能量从「少数饱和像素」重新分配到「大范围中亮度连续结构」。

这是 480 批「竖柱阵」在数值上的真面目 —— 柱阵不是"太亮",是能量分布形态错误(尖峰而非平台)。

19.5 状态标记(v3.0c 改版)

标记含义可作放行依据
✅与目标同量级(趋势一致)❌(临时口径期)
⚠️偏离但方向正确,可接受为中间态❌
✗明显偏离❌
🔒临时口径:数值可用,判据待 Q0/Q1 转正—

一句话:临时口径期内,本节的任何标记只是迭代刻度,不是验收结论。

19.6 临时口径与稳定域(v3.0c 新增 · 直接回应审计核心意见)

审计原文:「这份文档最大的优点是『用证据推翻自己』,最大的隐患是 —— 它正在用同样自信的口吻,把一批尚未经老板确认(Q0/Q1)的数字写成硬判据。CT-1 的教训是『靶子被悄悄改了』;下一个教训可能就是『新靶子未经确认就被当成了铁律』。」

本节即为堵此漏洞而设。 三条硬规则:

#规则
1临时口径声明:§19 全部由 ref-c 导出的阈值,在 §21 Q0 与 Q1 答复前一律为「临时口径」。任何报告不得据此写「达标 / 通过 / 放行」。
2稳定域优先于精确值:判据须满足「阈值与目标值的余量 ≥ 编解码 / 采样噪声的 10 倍」。不满足者只能作趋势指标,不得作硬阈值。已按此修订 V44/V45。
3基准纯净性是使用前提:任何基准图进入 probe 脚本前,必须先过 §3.1f(b) 的四项纯净度检查(边带 / 游程 / 边角 / 元数据)。复合图(annotated)永久禁入(§12.2)。

残余风险(诚实列出,不掩饰):

#残余风险现状处置
1Q0 意图未知 —— 若那个压缩是老板有意要的,则 CT-2 方向本身错误,全部数字需翻转未解等 §21 Q0;这是唯一的开关
2全部测量为 E1(本端单方复现),无外部复核 ⇒ 存在「自己推翻自己、自己确认自己」的结构性弱点未解等 §3.1e 复核路径被执行(任一方复跑成功即升 E0)
3容差区间(±12% / ±15%)为依据不明 —— 系本端设定的工程容差,非从数据推出未解标 E3 经验值;阶段 0 期间用真实样本方差校准后再定为硬阈值
4「地平线」两法差异 1–2 pt 未收敛已知全文一律并列两法结果;CT-2 取 57±3% 已覆盖该差异

20. 门禁与对拍流程

20.1 对拍基准

基准健康检查(v3.0c 新增,每次开批前 30 秒可跑):三张图的 (尺寸, 最大行跳变) 应为

ref-c: 1920×969 / 7.11、CT-1: 1920×969 / 7.98、CT-1-annotated: 2580×969 / 100.97。

任一项不符 ⇒ 基准已被改写 ⇒ 立即停批、重跑 §3.1e 脚本、按 §28「基准资产被再次改写」处置。

20.2 每轮出图纪律(强制)

改一层 → 出图 → 给需求方看 → 记「是/否」 → 下一层
  1. 每轮产出物:<layer>-v<n>.png + 与 ref-c 的同尺寸叠放对照图。
  2. 每轮必须在报告中回答 五问,不得只报数字。
  3. 跨批交付物:docs/sky/ROUND-YYYYMMDD-<批号>-<主题>.md + 同内容深色 HTML。

20.3 部署门禁

条件要求
本地预览允许(127.0.0.1 端口,需说明端口)
线上部署必须五问全过 + 老板明示放行
worktree 提交按老板指令;默认不提交
主仓 src/ / functions/零改动,除非老板明示

21. 开放问题(待老板拍板)

门禁提示:Q0 与 Q1 是 §3.2「施工闸」的唯一开关。在二者有明确答复前,本端不写任何渲染代码。(纪律来源:480 批「需求裁决悬空时自行默认选路」的教训。)

#问题选项我的建议
Q0CT-1 对 ref-c 的那个压缩(下半部缩到 73.8%、地平线下移 11 pt),是你当时要求的修改,还是一次无意的走样?<br>(v3.0c 补:本端已用信息损失检验证实「压缩」这一事实,但无法从文件推断意图 —— 只有你能回答)(A) 我要的就是 ref-c 那种(城市更高更饱满)→ 按 CT-2 走<br>(B) 压缩是我要的(城市更矮更含蓄)→ 按 CT-1 走,但判据口径必须同步改<br>(C) 那是一次无意走样 / 我不记得有这个改动 → 按 CT-2 走,并把「基线产生环节」当作事故复盘<br>(D) 两者都不完全是,我另说A 或 C —— 无论哪个,结论都指向 CT-2;但只有你点头,它才从「临时口径」转正
Q1CT-2(地平线 57±3%)是否取代 CT-1(69.14%)成为新验收靶子?(A) 是,CT-2 转正,CT-1 存档 (B) 否,仍以 CT-1 为准 (C) 另定A —— 与老板 V1.0 §22「天空 50–60%」及 ref-c 实测(56.2% / 58.4%)自洽
Q2是否现在开工阶段 0(纯沙箱样张生成器)?(A) 是 (B) 先看计划A
Q3视觉高度映射的边界真实 60m 的楼,轮廓 / 辉光最多增强到什么程度?增强轮廓与辉光;不虚构高度数值、数量、位置
Q4移动端竖屏(390×844)是否在阶段 0 处理?(A) 阶段 0 只做桌面 (B) 同步做A(老板 V1.0 §25 亦明确砍掉)
Q5小城市无数据时的对外表述(A) 不提示,静默降级 (B) 页面标注「数据稀疏」B(符合「不得把合成说成真实」)
Q6验收显示环境(v3.0c 新增):五问在什么设备 / 亮度下作答?(A) 就用你现在这台,以后每轮都在同一台 (B) 我再指定一台校准过的A —— 只要前后一致即可;§17.1 已把「同设备」写成硬约束
Q7关键测量的独立复核(v3.0c 新增):是否要指定一方复跑 §3.1e 的脚本?(A) 不必,我信你的实测 (B) 我会跑一次 / 让 Codex 跑一次 (C) 先放着,等有空B —— 这是把 §3.1c 从 E1 升到 E0 的唯一途径;否则本文件的核心结论永远停在「待复核」

22. 变更记录

日期版本变更作者
2026-09-16v3.0建档。整合 SKY-VISUAL-STANDARD-v2.md、SKY-VISUAL-SPEC-v1.md、SKY-STYLE-DNA-v1.md、SKY-VISUAL-SPEC-v1-ADDENDUM-80-20.md,并审计吸收老板《Tempo Soul 首页视觉规格书 V1.0》。核心变更:① 定义 CT-2 构图模板(地平线 57±3%),与 CT-1 冲突裁定;② 确立九层模型与面积配额;③ 纠正「样张是暗色剪影」的错误认知(实为高亮密纹连续结构);④ 双视点降级为「结果」;⑤ 新增第 ⑤ 层中轴辐射网为构图骨架;⑥ 「数据真实,表现艺术化」落成代码约束可吉(WorkBuddy)· 批次 520
2026-09-16v3.0aS0 测量回填(同批完成)。按 CT-2 口径重算 ref-c 三区基准(天空 8.06 / 带 26.73 / 地貌 35.27);确认 CT-1 与 ref-c 地平线相差 10.7 pt(69.14% vs 58.41%);发现带区判定方向反转(480 批 20.77:对旧靶「超标 +74.7%」→ 对新靶「偏低 −22.3%」);新增尾部判据 V44/V45(目标 p99.9 = 164.3、近白 0.006%;480 批实测 235.0 / 0.940%,超标 18.8 倍)→ 确立「禁止近白核」硬指标(§9.2b);地平线取值由 56±2% 修订为 57±3%(两法实测 56.2% / 58.4%)可吉(WorkBuddy)· 批次 520
2026-09-16v3.0b变形链溯源(同批完成,本批最硬的一条证据)。逐像素差分证明 CT-1 的上半部(y<48.8%)与 ref-c 完全一致(最大差 = 0),下半部呈严格纵向仿射 y_refc = 1.36 × y_CT1 − 348,三点边界全部命中(误差 <0.2 pt)⇒ CT-1 = ref-c 下半部压缩到 73.5% 的版本;时间戳(16:33 输入 → 16:39 产出,+6 分钟)钉死方向。据此确立「两千次卡住」的完整根因链(§3.1d)。证据图 PROOF-ct1-is-compressed-refc.png可吉(WorkBuddy)· 批次 520
2026-09-16v3.0c审计回应批 —— 把「用未确认的数字写硬判据」这个新教训堵住。 外部审计提出 5 类问题,本版逐条修复:<br>① 证据强度:§3.1c 重写 —— 时间戳降为旁证(新发现 ref-c 的 ICC = Google Inc. 2016,系 Chromium 指纹 ⇒ mtime 只记「保存动作」),主证据换为信息损失不可逆检验(5 种重采样核最高仅能复原 ref-c 的 92.5% ⇒ 反命题 H2 被 falsify);新增「排除纯重编码」检验(下半部最大差 243)。仿射参数复算为 1.355 / −344 / 73.8%。<br>② 基准纯净度:发现那条「50.9% 拼接缝」属于 SKY-BASELINE-CT1-annotated.png(2580×969 = 1920 画面 + 660 面板),不属 ref-c —— 原 D13 属张冠李戴,已更正;ref-c 四项纯净度检查全通过。<br>③ 判据稳定性:实查 JPEG 量化敏感度(q50–95 下 p99.9 波动 ≤ 1.4、近白占比 ≤ 1.12×)⇒ 结论方向可信、但精确倍数不可写死;V44/V45 改为稳定域判据(余量 ≥ 噪声 10 倍),表述由「134 倍」改为「两个数量级」。<br>④ 制度补漏:新增 §1.4 证据等级(E0–E3)与复核制度,修正 §2 审计口径(E1 本端实测不再高于老板原文,冲突走 §21);§19 抬头加 「全部阈值 = 临时口径,禁止终局判决」 横幅,新增 §19.6 稳定域与残余风险表;§3.2 拆成 「建表闸 / 施工闸」两道闸(解决原版「确认前不作为」与「S0 已回填」的自相矛盾);§12.2 增两条红线(阶段 0 产物禁入线上前端 / 复合图禁作测量基准)。<br>⑤ 工程与遗漏:§17 把「≤300 ms」由硬指标降为 E2 估算并新增 §17.1 验收显示环境;§18.1 给五问加显示环境约束;§25.2 补 S7 稀疏高度场填充技术要点 与 S0b 复核步;§26 补 阶段 0→1 量化回归闸;§21 新增 Q6(显示环境)/ Q7(独立复核),Q0 增 (C) 「无意走样」选项。<br>新增可复现产物:proto2d/verify_baseline_chain.py + assets-520/VERIFY-baseline-chain.png + .json + .log.txt可吉(WorkBuddy)· 批次 520-C

23. 执行计划 · 困难清单

先摆困难,再谈路径。以下每条都有实测依据,不是预判。

23.1 一级困难(会导致路线失效,必须先解)

#困难实测依据严重度缓解
D1验收靶子偏了 11 个百分点 —— 内部冻结 CT-1(68.01%)与老板参考图(56.2%)不是同一个资产本批实测(§3.1)致命裁定 CT-2(Q1);本批已默认按 CT-2 建判据,等老板一句话确认
D2我自己的靶子认知曾两次搞反(把「亮而细的连续密纹」当成「暗剪影」)→ 480/490 把城市做得更暗更糊实测量化(§6.8)致命本文 §6.8 已写死「亮而细,非暗而糊」;V39 加下限 ≥ 32 防回归
D3真实建筑数据在中国中小城市基本空白 —— 诸暨市中心 8km 仅 10 栋建筑Overpass 实测高§15 三级降级;Level 2 = 真实路网 + 程序化建筑(带 synth 标记)
D4逐栋建筑材质 → 必然产出「柱阵 / LED 点阵墙」440 / 480 / 490 三批同一病征高⑦⑧ 改为整层剪影 / 连续线框生成,禁止逐栋独立发光;Voxel-Space 式高度场光线投射天然一体遮挡

23.2 二级困难(拖慢但不致命)

#困难实测依据缓解
D5参数在两极摆动:亮 → 柱阵;暗 → 细带490 三版实测根因是 D4。分层后每层独立出图、独立验收,不再全局调参
D6环境极不稳定Overpass 一次性 3km 查询被 504;Chrome 被系统策略拦(改 Edge headless 成功);CDP 每次截图后浏览器退出需重启;预览端口需常驻固化脚本:Edge headless CDP + 端口探活(ProxyHandler({}) 禁代理)+ 截图后自动重启
D7线上 /api/geo 全部超时(25–28 s)今日实测完全走本地离线烘焙 Geo Tile 路径,不依赖运行时 API
D8大气透视 / 纵深感参数陌生(色比、衰减曲线)500 批原型 v4 下半部「仍需美术调校」按 §9.3 权重表:氛围 ★5 优先,先定辉光与透视再抠轮廓
D9气质层(②③④⑤⑥⑨)无法用工程指标验收 —— 它们是美术判断510 批:这 6 层合计仅 9.2% 面积,却是成败所在必须由老板的眼睛裁决,这正是五问存在的理由;工程侧只保证「层存在 + 面积达标 + 不违反硬禁令」
D10迭代成本高 —— 前几批每次 8 轮调参、数千次工具调用批次 440–490 实况阶段 0 改逐层交付:一层一图一验收,单层失败不牵连全局

23.3 认知类困难(最容易被忽略)

#问题说明
D11「3 秒渲染」是概念错位拉取 + 烘焙(可 20 分钟)与首屏出图(≤ 300 ms)是两件事。把它们混在一起会得出「做不到」的错误结论
D12「街景地图」不可用于此街景是地面视角 360° 照片:与「高空远眺」差 90°、无几何、无高度、本质是贴图(触红线)。可用素材只有三类:矢量建筑轮廓+高度 / DEM 高程 / 卫星影像(仅参考,不作底图)
D13测量基准可能是复合图(v3.0c 更正归属)原 v3.0 写「ref-c 在 50.9% 处有拼接缝」—— 错误归属。 实测:那条缝属于 SKY-BASELINE-CT1-annotated.png(2580×969 = 1920 画面 + 660 标注面板,列边界在 x=1920)。ref-c 行跳变 7.11、CT-1 行跳变 7.98,均无拼接缝。⇒ 历史「地平线 69.76%」是在 2580px 复合图上误测的。新增红线:复合图永久禁入 probe 脚本(§12.2)。 详见 §3.1f(a)
D15「本端实测」被当成「客观事实」(v3.0c 新增)v3.0 审计口径把「实测证据」置于老板原文之上,但本批全部实测均为本端单方(E1) ⇒ 构成循环论证。已制度性修复:§1.4 证据等级 + §2 口径修订 + §19 临时口径横幅 + §21 Q7 独立复核。
D14「1:1 像素一致」与红线物理互斥只有贴图或 AI 生图能做到;真实几何渲染数学上不可能。本文件 §4.2 已把它转为「同一套世界观」,不再追像素

24. 阶段划分与总路线

阶段 0  语法复刻(不碰数据、不碰网页、不碰 GPS)
   ↓    目标:稳定复刻视觉语言,五问通过
阶段 1  真实数据映射(只接一个城市:真实建筑 → 高度场 → ⑦⑧)
   ↓    目标:数据进来后视觉语言不塌
阶段 2  工程化(WebGL/Three.js 重写 + GPU 合成 + 交互 + 性能)
   ↓    目标:60 FPS、≤300ms 首屏、可交前端
阶段 3  全球化(Geo Tile 生产流水线 + 多城市)

24.1 为什么阶段 0 必须「不碰数据」

因为一旦同时引入「数据」和「语法」两个变量,失败时就无法判断是语法错了还是数据错了。 490 批同时背真实数据 + 语法探索,结果在「数据稀疏」与「形态不对」之间反复纠结 —— 这是双变量陷阱。

阶段 0 的产物是一块纯语法样张(不含任何地理信息),它必须先独立通过五问。

24.2 阶段路线对照(老板 V1.0 §26 三天口径)

日老板 V1.0 原定v3 细化(按九层收敛)交付
Day 1画面骨架:黑宇宙 / 星云 / 星空 / 星座 / 地平线 / Glow / 城市抽象轮廓层 ①②③ + 带区辉光 + ⑦ 抽象轮廓L1-day1.png + 五问
Day 2城市肌理 / 山体 / 道路 / 人物 / 粒子 / 双层空间层 ④⑤⑥ + ⑧ + ⑨L2-day2.png + 五问
Day 3鼠标视差 / 粒子呼吸 / 星星动态 / 地标响应 / UI / 性能交互层 + 性能L3-day3.png + 五问

工期是叙述性的,不是承诺 —— 只作为收敛刻度。验收按五问,按层,不按时间。


25. 阶段 0 详细计划(下一步实际动作)

25.1 工作环境(全部在沙箱,不碰 worktree)

项值
工作目录D:\workbuddy\2026-09-15-00-01-41\sky-build\stage0\
语言Python 3.13 + numpy(已就绪)
输入ref-c-老板参考构图.jpg(1920×969)作构图与气质基准
输出layer-NN-<name>.png 逐层 + compose-v<N>.png 合成
主仓零改动
未验收前不接前端、不部署、不提交

阶段 0 不使用 Three.js / WebGL / 任何 3D 引擎(M3)。理由见 §13.3。

25.2 执行步骤(每步一图一验收)

步动作技术要点产出验收
S0用 CT-2 口径重算 ref-c 三区基准值(已执行 · 🔒 临时口径)zone_probe_ct2.py + target_offset.py;排除拼接缝干扰(三图行跳变实测:ref-c 7.11 / CT-1 7.98 / annotated 100.97 ⇒ 复合图禁入)回填 §19.2 / §19.4;证据图 assets-520/TARGET-OFFSET-ct1-vs-refc.png数值已落表,待 Q0/Q1 转正 🔒
S0b基准链复核(v3.0c 新增)跑 verify_baseline_chain.py(确定性、无随机):溯源 / 拼接缝归属 / ref-c 纯净度 / 方向性 falsify / JPEG 抗噪assets-520/VERIFY-baseline-chain.png + .json + .log.txt任一方复跑成功即 E1 → E0(§21 Q7)
S1① 天空底 + 大气渐变垂直渐变 + 分形噪声;纯黑 ≥ 50%layer-01-sky.pngV32
S2② 星野银河雾分形噪声遮罩 + ≤ 9 blob,α ≤ 0.15layer-02-nebula.pngV33
S3③ 真实星空 + 星座接现有 Astronomical Engine;只显重要星座;夹角标准差 ≤ 5°layer-03-star.pngV34
S4④ 月牙位置由时间+天文算;极小克制layer-04-moon.pngV35
S5带区:地平线辉光极薄极柔;中心向两侧衰减;不形成明显横线layer-05-glow.png目视 + 无横线
S6⑤ 中轴光柱 + 辐射网本阶段骨架层,用 5–7 条射线串联月 / 人 / 城市layer-06-axis.pngV36
S7⑦ 城市天际线(抽象)高度场光线投射(Voxel-Space 式)→ 一体剪影 + 边缘光;留地标高亮槽位。<span style="color:#39FF14">稀疏高度场填充(v3.0c 补,回应审计意见 4):Level 2 城市(如诸暨)的真实 footprint 极稀疏,直接栅格化会得到「塌陷的剪影」。须按序补:① 以真实 footprint 为种子,沿真实路网两侧做各向异性膨胀(沿街方向权重高、垂直方向低),使建筑呈「沿街连续」而非「孤立孤岛」;② 对膨胀后仍低于 h_min 的区域,用低频噪声底床填充至 h_min(保证剪影连续、不塌);③ 全部填充体标注 synth:true 与 `fill:expandbed`,与实测建筑在图层中可区分(§14.2 规则 3)。④ 剪影的「连续性」判据:单行连通段数 ≤ 8、最长连通段 ≥ 15% 宽</span>layer-07-skyline.pngV38 + 五问 + 连通性
S8⑧ 城市肌理俯视路网光带 + 街区低亮轮廓 + 河流柔和线layer-08-texture.pngV39(均值 ≥ 32)
S9⑥ 山脉框景程序化山脊(DEM 留到阶段 1);左右对称layer-09-mountain.pngV37
S10⑨ 人影 + 前景暗剪影 + 青蓝粒子边缘;禁亮白立柱layer-10-figure.pngV40
S11合成 + Glow + 调色按 seam = 56% 融合;Bloom 双层线;Glow 只加半径不加亮度compose-v1.png五问
S12交互(可选,Day 3)视差 + 呼吸 + 扰动(2D 近似即可)compose-v2.gif目视

每完成 S1–S11 任一步,立即出图 + 报五问。老板说不行就停在那一步改,不往下走。

25.3 阶段 0 通过条件

五问:① 是 ② 是 ③ 是(此处指「有城市感」,阶段 0 无真实数据,判据放宽为「抽象城市是否成立」)④ 是 ⑤ 没有。

全过 → 进阶段 1(换真实数据)。任一不过 → 停,回报,等指令。


26. 阶段 1 计划(真实数据映射)

只做一个城市:台北 101 × 3 km(不东京、不纽约、不全球)。

步动作验收
1台北 101 3km 真实建筑 footprint + height → 高度场 raster(4000² @ 5 m/px)高度场可视化出图
2真实路网 → 驱动 ⑤ 辐射网 + ⑧ 路网光带骨架与原城市肌理吻合
3真实 DEM → 驱动 ⑥ 山脊山形合理
4地标(台北 101)→ ⑦ 高亮槽位一眼可辨识
5五问复核① ② ③ ④ 是 / ⑤ 没有

为什么选台北 101:项目已有台北数据与 Geo Tile 资产(taipei101-{L0,L1,L2,dem}.json),无需新拉数据;且 101 是「超出天际线一个量级」的地标样板,最能验证地标槽位。

26.1 阶段 0 → 阶段 1 的量化回归闸(v3.0c 新增 · 回应审计意见 4)

审计原文:「§25 的 layer-NN 逐层产物与 §26 阶段 1 的 Geo Tile 格式之间缺少对拍方案 —— 阶段 1『数据进来后视觉语言不塌』的验收标准只有一句五问,没有量化回归。这是下一个『方向漂移』最可能发生的位置。」

本节即为补此缺口。 五问回答「像不像」,量化回归回答「有没有在换数据时把已经对好的东西弄坏」。

#回归判据(阶段 1 产物 vs 阶段 0 达标的 compose-v1.png)阈值性质
G1九层面积配额逐层偏移(§5.1 的 9 个占比)每层 ≤ ±20% 相对偏移结构不塌
G2三区 mean(天空 / 带 / 地貌)每区 ≤ ±12% 相对偏移光度不塌(与 §19.4 同容差)
G3地平线位置仍在 57 ± 3%构图不塌
G4p99.9 / 近白占比(V44 / V45)仍满足稳定域阈值能量形态不塌(防「竖柱阵」复发)
G5⑤ 中轴辐射网仍存在、条数 5–7骨架不塌(最易被真实数据挤掉的一层)
G6青蓝占比(下半区 · 严格口径,V48)≥ 85%色调不塌

执行纪律:

  1. 本闸只比「阶段 1 vs 阶段 0」,不与 ref-c 比绝对值 —— 因为阶段 0 已经过了五问,它是「已知合格」的内部参照。这样可把「换数据导致的语言漂移」与「阶段 0 本身就还差的差距」分开。
  2. 任一 G 判据超差 ⇒ 不追加新功能,先定位是哪一层的哪一步引入的(逐层比对 layer-NN 前后)。
  3. G1–G6 全部通过 + 五问全过,才允许进阶段 2。 只过五问而 G 超差 ⇒ 视为「偶然像」,必须回退查因。

27. 阶段 2 计划(工程化)

步动作技术验收
1把阶段 0/1 的 numpy 图层逻辑移植到 GLSL fragment shaderThree.js + WebGL + RenderTarget逐层与 numpy 版零重采样对拍一致
2GPU 粒子(四类)GPU Particle60 FPS
3Bloom 双层线荧光Shader / RenderTarget弱 Glow,无赛博朋克感
4交互层鼠标视差 + 阻尼 + 呼吸「世界在呼吸」而非「操作 3D 游戏」
5首屏性能加载 + 合成≤ 300 ms;稳定 60 FPS
6接前端现有 Tempo Soul 前端老板验收后才部署

28. 风险与回退

风险触发信号回退 / 处置
阶段 0 五问不过老板说「不像」停在当前层,只改该层;不进入下一层,不接数据
又陷入「柱阵 / 细带」摆动出现竖条纹或模糊细带立即检查是否违反 D4(逐栋材质)→ 改整层剪影;并查 V44/V45(近白核)
真实数据稀疏导致城市塌陷⑦⑧ 面积 < 判据触发 §15 三级降级;S7 的稀疏填充三序处理(膨胀 → 底床 → 标记);对外表述按 Q5
环境不可用(浏览器 / 网络)截图失败 / Overpass 504用 Edge headless;数据走离线烘焙,运行时零依赖
CT-2 裁定被否老板选 Q1(B)全部判据回 CT-1 口径重算(工作量:重跑 probe + 改 §19 表 + §3.2 两道闸重判)
Q0 裁定「压缩是有意的」(v3.0c 新增)老板选 Q0(B)CT-2 方向本身错误 ⇒ 按 CT-1 重算全部基准,并把「CT-1 = ref-c 压缩版」这一发现降级为「老板的设计选择」而非事故;§3.1d 的根因叙述需改写
关键测量被独立复核推翻(v3.0c 新增)§21 Q7 的复核结果与本文不符以复核结果为准,修正 §3.1c / §19 全部相关数字,并在 §22 记一条 v3.0d;不得辩解,直接改
阶段 1 语言漂移(v3.0c 新增)G1–G6 任一超差逐层二分定位(哪一层引入的偏移)→ 只回退该层;禁止在漂移未定位时叠加新功能
验收设备 / 亮度变更(v3.0c 新增)老板换显示器或改了亮度五问必须重答(§17.1);历史五问结论标注为「旧设备下有效」
基准资产被再次改写(v3.0c 新增)docs/design/ 下基准图 mtime 变化 / 尺寸变化立即重跑 verify_baseline_chain.py;基准图为只读资产,禁止任何工具覆盖(§12.2 / §1.3 纪律 3)

任何阶段的主仓改动:默认零。需改动前先出清单 + 备份 + 二次确认。


29. 下一步实际动作(等老板一句话)

#待办依赖闸
1裁定 Q0(那个压缩是有意的还是走样)老板闸 2 开关
2裁定 Q1(CT-2 是否转正)老板闸 2 开关
3放行阶段 0(Q2)老板闸 2 开关
4复核基准链(Q7):跑一次 verify_baseline_chain.py老板 / 任一方E1 → E0
5~~重算 ref-c 三区基准(S0)~~ 已执行 · 🔒 临时口径—闸 1 ✅
6执行 S1–S11,逐层出图Q0 / Q1 / Q2闸 2
7复核五问(同一显示器,§17.1)老板—
8阶段 1 过量化回归闸 G1–G6阶段 0 通过闸 3

在 Q0 / Q1 / Q2 有明确答复前,我不动手写任何渲染代码。(纪律来源:需求裁决悬空时不得自行默认选路 —— 480 批的教训。)

本批(520-C)已做的,全部落在「闸 1(建表闸)」之内:重测、复核、修订文档、补证据脚本。一行渲染代码都没有写。


视觉规格书 v3.0c · 审计回应版 · 2026-09-16 | 主仓零改动 · 未提交 · 未部署