注: 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、栅格和矢量数据,并生成对应的地形。
在这里插入图片描述

(二).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” (生成地形)按钮。
    在这里插入图片描述

三. Editor GIS 地形加载器

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

我们已在GIS地形加载器(编辑器/运行时)的每个字段中添加了工具提示,以帮助用户理解各元素的功能。
在这里插入图片描述

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

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

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

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

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

在这里插入图片描述

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

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

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

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

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

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

  • 地形材质模式

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

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

    • 纹理加载模式

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

      • 手动模式

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

在这里插入图片描述

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

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

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


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

地形文件排序规范

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

在这里插入图片描述

地形文件命名规范

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. 加载示例

    在这里插入图片描述

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

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

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

在这里插入图片描述

矢量数据配置规范

多源矢量数据加载

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

  1. 文件放置

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

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

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

在这里插入图片描述

ShapeFile + OSM files

在这里插入图片描述

GIS数据导入路径规范

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

    • StreamingAssets 文件夹(推荐)
    • 任意自定义路径
      (支持动态加载外部存储设备数据)
      在这里插入图片描述

生成地形数据的存储位置

所有通过GIS地形加载器生成的地形数据将自动保存至:
Generated GIS Terrains 文件夹
在这里插入图片描述

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

解决的问题

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

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

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

平滑强度控制

  • 数值调节

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

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

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

在这里插入图片描述
在这里插入图片描述

矢量数据与预制件系统

简介

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

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

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

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

(操作提示:通过编辑器界面可实时修改生成要素的密度、尺寸等属性)
在这里插入图片描述

预制件创建菜单

路径

GIS Terrain Loader → Create Vector Prefab

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

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

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

在这里插入图片描述

预制件文件夹

在这里插入图片描述

树木预制件配置指南

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

(操作提示:通过Inspector面板可调整树木密度、尺寸等生物群落参数)
在这里插入图片描述

  • Tree ScriptableObject parameters

在这里插入图片描述

树木预制件参数详解
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. 系统按比例自动分布

(生态模拟建议:组合使用密度/随机系数参数可创建更自然的植被分布效果)
在这里插入图片描述

建筑预制件配置说明

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

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

在这里插入图片描述

  • Building ScriptableObject parameters

在这里插入图片描述

建筑预制件参数详解
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. 增大数值提高纹理重复密度

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

在这里插入图片描述

道路预制件系统

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

  • 操作步骤

    1. 勾选生成道路选项

    2. 选择道路生成方式:

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

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

  • Road ScriptableObject parameters

在这里插入图片描述

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

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

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

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

在这里插入图片描述

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

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

  • 解决方案:

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

    2. 手动添加编译宏:

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

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

在这里插入图片描述

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

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

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

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

在这里插入图片描述

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

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

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

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

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

草地预制件系统

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

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

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

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

在这里插入图片描述

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

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

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

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

在这里插入图片描述

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

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

• GIS属性系统

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

GIS矢量数据基础

  1. 数据结构

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

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

操作示例:创建树木区域

使用工具:GlobalMapper
步骤

  1. 绘制树木分布矢量面

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

自定义GTL脚本配置指南

属性读取配置流程

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

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

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

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

在这里插入图片描述

脚本定制步骤

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

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

在这里插入图片描述

矢量数据过滤配置流程

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

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

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

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

在这里插入图片描述

对于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",然后添加到预制件列表中。

在这里插入图片描述
在这里插入图片描述

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文件生成地形

在这里插入图片描述

八. 地形容器参数

• 地形元数据

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

在这里插入图片描述

• 修改地形参数

若需修改多区块地形的参数,无需逐个区块手动调整,可直接通过容器对象脚本或检查器统一修改所需参数
在这里插入图片描述

高度图导出

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

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

在这里插入图片描述

九. 运行时GIS地形加载器

简介

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

在这里插入图片描述

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

在这里插入图片描述

如何使用运行时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<Camera3D>(); 
 
            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


十四. 相关链接


十五. 教程

• 下载免费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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐