Low-poly 卡通树木
通勤线、广州塔滨江环线和云港固定赛道采用同一套原创树木。阔叶树、窄冠树、分层树冠及棕榈有不同轮廓,路树、空中花园和树池保留原有位置与尺寸层级,通勤滨江步道换用棕榈。普通直道和随机道路保留锥形、多面体树种,并统一改用卡通材质、暖色树干和三种绿色。
造型与着色
- 树干带渐细轮廓和相接的枝杈;树冠由三组低面数体块组成,每个面保持独立法线。树顶使用偏暖的嫩绿色,底部较深,减少光滑球体的塑料感。
- 棕榈有七片带中脊的立体叶片,根部汇合于树梢;叶片为封闭几何,不需要透明贴图或双面透明排序。
- 丽园雅庭 E 栋道路增加
royal-palm高棕榈,灰色细长树干、绿色冠鞘和九片下垂羽状叶对应用户夜间照片。单株约 14–15 m 高、不足 350 个三角形;羽状叶共用不透明双面材质,不重复背面三角形,所在区域增加一个树冠颜色批次。 - 使用 Three.js MeshToonMaterial。固定赛道共用一张 3×1 的非颜色数据纹理,将直接照明分为三段;纹理使用 NearestFilter、关闭 mipmap,保持明暗边界清晰。普通路线使用原生默认明暗分段。
- 每个三角形使用一致的顶点颜色,法线、色块与树形共同形成卡通效果。昼夜仍使用现有太阳、月光、路灯、阴影和雾,不增加每棵树的动态灯、描边或后处理步骤。
性能与场景约束
单棵固定赛道树木只有树干、树冠两个不透明网格;阔叶树为 116 个三角形,棕榈为 100 个三角形。四种造型共用两种材质,区域合批后仍只有两个树木批次。形状和旋转由固定序列决定,切换主题、暂停和重开不会重建树木。
新港中路相同机位、固定人物时间的场景预览:绘制次数仍为 231,三角形从 48,255 增至 48,535,增加约 0.6%。这是场景预览的整帧成本,实际比赛还有车辆、骑手及 UI。生产构建首屏 JS gzip 为 269.9 / 270 KiB,树木造型构建留在已有赛道延迟分包内。
沿路建筑的实体外缘距整条道路中心至少约 16 m,给 15.4 m 外缘的人行道、路树与骑行者留出空间;终点一处配套楼向街区内退让 7 m,修复树冠穿过立面的现象。树木保留接地、树池和屋顶种植层级,车道间距使用既有赛道测试检查。
验证
类型检查、55 个文件 / 289 项单元测试、生产构建、性能预算与发布产物校验通过。专门检查树种的面数、尺寸、共享材质、逐面法线与颜色、合批后变换及几何体/渐变纹理的释放;已有通勤、广州塔和云港测试继续核对车道净空及跨赛道资源生命周期。
12 个实际浏览器用例通过:通勤全程多指触控、滨江 GPU 中断恢复、三种光照与无 HDR 降级,以及广州塔/云港启动、暂停、键盘和多指漂移。生产产物在 4 倍 CPU 降速、Fast 3G(1.6 Mbps / 150 ms)下,可开始时间为 8,087 ms,通勤比赛首帧为 10,711 ms,均低于 15,000 ms 预算;弱网用例也通过,共 13 个浏览器检查。
三主题树木近景及实际街区预览位于忽略目录 artifacts.local/trees/,浏览器试玩结果保存在 artifacts.local/trees-*。浏览器移动端仿真不等同于实体手机帧率测量。