# 俯瞰 ASCII 海面的风纹与云影 ## 明确 - NOAA 对海面 surface slicks 的直接说明将它们描述为狭长、蜿蜒的光滑水面条带,并指出聚集物可抑制细小涟漪。内部波、锋面与 Langmuir cells 都可能造成这类结构。因此可以借用海面条带表现风的方向感,但不能把所有短弯痕都称为真实毛细波或断言只由风形成。[NOAA 原文](https://www.integratedecosystemassessment.noaa.gov/regions/hawaii/important-habitat-surface-slicks) - NASA 的 ISS031-E-35310 照片说明明确记录低积云在大片太平洋海面投下长而深的阴影。该照片是低太阳高度角的具体案例,不能据此给本插件规定真实的云影速度、大小或软边宽度。[NASA 原图与说明](https://eol.jsc.nasa.gov/SearchPhotos/photo.pl?mission=ISS031&roll=E&frame=35310) - Ken Perlin 的原始参考实现对固定空间梯度做平滑插值,支持连续场而非逐帧独立随机值的构造原则。本次实际实现使用固定软椭圆瓣组合,不直接复制 Perlin 算法。[Perlin 参考实现](https://mrl.cs.nyu.edu/~perlin/noise/) - Canvas 官方指南建议缓存重复图元、减少绘制状态变化,并避免昂贵的模糊与不必要文字绘制。[MDN Canvas 性能指南](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Optimizing_canvas) - 当前绘制器已经有阅读区、输入框、毛玻璃面板的共用淡出遮罩。大气层应复用这些遮罩与同一动画时钟,而不添加新的 DOM 动画、计时器或全屏模糊。[engine.js](../../src/engine.js) ## 推测(设计选择,不可当物理依据) 采用一套克制的表现: 1. 风画在水面上。少量近似平行、轻微弯曲、断续的 `-` 与 `~` 组成小段纹理;一阵风的纹理整体漂移,前后淡入淡出。没有箭头、空中的螺旋风线或连续横贯全屏的横线。 2. 云只显示投影。宽阔、不规则、软边的暗色连续色场缓慢经过海面,保留固定软椭圆瓣组合和连续透明度。原先的 `.`、`'`、`:` 稀疏点阵已移除,避免只看见散点而读不出阴影范围。没有白云图标或每帧重新洗牌的噪点。 3. 云影经过鲸鱼时只轻微压暗颜色,保持轮廓、位置和可见性。风纹比云影移动快,但这些速度差是视觉设计,不宣称为真实气象比例。 4. 所有时间来自现有场景时钟;暂停、隐藏页面与减少动态时不继续推进。调整字高、配色、鲸数和窗口尺寸不重新抽天气种子。 5. 当前工程预算:12 个风纹包,每包最多 16 个字符。云场每次最多采样 8192 个纹理像素,先用 `fillRect(1px)` 写入复用的小 Canvas,再平滑放大。时间、尺寸和颜色不变时复用云场,不重新采样。白天投影透明度为场景透明度 × 0.42 × 云密度,夜间使用深蓝黑色和 0.78 系数。这些系数是视觉设计,没有气象数据依据。 6. 阅读遮罩独立合成。有 `fade` 时,再复用一个最多 2,097,152 像素的 Canvas,RGBA 像素存储上限约 8 MiB,不含浏览器开销。遮罩最多 6144 块,每块在四角、四边中点和中心采样淡出函数,取最小值并向下量化成 32 档,相邻同透明度区间合并绘制,并以 `fade` 函数引用、CSS 宽高、缓冲像素宽高和网格列行数缓存区间。阅读布局未变时,时间推进只更新云场,每帧清空遮罩缓冲并重放区间,不重复调用遮罩淡出函数;布局测量提供新的函数引用或尺寸改变时重新采样。先填遮罩,再用 `source-in` 把平滑云场限制在其中,最后关闭图像插值后放到目标。云场可以平滑,阅读边界的透明度不会随云场一起扩散。主画布每次最多增加一次云影 `drawImage`,遮罩内部最多一次,没有像素读回或全屏滤镜。 7. 遮罩预算带来明确限制。当前矩形阅读区、输入框和宽缓的边缘淡出在采样块内保守留白,非栅格对齐边界也不把色场插值回正文。任意自定义函数若包含极窄、且避开九个采样点的透明孔洞,仍可能漏检,不能把离散采样当作对所有函数的逐像素保证。大视口还会将遮罩缓冲缩小,最终采用最近邻放大,边缘可能保留少量台阶。 实现接口记录见 [atmosphere.js](../../src/atmosphere.js)。运行测试见 [atmosphere.test.js](../../tests/atmosphere.test.js)。风纹与云影独立开关,默认开启。 ## 本轮实测 - 使用仓库指定的 Node 24.19.0 运行 `node --test tests/atmosphere.test.js`,11 项通过。测试记录真实新增的 Canvas 图像分支,覆盖确定性、连续软边与晴水间隙、独立开关、暂停缓存、尺寸与主题变更、非栅格对齐遮罩、遮罩区间缓存复用与失效、非法淡出值、预算,以及鲸身颜色变化但字符、轮廓和透明度不变。 - 尺寸预算覆盖 390×844、960×600、3840×2160、16000×1000 和 1×16000。这里只验证采样数、绘制命令和像素存储上限,不据此推断帧率。 - 本轮已统一构建插件和预览产物,并在独立可见浏览器中从正式模型与绘制器采样五种鲸类、两种样式与两种填充的 20 个组合。已核对两主题云影前后画面、暂停重复帧一致性,且两主题各 67,200 个阅读区实际像素均未被云影污染。新的 [QA 摘要](../../.scratch/emergence-cloud-20261023/qa-summary.json)、[云影对照](../../.scratch/emergence-cloud-20261023/cloud-shadow-comparison.png) 和可拖动时间的 [预览](../../.scratch/emergence-cloud-20261023/after.html) 保存在本地验证目录。 ## 未测 - 尚无真实手机硬件上的 GPU、帧预算或能耗记录,不能从桌面工具运行时间承诺手机帧率。 - 当前 DSH URL 返回认证页面,尚未确认运行中插件的来源、构建和热加载。独立正式渲染器预览不能替代当前对话窗口验收。浏览器整页截图接口本轮超时,实际画面检查使用 Canvas 导出的真实像素;预览播放与暂停有真实指针点击证据。 - NASA Flickr 与 Wikimedia 的抓取入口在本次请求返回 404;改用可访问的 NASA 原始照片说明补齐云影事实,没有把搜索摘要当作完整来源。