# 湘夫人 · PRD

这个世界要成为的东西，和还没做到的清单。Ralph 循环的每一轮读这份文件，
从「待办」里挑**最上面那一条没划掉的**，只做那一条，做完自己验证、提交、写进 `progress.txt`。

## 目标（不变）

一个可以一直走下去的洞庭秋水黄昏。一个读过《九歌·湘夫人》的人，在没有任何文字提示的
情况下，看三个定机位的截图，应该认出这首诗；而且「等而不得」要压过「风景好看」。

零依赖、裸 WebGL，双击 `index.html` 就能跑；左边世界，右边时间线。

## 人迹的规矩（船长 2026-09-17）

**这个世界里不出现人形。** 不做小人、不做剪影人、不做低多边形人。
人只通过他留下的东西在场：**衣裳（袂、褋）、罾、水中之室、席案、灯**。
这些物件必须是同一种语言——薄、旧、素、手作，颜色压在环境里，不抢眼，不精致。
做不好宁可不做。已经在场的物件如果做得不像那样东西（比如衣裳看起来像一块板），
那就是缺口，要重做而不是加新的。

## 意象对照表（验收用）

| 诗句 | 世界里应当存在的东西 | 状态 |
| --- | --- | --- |
| 帝子降兮北渚 | 北边的洲渚，水中一块可以站上去的浅滩 | 成立 |
| 袅袅兮秋风，洞庭波兮木叶下 | 持续的秋风；洞庭的波；木叶一直在落 | 成立 |
| 登白薠兮骋望 | 一片可以登高远望的白薠 | 成立 |
| 与佳期兮夕张 | 屋前铺好、却空着的席案 | 成立（水中屋 + 北渚各一处） |
| 鸟何萃兮蘋中？罾何为兮木上？ | 鸟落在水草里，渔网挂在树上 | 成立 |
| 沅有芷兮澧有兰 | 两条水，各自的香草 | 成立 |
| 观流水兮潺湲 | 一直在走的流水，是等待的计时器 | 成立 |
| 麋何食兮庭中？蛟何为兮水裔？ | 麋鹿进了院子，蛟在水边 | 成立 |
| 筑室兮水中，葺之兮荷盖 | 水中央一座房子，荷叶做顶 | 成立 |
| 荪壁兮紫坛…桂栋兮兰橑 | 房子由香草构成 | 成立 |
| 九嶷缤兮并迎，灵之来兮如云 | 远处九座山峰；神灵成云而来 | 成立 |
| 捐余袂兮江中，遗余褋兮澧浦 | 抛进水里的衣袖，顺流漂走 | 成立 |
| 搴汀洲兮杜若 | 汀洲上可以采的杜若 | 成立 |
| 时不可兮骤得，聊逍遥兮容与 | 她始终不出现；世界允许你一直走 | 成立 |

## 待办（自上而下，一轮一条）

第 11–14 轮做完了机制改标、衣裳、木叶、夕张；第 15–21 轮做完了黄昏调冷、涟漪、
可复现、灯、沅芷澧兰、杜若、灵云；第 22–23 轮把四个反问里看不见的麋和蛟补齐。
原来的 1–14 条到此清空，逐条的完成记录在 `progress.txt` 与时间线里。

15. **通盘自检（长期，一轮一条）**：三个定机位对着上面的意象对照表逐条过；
    并且**走出机位**——这个世界是可以走进去的，近看也得站得住。
    已经从这条里挖出来并做掉的（第 24–50 轮）：

    - 洞庭波在等待机位是一块铁板；贴镜头那几米水面偏平（24、25）
    - 杜若的花是白方块；后来又发现它铺得满地都是、被环境光照白（26、48）
    - 挂着的衣裳是一块板；它还挂在不存在的枝子上（28、41）
    - 灯是两个方盒子；席是一排亮线加一块暗板；案是一块平板（29、30、38）
    - 页脚一直挂着上一段的停止原因（32）
    - 白薠一根都不垂；枯树是一丛铁丝网（33、31）
    - 踩出来的那条路只存在于草的高度上，地皮还是草色（34）
    - 等待机位里一件袂都看不见（35）；字幕漏了「搴汀洲兮杜若」（36）
    - 走到水中之室跟前，整座台基是一堵黑墙（37）
    - 蛟近看是一串疙瘩；麋的身子是一根方木；鸟近乎纯黑（39、49、50）
    - 沅有芷那一丛种在水深 0.7 米的地方，一株都没长出来（40）
    - 兰的花是一块紫砖（42）；水上没有落下来的木叶（43）
    - 杜若的叶是纸风筝（44）；脚边那件衣裳救不回来，挪出画面（45、47）
    - 九嶷是一排一样的帐篷（46）

    **这条永远不会做完**，下一轮继续：换一个没去过的地方站着看，
    找出第一件读不出来的东西，只做那一件。

## 这个世界的几条硬规矩（都是踩过坑换来的）

- **朝天的面几乎吃不到太阳。** 这一版的太阳贴在地平线上（`SUN_DIR.y = 0.085`），
  水平面只剩天顶那点冷光。凡是朝天的东西——席、伞形花、落在水上的叶——
  本色都要给足（常常要大于 1），否则近看是一块深蓝灰的板。
- **干的东西要标哑光。** 物件着色器里 `aF < 0` 表示「这一片是布/陶/纸」，
  不吃掠角天光。忘了标，一张莞席会读成一块反着天的石板（第 12、16、38 轮各踩过一次）。
- **放东西之前先验那地方是不是地。** `terrainH(x,z) > 0` 才是陆地；
  看坐标像沙洲不算数（第 40 轮：一整丛芷种在水里）。
- **改波高要同时改 JS 镜像。** `WAVE_GLSL` 与 `waveJS` 必须逐项一致，
  否则漂在水上的衣裳会掉进水里。只想加水面质感的话，改法线、别改波高（第 25 轮）。
- **一样东西补进去之后，回头看它有没有把原来的主角挤掉**（第 48 轮：杜若把白薠压了）。
- **做不好宁可不出现**（第 47 轮：贴镜头那件衣裳）。
