实例化海洋到主场景

This commit is contained in:
2026-09-23 17:37:07 +08:00
parent 597b5a69c5
commit 0484839186
8 changed files with 211 additions and 22 deletions
+10
View File
@@ -232,3 +232,13 @@ Godot 不会把 shader 的 uniform 默认值灌进材质实例 —— 所以别
海水运动速度(按默认值算):大浪相位速度 ≈ 6.7 m/s(波长 42 m),
细纹漂移 ≈ 0.5 m/s,噪点漂移 ≈ 0.49 m/s。大浪看得清,细碎波光是缓慢流动。
## 海洋应用到主场景(world/main.tscn)
- `world/ocean/sea.tscn` + `sea.gd`:可复用海面(Water 近平面 300/120 格 + WaterFar 6000/12 格 + water_far_material.tres),实例化即用、零接线。sea.gd 自动收集带 `world_time` uniform 的材质、自动找 `Sun` 节点、近平面按 2.5 m 步长跟随 viewport 相机。
- `world/ocean/island_mesa.tres`:台地岛材质(island.gdshader 新增 `plateau` uniform,平顶半径占比;默认 0 = 原锥形岛,向后兼容)。
- `island.gdshader`:新增 plateau;主场景取值 radius 40 / plateau 0.72 / height 1.5 / dip 14 / detail 0.25。
- `main.tscn` 重写:Ground 碰撞盒 40→**58**(与平顶 r≈28.8 对齐),**删除 GroundMesh**(灰色平板,会和岛平顶 z-fight),新增 `Island`(y=-1.5)与 `Sea` 实例(y=-1.5)。
- **关键坐标系**:海平面节点摆在 y=-1.5,岛 `island_height=1.5` → 平顶世界 y=0 = 原地面高度。玩家/碰撞/联机逻辑零改动,实测 player_y=0、on_floor=true。
- **修了一个真 bug(两个场景都有)**:「指向太阳」是平行光节点的 **+Z** 不是 -Z。之前 sea/ocean_demo 传的是 -basis.z(朝下),波光整片消失且不报错。实测 main 的 Sun basis.z y=+0.766 才是对的。
- 验证:实机 host_game,world_time 1.2 s 推进 1.201,近平面跟随相机 (0,3.86)→snap(0,5),玩家传送 (27.5,1,0) 仍站在平顶 y≈0,岸线沙带/泡沫/海天交界截图正常,日志无错误。