开发日志
这个站是一个学生在做,不是一家公司。这里记的是它每天变成什么样 —— 包括做砸的那些。
- 上线了2026年9月4日
- 步行高度把地面的问题全暴露了:OSM 草坪原来按三角面分别算光,缓坡被切成一大片一大片的黑色折面;道路带的顶点方向还反了,双面材质把法线翻到地下,所以部分路面几乎全黑。现在两处都按 3DEP 地形连续法线重建。
- 草坪不再是一块纯绿色加几根 20 厘米杂草。近景改成连续草坪材质和 4.5 厘米短草,只在近身范围高密度跟着相机移动;林下换成土壤、碎叶和稀疏地被;步道用细颗粒压实石料,并补了圆滑转角。
- 16,206 个树位和高度仍来自 Blair 的激光雷达,不是随机撒树。树冠改得更宽、更低并按位置稳定变化;树干加了硬木树皮,落叶树增加收进树冠里的主枝,减少电线杆和复制粘贴树的感觉。
- 新增的草路、林地和树皮只是生成的表面材质,位置、坡度、路网和树高仍由 OSM 与 USGS 数据决定。桌面和手机都重新跑过浏览器检查。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年9月4日
- Blair「未来一天」现在不只是行程页面:点击即可进入全屏校园步行模拟,镜头落在真实 OSM 步道上,以 1.65 米视线高度自动前进。
- 键盘可持续按 WASD 行走、Shift 慢跑并拖动视角;手机端使用摇杆。只要开始操作,自动漫步就会交还控制权。
- 五个时刻在同一个 WebGL 世界里切换,不会每到一站就重载整张地图;前后站、进度、地点和退出都留在一层克制的导览界面里。
- 桌面和 390px 手机都跑过实机浏览器检查,Escape、页面滚动恢复、无横向溢出和无控制台错误也一起验证。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年9月4日
- Blair「Future Day」体验原型上线。
- • 申请者可选择创造者、艺术生或团队运动员三条体验路径。
- • 每条路径把五个真实校园地点串成一天,并在原始高分辨率航拍上标出行程。
- • Bogle、Clinton、Timken 与 Ivy 可直接进入现有的室内参考重建;其余站点进入实测 3D 外观。
- • Blair 学校档案新增入口,手机与桌面端均完成视觉和交互检查。
- • 这是基于真实地点的概念体验,不伪装成 Blair 官方课表。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年9月4日
- Blair 的树冠重做了。旧版是三张相交的程序化卡片,近看像绿色纸片、远看像圆形贴纸;现在阔叶树和常绿树分别使用原创透明叶片/针叶材质,并把八组小枝叶分布在 3D 体积里。树的位置和高度仍然来自 16,204 个 lidar 树冠峰值。
- 树木现在有高度 LOD:走近时显示枝叶和树干,飞到测绘高度时逐渐交给真实航拍里的树冠,不再把同一片森林叠两遍。两张材质都是本次原创生成并压缩进项目,没有复制商业素材。
- 修复了按住 W 不能持续飞行。真正原因是空闲的手机摇杆每一帧都在清空桌面键盘的 WASD 状态,所以只剩每次按键的一小段冲量。键盘和触控现在各自维护输入状态,并新增静态回归检查。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年9月4日
- 修好了 Blair 地面的图层逻辑:飞行高度会让 OSM 草地、球场和道路逐渐融入真实航拍,不再出现大片纯色板块。
- 漫步高度会把低清 USGS 背景压到 6%,改用贴合 3DEP 地形的草地材质和清晰路径;白色/黑色照片色块不再被放大到脚下。
- 地面统一改为全粗糙 PBR 光照,并保留近景草叶、实测 3DEP 高度和 16,204 棵 lidar 树。飞行控制的键盘回归测试也通过。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年9月4日
- Blair 的颜色系统重做了。未确认材质的建筑不再按「宿舍红、教学楼黄、体育馆绿」上色;那是图例,不是校园。现在背景建筑退回低饱和的中性材质,只有现场记录或参考建模确认过的砖、石、板岩和木材才显示明确材质。
- Clinton、Ivy 和 Locke 不再用一块平灰代表花岗岩。新增了一张原创无缝冷灰粗面花岗岩材质,配合真实砖墙和板岩纹理;着色器加入低对比雨蚀、重新勾缝和烟尘变化,玻璃、白漆、铜绿、草地与树冠也全部压低饱和度。高空让航拍负责颜色,近地面才由可走的草地细节接管。
- 飞行又修了一次,而且这次测的是镜头坐标,不是按钮有没有亮。旧代码只在动画帧里读取按键,快速按下再松开可能完整落在两帧之间,所以完全不动。现在每次 W/A/S/D、Q/E 的首次按下都会给真实速度脉冲,长按继续平滑加速;线上实测 W 前进、E 上升、F 退出。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年9月3日
- 飞行控制修好了。点「飞行」后键盘焦点现在会交给地图;Space、Q/E 和方向键不再被按钮或页面吞掉,长按 F/G 也不会因为键盘重复事件疯狂切换模式。
- 飞行速度改成按秒计算。60Hz、120Hz 和掉帧时现在是同一个速度,惯性与侧倾也不再跟显示器刷新率走。
- 下降高度现在跟随 3DEP 地形,而不是错误地卡在海拔 3 米;Blair 的山坡不会再把镜头吞进去。手机端另外加了按住上升/下降按钮。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年9月3日
- 地面重排了层级。近景不再把 0.35 米/像素的航拍硬拉满屏:OSM 草坪、球场和 701 条路回到照片上面,草地有自己的细节材质和低对比割草方向;航拍近看只留 8%,飞高才逐渐出现。原来 40 厘米高的草丛也改成 12 厘米,只在步行高度出现。树冠不再往屋顶盖一串黑色纸片阴影。
- Blair 第一批五个可走室内上线:Timken 中庭、Clinton 主走廊、Ivy 二楼宿舍走廊、Locke 一楼走廊、Bogle 实验室。Timken 和 Bogle 按校方照片重建;Clinton、Ivy、Locke 按 93 页 NPS 建筑档案,包括 Clinton 有记录的 10 英尺走廊、松木地板、砖墙、深色橡木门、六格气窗和开放铁楼梯。
- 这些都明确写着「参考重建,不是扫描」。校方照片只在建模时作证据,没有打包进网站;每个室内都能回到原始资料。以后学生上传现场照片或扫描,真实捕捉会替换参考模型,不会把推断悄悄说成事实。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年9月1日
- Blair 历史核心不再是几块自动生成的屋顶。Clinton、Ivy 和 Locke 三栋现在都有独立建筑模型:OSM 平面逐点保留,3DEP 主屋顶高度不动,再用 93 页 NPS 建筑档案和 Blair 现状航拍补回真正的建筑语言。
- Clinton 有花岗岩三层、砖砌上层、六座山墙、砂岩横带和档案记载的 20 根烟囱;Ivy 有五开间粗石立面、半圆窗楣、坡屋顶和跨越 10.1 米实测间距的 Locke–Ivy 开放拱桥;Locke 有双山墙南立面、全宽门廊、车廊、17 根砖烟囱与沿长翼排列的巨型石烟囱。
- 照片仍然只作建模证据,没有塞进网站。看不到的细部会明确标成档案/照片推断;未来学生手机照片或扫描上传后,可以替换外墙和室内,而不会动到 1:1 的平面与实测高度。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年9月1日
- Blair 先做了。Timken Library 现在是 Blair 第一个照片建模地标:19.1 × 29.0 米 OSM 平面不动,13.1–17.2 米主屋顶沿用 3DEP 实测;入口巨拱、窗格、白色檐口、逐块 dentil、台阶和 cupola 按校方正立面照片重建。照片只作建模证据,没有重新发布。
- 校园底图本来就有 59 栋、54 个实测高度、16,204 棵 lidar 树和 56 米真实高差;这次不是再堆数据,而是让第一栋走近也认得出来。Timken 仍是照片参考模型,不冒充学生实景扫描。
- 地图编辑器接上了 dev 登录。现在可以站在 Blair 点建筑,改名字、用途、外墙材料和室内拍摄状态,直接保存到线上;OSM 平面、lidar 屋顶和实测高度锁住,避免一次手滑把 1:1 数据改坏。开发日志也改成分点阅读。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月31日
- Lawrenceville 的教堂又重做了一层。这次没动 1:1 的 OSM 平面和 3DEP 屋顶线,而是补照片里真正让建筑成立的东西:入口的双层石拱和柱子、塔身横向石带、钟楼成对拱窗的中柱,以及塔檐下面一整圈会投影子的 corbel。轮廓没变,建筑语言回来了。
- 渲染也有几个假问题:棕石以前自己发橙光,把凹凸全部填平;没有环境贴图的金属玻璃几乎全黑;整座校园共用一张阴影图,近看每块石头分不到一个像素。现在聚焦地标时会把阴影视锥收紧到建筑,玻璃回到非金属蓝灰,石材靠真实光照显出深浅。
- 树的数据还是实测的,但展示不再故意站在树后面:点地标会临时清掉建筑贴身的一圈树,退出就还原。交叉树片也不再互相投出三条黑线。它仍是四张照片做的参考模型,不是假装成学生现场扫描;后者一旦有人上传,会直接替换它。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月31日
- 窄屏导航终于不是靠消失来适配了。之前窗口一窄,家长、校友和关于会依次被藏掉;手机上想找它们,只能一路滑到页脚。
- 现在是一本可以展开的「实录目录」:学校、校园、家长、校友、开发日志和关于全在同一张索引里,语言、深浅色、登录和内部入口也没有被挤成一排小图标。它用原生 dialog,所以键盘焦点、Esc 关闭和背景隔离不是自己假装实现的。
- 页面切换加了一次 320ms 的轻微入场,目录本身 190ms 收起;系统开了减少动态效果,两样都会停。顺滑不是所有东西都在动,是用户永远知道下一步在哪。
验证过的学生、家长和校友可以在这里回复。
- 在想2026年8月31日
- 下一条大支线:原生 Apple app。先做 iPhone / iPad,把学校收藏、地图和校园导览、校友消息、通知和上传素材放进一个能离线打开的 app;再做 Mac,把管理队列、地图建模检查、室内素材审核和批量学校资料整理放进更适合大屏幕的工作台。
- 不是把网页硬塞进壳里。账号、学校邮箱验证、隐私遮罩和权限边界继续共用后端;照片和草稿先留在设备上,用户明确提交后才上传。飞机上能做的事,落地联网以后再同步。
- 顺序先定清楚:共享 API 和离线数据层,iOS / iPadOS 阅读与校园导览,上传和通知,最后才是 Mac 的管理员与建模工作台。现在是路线图,不是假装已经上线。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月31日
- 飞机上能用的界面工作台上线了:/studio。不连 Supabase,拖拽、缩放、桌面/平板/手机画布、撤销、本地自动保存和 JSON 进出都在浏览器里。做设计不用等 Wi-Fi,导出来再变成真页面。
- 管理和开发也从公共网站里搬出去了。/admin 是人的队列,/dev 是机器的事实;现在共用一个 private control room 的壳,但权限没有合并。最重要的一条线没动:开发者不会因为能看 schema,就能看学生写的内容。
- 这次上线也把发布链本身测了一遍:受限环境起不了 localhost,终端也解析不了 GitHub,所以完整生产构建改走 webpack,最后用 Git object API 写入同一棵 tree。Vercel 的生产检查通过。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月18日
- 校园终于站在自己的山上了。之前每所学校都画在一个平面上 —— Blair 从 101 米到 136 米,Webb 上下差 124 米,等于把「这地方长什么样」里很大一块直接丢了。
- 高程来自 USGS 3DEP:联邦的激光雷达测绘,公有领域,不要 key,是量出来的不是猜的。每所学校 41×41 的网格,按点取样 —— getSamples 直接回 JSON,为 1681 个数去解 GeoTIFF 不值。
- 地面、草坪、球场、停车场、每条路、树、还有每一栋楼,都被放到各自那块地上。不这么做,山上的校园会浮着,谷里的会被埋掉。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月18日
- 航拍照片撤了,地面改成建模的。照片在 400 米高看着行,一飞低就散架,而且那是别人拍的这个地方,不是这个地方的模型。
- OSM 里除了楼还有很多:草坪、树林、球场、停车场、水面,还有人真正走的每一条小路 —— 光 Blair 就有 276 个面、701 条路。现在全是真几何:面按厘米叠高避免打架,路按类型合成一个 buffer,700 个独立 mesh 比整张图其它部分加起来还贵。
- 树是 OSM 没有的 —— 整个 Blair 只标了一棵。所以按林地范围程序化种,高度和色相都抖一下,一种绿的树林看起来像塑料。那是生成的景,不是实测,署名栏里直接写明了:没有哪棵树声称自己是某棵树。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月18日
- 地图不再是一堆灰盒子了。楼下面铺了真的航拍影像 —— USGS 的,美国联邦作品,公有领域,不用 key,也给 CORS 头,所以能直接当纹理用。他们的缓存到 z16 为止,约 2.4 米一像素,飞低了会糊,但那本来就是从天上拍的照片。
- 楼也按类型上色了:宿舍、住宅、教堂、图书馆分得开。OSM 除了轮廓就只知道这一件事,而访客真正想问的就是「哪几栋是宿舍」。
- 两个 bug 是看出来的,不是想出来的。影像原本以地理编码点为中心 —— Lawrenceville 的编码点离建成区很远,整个校园直接落在黑地上。另一个更蠢:一次替换没生效,scene.remove(grid) 引用了不存在的变量,异常吞在 promise 里,相机初始化没跑,人卡在地面里,整张图糊成一条。现在影像这步包在 try 里 —— 它是装饰,不该有本事让整张地图打不开。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月17日
- 建地图不用开终端了。/admin 里每所学校一个按钮,按下去服务器自己去 OSM 抓、算、发布。
- 卡了一下:Vercel 的磁盘是只读的,网站建出来的地图没地方放在代码旁边。所以传到 storage,页面优先读那份,没有就退回仓库里提交的那份 —— 重建不用重新部署,本地开发也不用联网。
- 生成器搬到 src/lib/campus.ts,命令行和网页共用一份。重跑五所学校对了一遍数:59/45、37/36、127/34、31/6、58/46,和之前一模一样。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月17日
- 校园地图现在能飞了。两个模式:飞行(WASD、Q/E 升降、Shift 加速、拖动转头)和巡航(自动绕一圈)。
- 没用 three 自带的 FlyControls —— 它没有惯性,而手感全在惯性里。横移时机身会侧倾一点,少了这个,横着走就像在滑,不像在转。
- 轨道视角是把人挡在外面看模型,飞行才让它变成一个地方。外景已经有了;里面还是要学生去拍。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月17日
- 360 全景查看器上线,campus/room.html,浏览器里球面贴图,零算力。
- 坑:它要真正 2:1 的等距柱状图。iPhone「全景」模式做不出来,出来是一条宽条带,渲染成上下两块灰。得用真 360 相机,或者 Google 街景 app。
验证过的学生、家长和校友可以在这里回复。
- 卡住了2026年8月17日
- 泼溅那条路卡在硬件上。RTX 5080 是 Blackwell,sm_120,大部分仓库的 CUDA 内核编不过,要 CUDA 12.8 + cu128 的 PyTorch。
- 最难受的是 INRIA 仓库默认安装时 diff-gaussian-rasterization 编译失败,报错完全不说为什么。先用 Postshot 走通一间房再说。
验证过的学生、家长和校友可以在这里回复。
- 在想2026年8月17日
- 宿舍内景,难的不是技术,是许可。拍宿舍就是在拍一屋子未成年人住的地方。
- 这是要和学校谈的一次对话,在网址开始传之前谈,比之后便宜得多。外景是安全的(OSM,已标来源),内景完全是另一个问题。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月17日
- 3D 房间查看器上线:campus/model.html,读 .ply 和 .splat,自己写的渲染器。
- 第一版全黑。着色器没报错,数据也对 —— 四边形的屏幕基向量行列式是 -1,每一片都是背面,被剔除干净了。一行 DoubleSide 解决,找它花了比写渲染器还久。
- 没真素材,就用脚本生成了一间假房间来测:墙是平的、四面不同色、海报上下两色。数学错了立刻看得出来。那间假房间不会出现在网站上。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月17日
- 学生可以自己传房间了:/rooms/new,验证过学校邮箱,60–150 张照片,进私有存储。
- 重建不在服务器上跑 —— Vercel 没显卡,得在有显卡的机器上做。本以为是缺陷,其实正好:中间必须有人看一眼照片,才轮到派生的东西公开。
- 模型一发布,原始照片就删。署名只写「已验证学生」。
验证过的学生、家长和校友可以在这里回复。
- 难顶2026年8月17日
- 不太好看的一件事:日志 8 月 12 号就上线了,但它的建表脚本(010)从来没在数据库里跑过。011 也是。
- 所以这一页在线上空了五天 —— 不是没人写,是没有地方可以写。页面没报错,正好把问题藏住了。
- 现在 doctor 一起检查 009 到 012。写完代码和让它真的跑起来,是两件事。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月17日
- 可以直接录视频了,抽帧在你自己浏览器里做完,视频不上传。
- 不是模型,是三个老算法:拉普拉斯方差判清晰、按时间分桶保间隔、亮度和标准差挡过曝死黑。
- 测的时候发现真漏洞:每桶挑最清楚的一帧 —— 那一整段都糊呢?它会交上「最不糊的糊帧」。糊帧不是没贡献,是贡献错的特征,比缺一段更糟。加了绝对下限:低于本片中位数 25% 的一律不要。
验证过的学生、家长和校友可以在这里回复。
- 上线了2026年8月17日
- 校园地图不再只有一所学校。五所都有了:Blair、NMH、Lawrenceville、Webb、St. Mark's,全部来自 OpenStreetMap。
- 原来判断「哪些楼算校园」用的是半径 500 米 —— 那是对着 Blairstown 手调出来的。同样的 500 米给 Lawrenceville 拉出 217 栋,大半是镇上居民的房子。想自动找拐点更糟:它假设校园比周围密,而村子不是。
- 正确答案是 OSM 里本来就有的东西 —— 学校用地的边界,别人测过的事实。五所里四所有;没有的那所退回半径,量到「名字不再增加」为止。
验证过的学生、家长和校友可以在这里回复。