Page 65 - 电力与能源2023年第三期
P. 65

王志科,等:大规模城市场景数据在 Unity 3D 中加载及渲染技术的应用                                259

                                                                 性能。
                4 系统关键算法与功能实现
                                                                     数据分页算法设计如下。
                    对于海量城市模型的渲染,根据对三维渲染                             (1)服务端设定一个分页参数,将场景数据按
                过程的分析,设计城市模型数据存储结构,对数据                           照经纬度位置进行数据分页加载配置,并将场景
                进行拆分处理,同时根据数据分页技术,提高对模                           数据按照分页配置,加载到 Redis 内存库中保存。
                型渲染状态的管理效率,实现动态加载、卸载模                               (2)客户端通过摄像机当前所处的经纬度位
                型,进而实现大规模城市建筑模型的渲染。                              置进行分页数据计算,根据视野的最远裁剪面和
                    遮挡剔除算法,是预先计算出一组潜在的可                          当前位置,计算出在摄像机可视范围内的分页。

                见候选多边形,然后在运行时编制索引,以便快速                              (3)客户端向服务端请求相关的分页数据,并
                获得可见几何体的估计值。具体实现步骤如下。                            将分页场景数据保存至客户端内存中。
                    (1)将地图场景切割成 Tile,再将 Tile 切割成                    (4)客户端根据内存中的分页场景数据进行
                Portal(视口)和 Cell(大物件、中物件、小物件)。                   判断,卸载掉不在视野范围内的数据,并装载新增
                    (2)检测场景物件所属 Cell,一个物件可以属                     加在视野范围内的数据。
                于多个 Cell。                                           (5)客户端将变化后的内存分页数据进行处

                    (3)利用蒙特卡洛方法 Portal 随机一些起点,                   理并在三维场景中渲染。
                Cell 随机一些终点(根据大、中、小随机不同数量
                                                                 5 结语
                的点)。
                    (4)双层遍历每个 Portal 和 Cell,射线检测是                    本文主要研究了如何通过城市的 GIS 数据,
                否阻挡,如果阻挡,判断阻挡物是否在当前检测                            生成大规模的城市建筑模型,并提出了一种海量
                Cell内,如果是,Cell可见;如果不是,Cell不可见。                   城市模型三维场景的管理方法,实现了大规模城
                    (5)保存检测数据,运行时加载解析,根据位                        市建筑模型数据的可视化渲染,并提高了场景渲
                置 检 测 当 前 Portal,然 后 遍 历 场 景 所 有 Cell 内          染效率,具有一定的实用价值。

                Item,判断显示和隐藏。                                        在以后的研究中将继续对数据处理方法进行
                    这种方式进行裁剪,更适合大地图场景操作,                         精简,编写数据处理插件,完善城市模型快速构建
                能够支持动态加载,占用内存也可忽略不计,同时                           的方法。
                消耗的 CPU 也比较少。                                    参考文献:
                    在城市三维场景中,可以采用数据分页的方                         [1]  QGIS Project. QGIS desktop 3.22 user guide[Z]2022.
                                                                                                     .
                式进行三维场景的动态调度。数据分页是指随着                           [2]  Blender 社区 . Blender 3.4 参考手册[Z] .
                                                                [3]  冯乐乐 . Unity Shader 入门精要[M] 北京:人民邮电出版
                                                                                              .
                窗口视角范围的不断变化,场景中只加载和渲染
                                                                     社,2016.
                当前视角窗口范围内的数据,并将离开视角范围                           [4]  吴香太 . 基于 GPU 的大规模场景渲染的优化算法研究与
                内的数据进行清理或者设置其他的数据卸载策                                 实现[D] 广东:华南理工大学,2013.
                                                                           .
                                                                [5]  费红辉,王毅刚 . 大规模场景分割及 LOD 结构生成算法研
                略,使得这部分数据不再渲染。这样能够保证内
                                                                         .
                                                                     究[J] 计算机应用与软件,2012,29(7):227-230.
                存中只有有限的数据量,场景中的每一帧也只有
                                                                                            收稿日期:2023-01-18
                有限的数据被送到图形渲染管道,从而提升渲染                                                         (本文编辑:赵艳粉)
   60   61   62   63   64   65   66   67   68   69   70