介绍

这是作者 xianxie6 用 Canvas 2D + Three.js 把一座宋代沿河街市做成的可交互长卷:你控制一个朱衣画师在街上走、去茶铺喝茶、到码头喊船渡河,街上 141 位 NPC 各有动作和路线,会下雨、会入夜,河水用 WebGL shader 算流向和反光。【这不是把《清明上河图》原画扫描搬上网,而是用 AI 生成插画重绘的一座"活的"街市,纯原生前端硬拼,没引任何框架,读起来像在看作者跟自己较劲。】街区宽 6516 世界单位,串起水磨、陶作、织坊、茶市、虹桥、城门,目前 26 star,体量小但完成度惊人。

特征

🚶 主角可手动/自动行走,步态进度绑真实移动距离,过桥时双脚按桥面高度分别取位,真有交替迈步的感觉
🚢 虹桥过船可玩事件:跑到桥边接绳,按住左箭头或 E 拉纤,用力过猛船反而减速,旁观也能看完整流程
🌧️ 清明时雨:风起 → 疏雨 → 骤雨 → 雨歇 → 天青,NPC 按 id 算不同节奏陆续撑伞,不会齐刷刷开
🌃 白天/夜景切换,夜晚背景音乐平滑切到夜晚专曲,下雨时音乐随雨势淡出、雨歇恢复
🌊 河流交给 Three.js ShaderMaterial,Fragment Shader 里叠多组波浪算法线扰动、反光、流向、泡沫,WebGL 挂了自动回退 Canvas 水效
🎭 六组街区事件按时序跑:茶客招呼、菜市交货、陶作取坯、布铺展料、孩童推圈、货栈搬货,道具交接按两人真实手部位置
🔊 Web Audio 合成雨声(噪声+滤波器),划桨、牵绳、喝茶声按船/人在画面位置算左右声道,船在左声偏左
🧩 纯 JavaScript,无 Vue/React/Unity/Phaser,Three.js r186 本地 vendor 内置,无需构建,python 起个 http.server 就能跑
🧪 54 项 node --test *.test.cjs 通过,覆盖渡船、遮挡、路线、配色、脚底校准、船体尾流
📱 电脑手机浏览器都能开,无需安装登录;底图是原创生成插画,非原画扫描

开源地址