日期:2026-09-16|批次:520|性质:规范整合批 + 测量批(零渲染代码改动)
上位输入:老板《Tempo Soul 首页视觉规格书 V1.0》+ 项目既有 4 份规范
项目冻结的构图基线 CT-1,就是老板参考图 ref-c 的下半部被纵向压缩到 73.5% 的版本。
证据一 · 上半部逐像素完全相同
| 区段 | 逐像素最大差 |
|---|---|
| y < 48.8% | 0 |
| y = 50% 带 | 16 |
| y ≥ 55% | 148 – 243 |
两张图在天空 / 星云 / 星座 / 月牙 / 标题 / 按钮区域一模一样 ⇒ 同一份源。
证据二 · 下半部呈严格纵向仿射关系
y(ref-c)px = 1.36 × y(CT-1)px − 348 (H = 969)
三个边界点全部命中,误差 < 0.2 pt:
| 检验点 | 预测 | 实测 |
|---|---|---|
| CT-1 城市体起点 67.4% | → 55.7% | 55.7% ✅ |
| CT-1 底边 100% | → 99.9% | 100% ✅ |
| ref-c 地平线 58.4% | → 69.3% | 69.14% ✅ |
证据三 · 时间戳钉死方向
| 文件 | 位置 | 时间 |
|---|---|---|
_refs/ref-c-老板参考构图.jpg | 输入 | 2026-09-14 16:33 |
baseline/SKY-BASELINE-CT1.png | 产出 | 2026-09-14 16:39(+6 分钟) |
城市体纵高:ref-c 44.2 pt → CT-1 32.5 pt(压掉 26.5%)。
此后 440 / 480 / 490 三个批次、数千次迭代,全部在追这个被压缩过的靶子。
用 CT-1 的「54–60% 带区」去判定城市 —— 但 CT-1 地平线在 69.14%,它的 54–60% 仍然是暗天空(mean 10.54、仅 7.1% 像素 > 20);而 ref-c 地平线在 58.4%,同一区间已经是真实城市(mean 26.73、54.5% 像素 > 20)。
| 指标 | CT-1(旧靶) | ref-c(真实目标) | 差异 |
|---|---|---|---|
| 带区 mean | 10.54 | 26.73 | +153.6% |
| 带区 >20 占比 | 7.1% | 54.5% | +47.4 pt |
480 批实测带区 20.77:
| 对旧靶判定 | 对新靶判定 |
|---|---|
| 「超标 +74.7%」⚠️ | 「偏低 −22.3%」⚠️ |
同一个实测值,换靶子,结论 180° 反转。 480 批为「降带区亮度」做的多轮调参,方向一直是错的。
| 指标 | CT-1 | ref-c | 480 批 | 判定 |
|---|---|---|---|---|
| p99.9(最亮尾部) | 163.0 | 164.3 | 235.0 | ✗ |
近白 L>200 占比 | 0.007% | 0.006% | 0.940% | ✗ 超标 18.8 倍 |
近白 L>230 占比 | 0.000% | 0.000% | 0.245% | ✗ |
目标画面根本没有近白像素(p99.9 ≈ 164),城市是「亮而不爆」:均值高(35.27)、尾部低。480 批做成相反的形态 —— 均值偏低(28.60)但尾部极高(235),即「大面积偏暗 + 少量爆亮硬核」。
这条直接定义了 Glow 的正确做法:靠「面」亮起来(大范围中亮度连续结构),不靠「点」爆出来(少数饱和硬核)。柱阵不是「太亮」,是能量分布形态错误(尖峰 vs 平台)。
产出:docs/design/SKY-VISUAL-STANDARD-v3.md(1059 行 / 64 KB / 30 章)+ 同内容深色 HTML(59.5 KB)
| 文档 | 处置 |
|---|---|
SKY-VISUAL-STANDARD-v2.md(CT-1) | 降级为历史冻结基线;§3 构图被 CT-2 取代,其余(北极星 / 亮度体系 / 元素模块 / S1–S14 / 排印 / 红线)全数继承 |
SKY-VISUAL-SPEC-v1.md | 档案;§3 亮度层级 L0–L5 继续有效 |
SKY-STYLE-DNA-v1.md | 全数继承(S1–S14、嫁接矩阵) |
SKY-VISUAL-SPEC-v1-ADDENDUM-80-20.md | 部分废止(「天 80/地 20」废止,与 CT-2 的 57/43 冲突);能量连接场、地标约束、V19–V28 继续有效 |
| 老板《视觉规格书 V1.0》 | 主体采纳(12 条),8 处修正,2 处驳回 |
采纳 12 条:7 层独立控制|不还原参考图只继承语法|星空真实天文计算|地平线辉光是视觉锚点|城市=高度+轮廓+细线(不需实体)|权重表(构图★5 / 真实3D★1)|肌理=地图×星图×线稿×粒子|数据真实表现艺术化|小城市三级降级|双引擎架构|POC 五问验收
修正 8 条(要点):
驳回 2 条:R1「完全不要星云层」(实测存在,占 1.0%)|R2「Cesium 完全不可用」(可作离线数据生产工具)
| 结论 | 实测 | 处置 |
|---|---|---|
| 地平线在 69.76% | 该值来自标注面板拼接缝 | 作废,真值 56.2–58.4% |
| 「样张是暗色剪影,我在画灯珠」 | 下半区 63% 像素 > 20、最大连续亮块 479,805 px | 作废,方向反了 |
| 「尺度天花板:小城市做不出天际线」 | 「数据真实,视觉艺术化」允许非线性映射 | 降级为「物理真实天际线不成立」 |
| 「双视点合成是核心技术」 | 拆层后无需相机概念 | 降级为结果描述 |
| 项 | 内容 |
|---|---|
| CT-2 构图模板 | 地平线 57±3%;天空 0–54% / 带 54–60% / 地貌 60–100% |
| 城市体纵高 | ≥ 40 pt(ref-c 44.2,CT-1 仅 32.5) |
| 九层模型 + 面积配额 | ①25.8 ②1.0 ③2.2 ④0.04 ⑤6.0 ⑥3.2 ⑦12.7 ⑧33.6 ⑨2.8(%) |
| 两条配额铁律 | ① 工程层(①⑤⑦⑧ = 78.1%)撑体量,气质层(②③④⑥⑨ = 9.2%)定成败 ② 画面骨架是第 ⑤ 层辐射网(6% 面积),可直接由真实路网驱动 |
| ⑨ 层中轴辐射网 | 老板 V1.0 缺失的一层,v3 补入并定为最高优先级 |
| 禁止近白核 | L > 200 像素占比 ≤ 0.05%(§9.2b) |
| 数据真实代码化 | 每图元带 source 字段;h_real_m 永不改写;合成图元打 synth: true |
| 三级降级判据 | L1 ≥200 栋 / L2 <200 栋但路网 ≥100 段 / L3 路网 <100 段 |
| 判据 V32–V48 | 逐层面积(V32–V40)+ 三区亮度(V41–V43)+ 尾部(V44–V45)+ 纯黑/暖色/青蓝(V46–V48) |
一级(会致路线失效)
二级(拖慢):D5 参数两极摆动|D6 环境不稳(Overpass 504 / Chrome 被拦 / CDP 需重启)|D7 线上 /api/geo 全挂 25–28 s|D8 大气透视参数陌生|D9 气质层(②③④⑤⑥⑨,仅 9.2% 面积)无法用工程指标验收,只能靠眼睛|D10 迭代成本高
认知类:D11「3 秒」是概念错位|D12 街景不可用(地面视角、无几何、无高度、本质是贴图)|D13 样张含标注面板 | D14「1:1 像素一致」与红线物理互斥
阶段 0 语法复刻(不碰数据 / 不碰网页 / 不碰 GPS) → 五问通过 阶段 1 真实数据映射(只接台北 101 × 3 km) 阶段 2 工程化(Three.js + GLSL + GPU 粒子 + 交互 + 性能) 阶段 3 全球化(Geo Tile 流水线 + 多城市)
阶段 0 必须「不碰数据」 —— 同时引入「数据」和「语法」两个变量,失败时无法判断是谁错了(490 批就死在双变量陷阱)。
| 步 | 动作 | 验收 |
|---|---|---|
| S0 | 用 CT-2 口径重算 ref-c 三区基准 | ✅ 本批已完成(天空 8.06 / 带 26.73 / 地貌 35.27) |
| S1 | ① 天空底 + 大气渐变 | V32 |
| S2 | ② 星野银河雾(≤9 blob,α ≤ 0.15) | V33 |
| S3 | ③ 真实星空 + 星座(接现有天文引擎) | V34 |
| S4 | ④ 月牙 | V35 |
| S5 | 带区地平线辉光(不得形成明显横线) | 目视 |
| S6 | ⑤ 中轴光柱 + 辐射网(本阶段骨架层) | V36 |
| S7 | ⑦ 城市天际线(高度场光线投射 → 一体剪影) | V38 + 五问 |
| S8 | ⑧ 城市肌理(均值 ≥ 32,防「暗而糊」) | V39 |
| S9 | ⑥ 山脉框景(左右对称) | V37 |
| S10 | ⑨ 人影(暗剪影,禁亮白立柱) | V40 |
| S11 | 合成 + Glow + 调色(seam = 57%) | 五问 |
| S12 | 交互(视差 / 呼吸 / 扰动) | 目视 |
技术栈:Python 3.13 + numpy(阶段 0 不用 3D 引擎)。工作目录 D:\workbuddy\2026-09-15-00-01-41\sky-build\stage0\,主仓零改动。
| # | 问题 | 我的建议 |
|---|---|---|
| Q0 | CT-1 对 ref-c 的那个压缩(下半部缩到 73.5%、地平线下移 11 pt),是你当时要求的,还是一次无意的走样? | 我无法从文件推断意图,只能你回答 |
| Q1 | CT-2(57±3%)取代 CT-1(69.14%)成为新靶子? | A 是 |
| Q2 | 现在开工阶段 0? | A 是 |
| Q3 | 视觉高度映射边界 | 增强轮廓 / 辉光;不虚构高度数值、数量、位置 |
| Q4 | 移动端竖屏是否阶段 0 处理 | A 只做桌面 |
| Q5 | 小城市无数据对外表述 | B 标注「数据稀疏」 |
| 文件 | 内容 |
|---|---|
docs/design/SKY-VISUAL-STANDARD-v3.md | 主交付:1059 行 / 64 KB / 30 章(MD) |
docs/design/SKY-VISUAL-STANDARD-v3.html | 同内容深色 HTML(59.5 KB,核心结论荧光绿,已内联零外链) |
docs/sky/assets-520/TARGET-OFFSET-ct1-vs-refc.png | 两靶同口径对照 + CT-2 分区线 + 实测地平线标注 |
docs/sky/assets-520/PROOF-ct1-is-compressed-refc.png | 压缩变形证据图(含城市体等高缩放对照) |
D:\workbuddy\...\sky-build\proto2d\zone_probe_ct2.py | CT-2 三区探针 |
D:\workbuddy\...\sky-build\proto2d\target_offset.py | 两靶硬对照 |
D:\workbuddy\...\sky-build\proto2d\prove_compression.py | 仿射拟合证明 |
src/、functions/ 零改动;worktree 未提交;未部署;CT-1 冻结资产未覆盖(只读)。proto2d/*.py)与规范文档。stage0/ 沙箱,执行 S1(天空底)→ 出图 → 报五问