Appearance
园区孪生总览:自动巡游与分区点亮
初始化中…
前面两个 Demo 一个解决"能不能看",一个解决"能不能长出来"。这篇解决的是第三个问题:一屏放不下整个园区时,镜头怎么自己走,走到的地方怎么把注意力带过去。 模型还是那份园区 glTF,没有新建任何几何。
这次想验证三件事
- 镜头能不能不靠人。 全站零交互是硬约束,所以巡游必须由场景自己驱动,观众只负责看。
- 分区高亮能不能有层次。 全场一起亮等于没亮。要做成波前推进:从片区中心往外围逐栋点亮。
- 同一份模型能不能按图层拆着看。 屋顶、幕墙、地面标线本来就是独立构件,能不能随时整层剔掉。
交给 AI 的交付要求(按我的模板改写)
数据侧
- 直接用现有园区模型,不新建几何。构件命名遵循
B01/B01_roof/B01_win/B01_door0的族名规则,分区与图层都从名字推,不许写死栋数。 - 分区按建筑底面中心的 X 坐标三等分,得到西 / 中 / 东三片;每片的中心、水平半径、最高点由该片所有建筑的包围盒算出来。
- 地面标线构件(
mark0起,共 183 处)单独归一组,按绕场心的极角排序,用来做扫掠效果。
镜头侧
- 机位一共 7 个:一个全景俯瞰,每片区各一个俯瞰、一个低角街景。每个机位停留约三成时间,剩下的时间做过渡,过渡用 smoothstep,不许匀速插值。
- 相机停在片区外侧往内看,方向取"片区中心减场心"再归一化,避免镜头穿进建筑里。街景机位高度压在 5 m 上下,人眼视角,不做上帝镜头。
- 观众随时能拖拽接管:一旦拖拽,巡游暂停 5 秒;恢复时不是硬切,是把相机朝目标姿态指数缓动过去,
1 - exp(-dt * 2.4)。
表现侧
- 当前片区逐栋点亮,波前进度按建筑到片区中心的距离错开;非当前片区压到冷灰蓝,保留轮廓但不抢戏;全景机位时全场恢复原色。
- 每栋、每个构件的材质都要独立克隆,否则改一栋会把同材质的别处一起改掉。
- 一轮末尾留出约 14% 时间把整层屋顶剔掉,演示图层显隐。标线位做一次绕场一周的雷达式扫亮,12 秒一圈。
- 不加任何按钮和进度条,状态全写在左下角文字读数里:当前机位、点亮片区与栋数、图层状态、扫亮数量、模型尺寸、三角面、帧耗时。组件卸载时几何、材质、贴图、控制器全部释放。
实现里几个值得记的点
共享材质必须克隆。 这份 glTF 只有 5 个材质(墙体、金属屋顶、玻璃、沥青、标线),528 个网格共用。想给单栋建筑刷色,第一件事是 o.material.clone()。代价是 500 多个材质对象,但它们参数类型一致,着色器程序仍然复用,实测帧成本可以接受。
分片区不能用编号段。 建筑编号是生成顺序,跟空间位置没关系,按 B01–B12 这样切出来的片区会东一栋西一栋,镜头扫过去是跳的。改成按底面中心 X 坐标排序三等分之后,连续性才对得上。
"点亮"要靠距离延迟,不是靠随机。 每栋的进度取 片区停留时间 × 1.5 - 到片区中心的归一化距离 × 0.5,越远的栋开始得越晚,就自然形成从中心扩散的波前。随机分配的话,画面会闪烁成一片噪声。
接管后不能硬抢镜头。 只要检测到 controls 的 start 事件就把巡游挂起 5 秒,恢复时按时间常数缓动。直接赋值相机会让观众觉得自己被场景夺走了操作权。
三角面读数用渲染器统计。 自己遍历几何算出来的数不含实例化与视域剔除,跟实际渲染量对不上,所以读数直接取每帧渲染后的统计值。
按交付要求核对
| 要求 | 实际做到 | 判定 |
|---|---|---|
| 不写死栋数 | 分区、图层、栋数全部由构件名与包围盒推导 | 达成 |
| 七机位巡游 | 全景 + 三片区各两个,一轮 49 秒自动循环 | 达成 |
| 波前逐栋点亮 | 按到片区中心距离错开起始时间 | 达成 |
| 材质独立克隆 | 528 个网格各自一份材质 | 达成 |
| 拖拽接管不硬抢 | 暂停 5 秒后指数缓动回巡游姿态 | 达成 |
| 图层剔屋顶 | 每轮末尾约 14% 时间隐藏整层屋顶 | 达成 |
| 文字读数无控件 | 五项读数,页面上没有任何按钮 | 达成 |
| 卸载清理 | 几何、材质、贴图、控制器全部释放 | 达成 |
已知不足
- 片区是几何切分,不是真实分组。 按 X 坐标三等分纯粹为了镜头连续,跟实际的楼栋归属没有关系,页面上也没假装它是。
- 扫亮与状态色都是演示数据。 没有任何真实来源,颜色也不表达任何含义,只是验证"一批同类构件能不能被程序统一刷色"。
- 机位是固定关键帧。 没有根据遮挡关系自动避让他处建筑,个别街景机位在某些角度会贴着建筑外墙。
- 剖面只剔了屋顶。 幕墙、门窗这些附属层没做整层剔除,图层系统其实还没有真的建起来,只是先验证了显隐这条路走得通。
- 没有 LOD。 全场一镜到底用同一精度渲染,模型只有 35 栋所以无所谓,真要放大到几百栋得补分层细节。
本站所有 3D 孪生场景、可视化系统均为个人技术实验 Demo,仅用于技术学习与效果展示,不属于对外运营平台,不提供任何商业服务。