> 技术文档 > Unity GIS Terrain Loader 2.4 中文文档

Unity GIS Terrain Loader 2.4 中文文档

注: 2.4版本不支持WebGL ,2.5以上版本 或者pro版才支持

一. 概述

(一). 描述

GIS地形加载器(GIS Terrain Loader) 是一款运行时-编辑器插件,支持将地理数据直接导入Unity引擎。它不仅能加载真实世界的地形数据,还能兼容从各类GIS软件或外部地形生成工具(如GlobalMapper、QGIS、WorldMachine、ArcGIS、SAS.Planet等)导出的自定义地形数据。

GIS地形加载器通过加载栅格(Raster)、矢量(Vector)和数字高程模型(DEM) 数据快速创建地形,使海量数据的导入与修改变得高效便捷。

(二). 功能描述

  • 导入数字地形模型(DTM)数据,生成精确的地形景观。
  • 导入GIS矢量线数据,生成用于道路、河流、铁路、小径等地形样条线(Landscape Splines)。
  • 导入栅格(纹理)数据,为Unity地形添加贴图。

(三). 支持的数据格式

1. DEM(数字高程模型)数据:

  • *.Flt:浮点栅格文件
  • *.Ter:Terragen地形文件
  • *.Tif(16/32位)及分块Tiff:GeoTiff文件
  • *.Asc:Arc ASCII网格格式
  • *.Raw:Unity高度图数据
  • *.Png(灰度图):灰度像素文件
  • *.Las:激光雷达点云格式
  • *.Hgt:航天飞机雷达地形任务(SRTM)数据
  • *.Bil:波段按行交叉(BIL)图像文件
  • *.Bin:二进制浮点文件

2. 栅格(纹理)数据:

  • *.Jpg*.Png

3. 矢量数据:

  • *.Osm:OpenStreetMap信息
  • *.Shp:ESRI几何数据
技术规格

GIS地形加载器不依赖Unity从互联网在线源(如数据提供商)直接下载数据,而是加载本地GIS数据文件,因此完全属于离线工具


二. 快速入门

(一). GIS地形加载器编辑器窗口

  1. 在Unity菜单中选择 「Tools(工具)→ GIS Tech → GIS Terrain Loader」 ,打开GIS地形加载器窗口。
  2. 将位于 「GIS Tech/GIS Terrain Loader/Resources/GIS Terrains」 文件夹中的DEM文件拖拽至 “Terrain File”(地形文件) 字段。
  3. 点击 「Generate Terrain」(生成地形) 按钮。

GIS地形加载器将自动加载DEM、栅格和矢量数据,并生成对应的地形。
Unity GIS Terrain Loader 2.4 中文文档

(二).Runtime GIS 地形加载器

  1. 打开位于 「GIS Tech/GIS Terrain Loader/Scenes」 文件夹中的 “Runtime GIS Terrain Loader Demo Scene” (运行时GIS地形加载器演示场景)。
  2. 点击 “Load Terrain File” (加载地形文件)按钮。
  3. 选择 地形分辨率(Terrain Resolution) ,并点击 “Generate Terrain” (生成地形)按钮。
    Unity GIS Terrain Loader 2.4 中文文档

三. Editor GIS 地形加载器

• GIS地形加载器(编辑器窗口)

我们已在GIS地形加载器(编辑器/运行时)的每个字段中添加了工具提示,以帮助用户理解各元素的功能。
Unity GIS Terrain Loader 2.4 中文文档

1. 工具栏
  • \"下载示例\" :提供可被GIS地形加载器生成的DEM文件示例下载链接
  • \"帮助\" :跳转至论坛页面,用于功能咨询或问题反馈
  • \"重置\" :将所有参数恢复为默认值
2. DEM地形文件
  • DEM地形字段:载入数字高程模型文件
  • 文件读取模式:支持完整文件读取或通过坐标读取局部区域
3. 高程模式、缩放与尺寸
  • 地形高程模式

    • 真实世界高程:生成地形时保持上下纬线平均长度的真实比例
    • 夸张值:手动设置地形高度系数(取值范围[0-1])
  • 地形尺寸模式

    • 自动检测:GTL自动读取支持文件的真实地形尺寸(宽度/长度)
    • 手动设置:可自定义地形尺寸(单位:千米),适用于PNG/Raw等非地理文件或未加载DEM时
  • 启用水下地形:读取负值(海平面以下地形)

  • 限制地形高程:手动设置最小/最大高程值(推荐用于规避极端值)

  • 地形缩放:调整生成地形的缩放比例(默认值1,1,1),大型地形建议使用0.5f/0.1f/0.01f等小数值

Unity GIS Terrain Loader 2.4 中文文档

4. 地形偏好设置
  • 高度图分辨率:控制地形高度图的像素精度

  • 细节分辨率:用于放置草皮和细节网格的地形单元数量(数值越低性能越好)

  • 每块分辨率:单个地形块(mesh)的细分单元数(推荐值16,适用于超远视距细节对象)

  • 基底贴图分辨率:当视距超过基底贴图距离时,地形复合纹理的显示精度

  • 像素容差:地形贴图与生成地形之间的映射精度(数值越高精度越低,但渲染开销更小)

  • 基底贴图距离:地形纹理保持完整精度的最大显示距离(提升远景地形的渲染性能)

  • 地形材质模式

    • 自定义模式:可更换主地形材质(适用于HDRP管线)
5. 地形纹理系统
  • 纹理模式:(注意:生成的地形区块数量将依据纹理文件夹中的贴图分块数自动匹配)
• 无纹理模式:
  • 生成无贴图地形(选择此模式时无需准备纹理文件夹)

    • 自定义地形颜色:可手动指定地形颜色(仅在此模式下可用)
• 带纹理模式:
  • 根据纹理文件夹中的贴图自动生成带纹理地形

    • 纹理加载模式

      • 自动检测:GTL将自动读取纹理文件夹中的贴图分块数量

      • 手动模式

        • 当需要修改\"TerrainName_Textures\"文件夹中的贴图分块数时启用
        • 需手动输入地形区块数量,GTL将根据设定值自动分割/合并现有贴图
        • (警告:处理超大尺寸贴图时可能因内存错误导致崩溃)
        • GTL会保留原始纹理文件夹并创建新副本
• 混合贴图模式:
  • 使用Splat Map(混合贴图)技术为地形着色

Unity GIS Terrain Loader 2.4 中文文档

6. 地形平滑处理
  • 启用/禁用高度平滑:用于柔化地形轮廓,减少海拔突变产生的锯齿感

  • 启用/禁用表面平滑:适用于存在阶梯状断层、带状色阶或未优化高度数据的地形

    • 平滑强度:数值越高平滑效果越显著(1为最低平滑度)
7. 矢量数据生成
  • 矢量类型:选择数据源(OSM或ShapeFile)
  • 树木生成:从矢量文件加载并生成植被
  • 草地生成:从矢量文件加载并生成草地
  • 道路生成:从矢量文件加载并生成道路(可选Unity线渲染或EasyRoad3D插件)
  • 建筑生成:从矢量文件加载并生成建筑物
8. 地形生成控制
  • 清除现有地形:启用后自动删除场景中已生成的地形
  • 生成地形按钮:点击启动地形生成流程

Unity GIS Terrain Loader 2.4 中文文档
Unity GIS Terrain Loader 2.4 中文文档

Unity GIS Terrain Loader 2.4 中文文档


四. 准备与导入GIS数据至Unity

地形文件排序规范

地形文件必须按以下顺序排列:

Unity GIS Terrain Loader 2.4 中文文档

地形文件命名规范

DEM文件
  • 必须包含高程数据的核心文件(无固定命名要求)
栅格数据(纹理)
  • 需存放在名为 \"DEM文件名_Textures\" 的文件夹内
    (示例:若DEM文件名为Alps.flt,则纹理文件夹应命名为Alps_Textures)
矢量数据
  • 使用OpenStreetMap/ShapeFile格式文件
  • 需命名为 \"DEM文件名_VectorData\"
    (功能说明:用于生成树木/草地/道路/建筑等矢量要素)

纹理文件命名规则

  1. 配置文件路径:

    GIS Tech/GIS Terrain Loader/Resources/TextureSourceDic/TextureSourceDic.json

  2. 技术特性:
    • 该JSON文件定义了GTL可识别的纹理命名格式
    • 支持动态扩展新格式(如Globalmapper的瓦片命名规则:Tile__{x}__{y}
  3. 文件命名与加载规则

    GTL将根据以下规范从纹理文件夹读取并应用贴图:

    • 命名要求:所有纹理必须按照示例规范重命名(如Tile__{x}__{y}.jpg
    • 加载逻辑:系统自动匹配文件名并对应分配到相应地形区块
  4. 加载示例

    Unity GIS Terrain Loader 2.4 中文文档

投影文件(.Prj)设置规范

支持的投影类型
  • 地理坐标系(Geographic Lat/Lon)
  • 通用横轴墨卡托(UTM)
  • 兰伯特(Lambert)
配置要求
  1. 非地理坐标系文件需提供.prj投影文件
  2. 地理坐标系文件(默认WGS84)无需额外配置

(操作指引详见示例目录:Example_ASC/Example_FromLidar

Unity GIS Terrain Loader 2.4 中文文档

矢量数据配置规范

多源矢量数据加载

GTL支持混合加载多种矢量数据格式(OSM/ShapeFile等),操作流程如下:

  1. 文件放置

    • 将所有OSM/SHP文件放入DEM文件名_VectorData文件夹
    • 无需手动分类(系统自动通过生成器智能过滤)
  2. 技术特性

    • 自动识别各矢量数据类型(道路/建筑/植被等)
    • 支持批量加载(文件数量无硬性限制)

注:矢量数据文件夹需与DEM文件保持同名+_VectorData后缀(例:Alps.flt对应Alps_VectorData文件夹)

Unity GIS Terrain Loader 2.4 中文文档

ShapeFile + OSM files

Unity GIS Terrain Loader 2.4 中文文档

GIS数据导入路径规范

编辑器模式(Editor Mode)
  • 必须将所有地形数据导入至:
    GIS Tech/GIS Terrain Loader/Resources/GIS Terrains 文件夹
    (注:此为Unity编辑器专用路径)
运行时模式(Runtime Mode)
  • 可选存储位置

    • StreamingAssets 文件夹(推荐)
    • 任意自定义路径
      (支持动态加载外部存储设备数据)
      Unity GIS Terrain Loader 2.4 中文文档

生成地形数据的存储位置

所有通过GIS地形加载器生成的地形数据将自动保存至:
Generated GIS Terrains 文件夹
Unity GIS Terrain Loader 2.4 中文文档

五. 地形表面与高度平滑处理

解决的问题

GIS地形加载器提供专业级地形平滑处理功能,可有效解决以下常见地形生成问题:

  • 锯齿状边缘(Jaggies)
  • 阶梯状断层(Terraces)
  • 色带分层(Banding)
  • 未优化的原始高度数据

(图示说明:展示1025分辨率高度图的处理对比效果)

平滑强度控制

  • 数值调节

    • 数值越高 → 平滑效果越显著
    • 设为1 → 保持最小平滑度
  • 技术提示

    • 过度平滑会导致地形特征丢失
    • 高频细节(如岩石纹理)会随平滑强度增加而衰减

(操作建议:根据项目需求在细节保留与视觉平滑间取得平衡)

Unity GIS Terrain Loader 2.4 中文文档
Unity GIS Terrain Loader 2.4 中文文档

矢量数据与预制件系统

简介

GIS地形加载器(GTL)提供完整的矢量数据转化功能,可通过OSM/ShapeFile矢量文件生成:

支持生成的3D要素类型
  • 自然要素:草地、树木
  • 人工构筑物:道路、建筑
技术特性
  1. 预制件架构

    • 全部采用基于ScriptableObject的可定制预制件
    • 开放类型库管理(支持增删改查操作)
  2. 参数化配置

    • 自由调整各类要素参数
    • 支持真实世界比例还原

(操作提示:通过编辑器界面可实时修改生成要素的密度、尺寸等属性)
Unity GIS Terrain Loader 2.4 中文文档

预制件创建菜单

路径

GIS Terrain Loader → Create Vector Prefab

操作流程
  1. 在Unity编辑器顶部菜单栏选择该路径

  2. 从下拉菜单中选择需要生成的预制件类型:

    • 植被(树木/草地)
    • 道路网络
    • 建筑群

Unity GIS Terrain Loader 2.4 中文文档

预制件文件夹

Unity GIS Terrain Loader 2.4 中文文档

树木预制件配置指南

创建流程
  1. 菜单导航
    Unity编辑器顶部菜单栏选择
    GIS Terrain Loader → Create Vector Prefab → Tree
  2. 生成位置
    新建的树木预制件将自动存储在
    项目资源/Trees 文件夹内
技术特性
  • 自动继承矢量数据中的树种分布参数
  • 支持LOD(多细节层次)配置
  • 可批量生成不同树种变体

(操作提示:通过Inspector面板可调整树木密度、尺寸等生物群落参数)
Unity GIS Terrain Loader 2.4 中文文档

  • Tree ScriptableObject parameters

Unity GIS Terrain Loader 2.4 中文文档

树木预制件参数详解
1. 树木类型 (Tree Type)
  • 功能:定义植被种类(具体配置详见下节说明)
2. 树木密度 (Tree Density)
  • 作用:控制矢量多边形区域内树木的平均分布数量
  • 技术逻辑:基于多边形面积自动计算单位面积植被量
3. 基准缩放系数 (Tree Scale Factor)
  • 功能:调整已定义树种的全局尺寸
  • 注意:仅对Tree Type中指定的模型生效
4. 随机缩放系数 (Tree Random Scale Factor)
  • 功能:为同区域树木添加尺寸随机性
  • 效果值
    0=完全统一尺寸
    1=最大随机差异(推荐0.2-0.5增强自然感)
5. 树木预制件库 (Tree Prefab)
  • 内容:该区域可生成的所有树木预制件列表

  • 工作流

    1. 拖拽预制件至列表
    2. 系统按比例自动分布

(生态模拟建议:组合使用密度/随机系数参数可创建更自然的植被分布效果)
Unity GIS Terrain Loader 2.4 中文文档

建筑预制件配置说明

创建步骤
  1. 菜单操作
    在Unity编辑器顶部导航至
    GIS Terrain Loader → Create Vector Prefab → Building
  2. 生成路径
    新建建筑预制件将自动存入
    项目资源/Buildings 文件夹
核心特性
  • 自动加载机制
    系统自动识别Buildings文件夹内所有预制件
    (无需手动添加至列表)
  • 矢量数据适配
    自动匹配OSM/ShapeFile中的建筑轮廓数据
工作流提示
  • 建筑群生成规模与原始GIS数据精度正相关
  • 支持LOD组配置优化渲染性能

(技术说明:此模块专为大规模城市建模设计,建议搭配\"Building Type\"参数使用)

Unity GIS Terrain Loader 2.4 中文文档

  • Building ScriptableObject parameters

Unity GIS Terrain Loader 2.4 中文文档

建筑预制件参数详解
1. 建筑类型 (Building Type)
  • 功能:定义建筑分类标准(详见下节说明)
2. 屋顶类型 (Roof Type)
  • 选项

    • 穹顶式 (Dome)
    • 平顶式 (Flat)
  • 应用:自动适配不同建筑风格的屋顶结构

3. 高度调节 (Height)
  • 功能:自定义建筑垂直尺度
  • 技术:支持米制单位输入或按楼层数换算
4. 材质系统
  • 外墙材质 (Wall Materials) :设置建筑立面纹理
  • 屋顶材质 (Roof Materials) :独立配置屋顶贴图
  • 特性:支持PBR材质流程
5. UV贴图控制 (Wall and Roof Tilling)
  • 功能:精确调节纹理映射比例

  • 工作流

    1. 基准值=1.0(原始UV比例)
    2. 增大数值提高纹理重复密度

(城市设计建议:组合使用高度随机化与材质变体可增强建筑群自然感)

Unity GIS Terrain Loader 2.4 中文文档

道路预制件系统

道路生成功能
  • 双模式支持:可在编辑器模式和运行时模式下生成道路网络

  • 操作步骤

    1. 勾选生成道路选项

    2. 选择道路生成方式:

      • EasyRoad3D(需安装该插件)
      • Unity简单线渲染器
预制件创建
  1. 菜单路径
    GIS地形加载器 → 创建矢量预制件 → 道路
  2. 生成位置
    新建的道路预制件将自动存储在项目资源/Roads文件夹中
技术说明
  • 自动加载机制:系统会自动识别Roads文件夹内的所有道路预制件(无需手动添加到列表)
  • 数据兼容性:支持OpenStreetMap和ShapeFile格式的矢量道路数据

(注:使用EasyRoad3D插件时需确保已导入项目资源包)

  • Road ScriptableObject parameters

Unity GIS Terrain Loader 2.4 中文文档

道路预制件参数配置
道路类型 (Road Type)
  • 功能:定义道路分类标准(具体配置详见下节说明)
材质模式 (Material mode)
  • 自动模式

    • Resources/Environment/Roads/Materials路径自动加载材质
    • 根据ScriptableObject名称智能匹配ES3/LineRenderer材质
  • 自定义模式

    • 手动指定道路材质
道路材质 (Road Material)
  • 作用:当选择自定义模式时,GTL将使用此处指定的材质
道路参数
  • 宽度 (Road width) :设置道路的物理宽度(单位:米)
  • 颜色 (Road Color) :定义道路的基础色调

(技术说明:自动模式下的材质命名需与ScriptableObject名称保持严格一致)

Unity GIS Terrain Loader 2.4 中文文档

重要技术说明
EasyRoad3D 使用须知
  1. 前置要求

    • 必须已下载并导入EasyRoad3D资源包至项目
    • 运行时生成3D道路需使用EasyRoad3D专业版
常见错误处理
情况1:首次集成报错
  • 问题特征:初次导入EasyRoad3D包时出现编译错误

  • 解决方案:

    1. 确保启用图示标注的代码段(参考文档配图)

    2. 手动添加编译宏:

      • 路径:编辑 → 项目设置 → Player
      • 脚本编译符号字段添加:EASYROAD3D

(操作提示:错误截图可查阅文档第17页配图示例)

Unity GIS Terrain Loader 2.4 中文文档

手动配置说明
添加编译符号步骤
  1. 打开设置面板
    通过Unity顶部菜单选择:
    编辑 → 项目设置 → Player

  2. 配置编译符号
    Player设置面板中:

    • 定位到Scripting define symbol输入框
    • 手动添加(二选一):
      EASYROAD
      EASYROAD3D
  3. 完成设置
    保存后Unity将自动重新编译项目

(技术说明:此操作用于强制激活EasyRoad3D的代码编译路径,解决首次导入时的符号缺失问题)

Unity GIS Terrain Loader 2.4 中文文档

技术配置说明
情况2:移除EasyRoad3D时的处理
  1. 操作流程

    • 当从项目中移除EasyRoad3D资源包时

    • 需手动删除Player设置中的编译符号:

      • 进入:编辑 → 项目设置 → Player
      • 脚本编译符号字段删除:
        EASYROAD
        EASYROAD3D
道路材质自定义
  • 配置路径
    @GIS Tech/GIS Terrain Loader/Resources/Environment/Roads

    • 支持修改所有道路材质资源

草地预制件系统

创建草地模型
  1. 菜单路径
    GIS地形加载器 → 创建矢量预制件 → 草地模型
  2. 生成位置
    新建文件将存储在Grass/Models文件夹
技术特性
  • 基于ScriptableObject架构

  • 参数体系与Unity原生Detail系统完全兼容

    • 支持密度/大小/颜色等标准属性配置

(注:草地模型数据可通过矢量文件属性批量生成)

Unity GIS Terrain Loader 2.4 中文文档

草地预制件创建指南
操作步骤
  1. 创建路径
    通过Unity菜单选择:
    GIS地形加载器 → 创建矢量预制件 → 草地预制件
  2. 生成位置
    新建的预制件将自动存储在:
    项目资源/Grass 文件夹
技术实现
  • 数据结构:基于ScriptableObject的智能预制件

  • 数据绑定
    自动关联GIS类型标识与草地模型数据

    • 支持从矢量文件读取植被分布参数
    • 可批量生成不同生态区域的草地变体

(注:通过Inspector面板可调整密度/尺寸等生物群落参数)

Unity GIS Terrain Loader 2.4 中文文档

草地参数配置
核心参数
  • 草地类型:(详见下节说明)
  • 分布密度:控制同类型区域内的植被分布密度
  • 预制件库:为该区域配置随机生成的草地模型集合

六. 自定义预制件类型与GIS属性

• GIS属性系统

通过GIS应用程序可轻松创建并配置矢量数据属性。本节将详解矢量数据库的定制方法。

GIS矢量数据基础

  1. 数据结构

    • 由点/线/面要素构成的地理数据集
    • 每个要素(Feature)包含:
      ✓ 空间坐标信息
      ✓ 属性描述数据
  2. 核心特性

    • 不仅记录物体空间位置
    • 同时存储物体特征属性(如树种/高度等)

操作示例:创建树木区域

使用工具:GlobalMapper
步骤

  1. 绘制树木分布矢量面

  2. 在要素属性面板中添加:

    • 树种类型
    • 树龄层级
    • 植被密度等属性字段

(技术说明:导出的OSM/Shapefile将保留所有属性数据供GTL读取)

Unity GIS Terrain Loader 2.4 中文文档

当点击要素信息时,会显示该属性面板:

Unity GIS Terrain Loader 2.4 中文文档

此时,文件已可导出为OSM格式或Shapefile格式。

Unity GIS Terrain Loader 2.4 中文文档

自定义GTL脚本配置指南

属性读取配置流程

  1. 打开脚本目录
    定位至:
    GIS Tech/GIS Terrain Loader/Scripts/GISTerrainLoaderVector/GISTerrainLoaderVectorFilter

  2. 编辑枚举类
    修改GISTerrainLoaderTableKeyEnum.cs文件:

    • 在枚举结构中添加新增的属性字段名
    • 保存编译后即可被GTL识别

(操作图示:参见文档第22页的代码修改示例)

Unity GIS Terrain Loader 2.4 中文文档

脚本定制步骤

树木类型枚举配置
  1. 打开脚本文件
    导航至项目中的:
    GISTerrainLoaderFilterTags.cs 类文件
  2. 修改TreeType枚举
    在枚举结构中添加新的树种标识符:

(操作提示:需确保枚举值与GIS矢量数据中的\"type\"字段完全一致)

Unity GIS Terrain Loader 2.4 中文文档

矢量数据过滤配置流程

ShapeFile属性过滤设置
  1. 打开加载器脚本
    定位至:
    GISTerrainLoaderShapeFileLoader.cs

  2. 修改过滤函数
    在文件内的数据加载函数中:

    // 在属性过滤处添加新字段(示例)if (feature.Attributes.ContainsKey(\"树种类别\")) { var treeType = feature.Attributes[\"树种类别\"]; // 添加自定义处理逻辑}

(关键配置点:需保持字段名与ShapeFile属性表完全一致,包括大小写)

Unity GIS Terrain Loader 2.4 中文文档

对于OSM文件:在GISTerrainLoaderOSMFileLoader.cs文件中执行相同操作。

if (BaseTags.ContainsKey(TableTagKeyEnum.Leisure) || BaseTags.ContainsKey(TableTagKeyEnum.Landuse)){ FiltredTreesData.Ways.Add(wayDic.Key, wayDic.Value); FiltredGrassData.Ways.Add(wayDic.Key, wayDic.Value);}

最后一步:创建树木预制件并将其类型设为\"forest\",然后添加到预制件列表中。

Unity GIS Terrain Loader 2.4 中文文档
Unity GIS Terrain Loader 2.4 中文文档

We can do the same steps for other vector prefabs!

七. PDAL插件说明

  1. 通过PDAL生成地形

    GTL通过PDAL管道从带有地理参考的LAS文件生成地形。如果项目中不需要使用LAS文件,可以直接删除plugins文件夹中的pdal库而不会影响其他功能(此功能仅限GTL 2.4及以上版本)。

  2. PDAL插件激活

    PDAL插件以压缩文件形式存放在plugins文件夹中,激活该库需要执行以下步骤:

    • 将Lidar.rar解压到plugins文件夹
    • 返回Unity并打开PlayerSettings
    • 在Scripting Define Symbols字段添加:GISTerrainLoaderPdal
    • Unity将自动重新编译项目
    • 重启Unity后即可设置LAS文件生成地形

Unity GIS Terrain Loader 2.4 中文文档

八. 地形容器参数

• 地形元数据

地形生成后,可通过检查器查看其元数据面板

Unity GIS Terrain Loader 2.4 中文文档

• 修改地形参数

若需修改多区块地形的参数,无需逐个区块手动调整,可直接通过容器对象脚本或检查器统一修改所需参数
Unity GIS Terrain Loader 2.4 中文文档

高度图导出

GTL支持将生成的地形高度图导出为以下格式:

  • Raw格式(8-16位)
  • PNG/JPG灰度图

Unity GIS Terrain Loader 2.4 中文文档

九. 运行时GIS地形加载器

简介

打开位于《GIS Tech/GIS Terrain Loader/Scenes》文件夹中的\"Runtime GIS Terrain Loader Demo Scene\"场景,点击\"Load Terrain File\"按钮,选择地形分辨率后点击\"Generate terrain\"生成地形。
使用摄像机查看生成的地形。

Unity GIS Terrain Loader 2.4 中文文档

可通过检查器修改地形参数(参数与GTL编辑器中的相同)。

Unity GIS Terrain Loader 2.4 中文文档

如何使用运行时GTL脚本

  1. 在场景中创建新的GameObject

  2. 添加RuntimeTerrainGenerator.cs脚本

  3. 添加GISTerrainLoaderRuntimePrefs.cs脚本

  4. 创建自定义脚本(GenerateSimpleTerrain.cs)

  5. 添加以下代码

/* Unity GIS Tech 2020-2021 */ using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; namespace GISTech.GISTerrainLoader { // In this demo example we will load/Generate terrain from // StreamingAsset folder public class GenerateSimpleTerrain: MonoBehaviour { public KeyCode GenerateKey; private string TerrainFilePath; private RuntimeTerrainGenerator RuntimeGenerator; private GISTerrainLoaderRuntimePrefs RuntimePrefs; private Camera3D camera3d; void Start() { camera3d = Camera.main.GetComponent();  TerrainFilePath = Application.streamingAssetsPath + \"/GIS Terrains/PNG Demo/ASTER30m.png\";  RuntimePrefs = GISTerrainLoaderRuntimePrefs.Get;  RuntimeGenerator = RuntimeTerrainGenerator.Get; } void Update() { if(Input.GetKeyDown(GenerateKey)) GenerateTerrain(TerrainFilePath); } private void InitializingRuntimePrefs(string TerrainPath) { RuntimeGenerator.Error = false; RuntimeGenerator.enabled = true; RuntimeGenerator.FilePath = TerrainPath; RuntimeGenerator.RemovePrevTerrain = true;  //Load Real Terrain elevation values RuntimePrefs.TerrainElevation = TerrainElevation.RealWorldElevation;  //Note that GTL Can not Detect Real PNG dimensions so we need to set them manually RuntimePrefs.terrainDimensionMode = TerrainDimensionsMode.Manual; RuntimePrefs.terrainDimensions = new Vector2(15, 15);  RuntimePrefs.heightmapResolution = 513; RuntimePrefs.textureMode = TextureMode.WithTexture; } private void GenerateTerrain(string TerrainPath) { if (!string.IsNullOrEmpty(TerrainPath) && System.IO.File.Exists(TerrainPath)) {  InitializingRuntimePrefs(TerrainPath);  StartCoroutine(RuntimeGenerator.StartGenerating()); } else {  Debug.LogError(\"Terrain file null or not supported.. Try againe\");  return; } } } } 

经纬度坐标获取与设置

设置Unity世界空间位置的方法:

var Newposition = GeoRefConversion.LatLonToUWS(DVector2 latlon, TerrainContainerObject container); myGameobj.Transform.position = Newposition; 

获取游戏对象经纬度和高程的方法:

 public DVector3 GetLatLonElevation(Vector3 position, TerrainContainerObject container) { var LatLonPos = GeoRefConversion.UnityWorldSpaceToLatLog(position, container); var Pos = new DVector3(LatLonPos.x, LatLonPos.y, Math.Round(GeoRefConversion.GetRealWorldHeight(container, position), 2)); return Pos; } 

如何使用投影系统

(如何获取UTM坐标而非地理经纬度坐标?)

//Set Projection Type RuntimePrefs.Projection = Projections.UTM; //Get Object unity world space position var ObjPos= myGameobj.Transform.position; string utmPos = GetPosition(ObjPos, RuntimePrefs.Projection) ; //Debug or set string to UI text Debug.Log(utmPos); //Function to Get position in the selected projection private string GetPosition(Vector3 SpacePos,Projections proj) { var LatLon = GeoRefConversion.UWSToLatLog(SpacePos, Scale);  return GeoRefConversion.ConvertLatLonTO(LatLon, proj); ; } 

十. 支持的投影系统

  • 地理经纬度(十进制度数,度分秒格式)

  • UTM(米制,军用网格参考系)

  • 兰伯特投影 (Lambert)

十一. 故障排除

o 新生成地形分辨率/精度不足:

  1. 提高高度图分辨率
  2. 增加新地形数量

o 出现错误提示\"Terrain Dimensions: 0 X 0 Km\",无法检测地形尺寸,加载区域边界为:P1 - {12018159.109,5037755.431}P2 - {12018159.109,5037755.431}

此问题由不支持的坐标系导致

o 项目构建后出现粉色材质:

独立构建时若未使用地形着色器需手动添加:
路径:“Player Settings -> Graphics -> Built-in Shader Settings”
添加:

  • Nature/Terrain/Diffuse
  • Nature/Terrain/Specular
  • Nature/Terrain/Standard

o 地形变形(尺寸正确但高度异常):

检查地形元数据面板中的最小/最大高程值,如不正确需启用\"limit terrain elevation mode\"并设置正确高程范围[m]


十二. 使用限制

  • 处理大量地形时可能因内存错误崩溃
  • 建议:
    • 生成单个高分辨率地形或多个小地形(分辨率≤128)
    • 推荐使用小尺寸纹理节省内存
  • 不支持OpenGL
  • 未在Unity Mac测试
  • 不支持地形流式加载

十三. 技术支持

问题咨询(24小时内回复):
邮箱:SalahKe2008@Gmail.com


十四. 相关链接

  • Asset Store页面:
    https://assetstore.unity.com/packages/tools/integration/gis-terrain-loader-147632
  • 示例数据:
    https://assetstore.unity.com/packages/tools/integration/gis-terrain-loader-data-exemples152552
  • 支持论坛:
    https://forum.unity.com/threads/released-gis-terrain-loader.726206/
  • YouTube频道:
    https://www.youtube.com/channel/UCEQQEpPvbUqHksoxSB8_cQ/videos?view_as=subscriber

十五. 教程

• 下载免费GIS数据

本教程视频将演示如何下载GIS数据(栅格、DEM和矢量)以用于GIS地形加载器。

视频链接:https://youtu.be/0WIfOIO7ByY

程序化地形贴图混合教程

本视频教程将展示通过GIS地形加载器添加纹理的三种方法:

  • 使用纹理:从指定文件夹加载真实世界影像纹理
  • 无纹理:不分配任何纹理(可选\"自定义地形颜色\")
  • 混合贴图:根据可自定义高度应用纹理

视频链接:https://youtu.be/vhL1q3krPC0

LiDAR转Unity地形教程(LAS转DEM)

本视频教程将演示如何通过GIS地形工具将LiDAR点云数据(LAS文件)转换为Unity地形。

视频链接:https://youtu.be/78ZRL8x6MBE

WorldMachine到Unity

在这个教程视频中,您将学习如何使用GIS Terrain Loader将Terragen文件从WorldMachine导入到Unity 3D(编辑器和运行时)。
视频链接:https://youtu.be/liO8lNqE6Jw

QGIS和SAS Planet到Unity

在这个教程视频中,您将学习如何使用GIS Terrain Loader将GeoTIFF文件从QGIS和栅格数据从SAS.Planet导入到Unity,以生成Unity地形(编辑器和运行时)。
视频链接:https://youtu.be/bIuXQltiyfI