Создание и текстурирование трехмерных пространственных объектов в ArcGIS

Изучаем основы построения объектов-мультипатчей

Серебрянная О.Л., Esri CIS (По материалам Esri)

Сreating 3D structures with Multipatch Features

 

Создание и представление виртуального трехмерного города – важный инструмент ГИС, служащий для визуализации и анализа городской среды. Он может широко использоваться в решении широкого круга задач: от встраивания нового здания в уже существующее окружение до проведения трехмерного анализа, например, зон видимости или зон затенения. Разработанный Esri тип пространственных объектов – мультипатч – считается ключевым элементом при работе в приложениях ArcGlobe и ArcScene. Начиная с 10-й версии, в ArcGIS появились новые возможности для управления 3D данными и проведения трехмерного анализа городской среды. Для ознакомления с ними и их освоения рассмотрим описываемый далее пример, представленный в виде ряда шагов, в комплексе составляющих наглядное учебное упражнение с доступными наборами исходных данных. А можно просто посмотреть приведенные в этой статье рисунки, отражающие основные этапы решения поставленной задачи.

В данном упражнении подробно описан процесс создания и добавления текстуры для пространственного 3D объекта-мультипатча, в качестве которого используется относительно простой объект городской застройки – пешеходная эстакада в центре города Филадельфия. Исходными данными являются полигональный объект и аэроснимок высокого разрешения. При выполнении упражнения читатель познакомится с инструментами ArcGIS 10 для импорта, экспорта и размещения различных типов 3D пространственных объектов.

Предполагается, что читатель знаком с приложениями ArcGIS Desktop и дополнительным модулем 3D Analyst с приложением ArcGlobe. Не помешает также знакомство с инструментом Google SketchUp. Для самостоятельного выполнения упражнения вам потребуются следующие программное обеспечение и данные:

  • ArcGIS 10 с дополнительными модулями 3D Analyst и Spatial Analyst
  • Google SketchUp 8 (можно скачать бесплатно с сайта sketchup.google.com/download/)
  • Сами данные можно скачать с ресурса ArcGIS.com (выполнив поиск по словам 3D Virtual City: Multipatch Overpass, либо по адресу www.bit.ly/ep5a2s)

 

Упражнение состоит из четырех разделов:

  • Вытягивание полигонального объекта-эстакады с последующим экспортом в 3D пространственный объект-мультипатч ArcGlobe
  • Извлечение снимка для его использования в качестве текстуры поверхности
  • Применение изображения и цвета для поверхности 3D эстакады в SketchUp
  • Импорт текстурированной эстакады обратно в ArcGlobe

 

Обзор упражнения

В начале упражнения пространственный объект-эстакада берется с имеющейся не очень точной цифровой моделью рельефа (ЦМР) Филадельфии 1-метрового разрешения (рис. 1). Подобного типа ошибки захвата данных очень хорошо видны на ЦМР высокого разрешения для городских территорий, где четко просматриваются все развязки и их высотная структура. А на ЦМР низкого разрешения они все выглядят плоскими. Для исправления такой ситуации можно, например, отредактировать ЦМР или добавить ещё один полигон, чтобы поднять дорогу и создать плоскую поверхность. Но хотя это и исправит высоту дороги над развязкой, под ней при этом получится сплошная стена, непроходимая для транспорта, следующего по нижнему участку дороги.

 


Рис. 1. В данном упражнении показано, как улучшить модель и исправлять ошибки, нередко возникающие на ЦМР высокого разрешения на городских территориях.

 

В данном упражнении вместо редактирования ЦМР будет показано, как создать простой, но реалистичный 3D пространственный объект-мультипатч, оставляющий пространство внизу. Для этого нам потребуется файл с полигональными объектами и кусочек снимка высокого разрешения. Для нанесения этого снимка на поверхность 3D модели эстакады будем использовать SketchUp.

Предлагаемое решение задачи разбито на логические части и пронумерованную последовательность шагов ее выполнения.

Часть 1. Вытягивание полигонального объекта-эстакады с последующим экспортом в 3D пространственный объект-мультипатч ArcGlobe

  • Сначала надо с помощью ArcMap создать полигональный пространственный объект в проекции UTM, зона 18N. Затем этот полигон надо будет вытянуть (по вертикали), чтобы создать трехмерную эстакаду. После добавления файла изображения из базы геоданных Overpass в документ ArcMap, мы создадим простой прямоугольник, немного выходящий в начале и конце за пределы эстакады (уже готовый полигональный пространственный объект находится в классе пространственных объектов overpass_ply в базе геоданных Overpass.gdb).
  • Далее закроем ArcMap и откроем файл ArcGlobe Overpass.3dd. Добавим только что созданный полигональный класс пространственных объектов. По умолчанию, полигон будет накинут на поверхность глобуса как покрывало (рис. 2, 3). Заметим, что полигон должен полностью закрывать находящийся под ним кусок дороги, а также приподнятые части дороги по бокам так, чтобы между ними не получилось зазоров, когда полигон вытягивается в 3D.


Рис. 2. Добавление созданного в ArcMap полигона в документ ArcGlobe (Overpass.3dd).


Рис. 3. По умолчанию, полигон «укладывается» на поверхность как покрывало.

 

  • Чтобы корректно установить высоту эстакады, надо уточнить высоту ЦМР с обеих сторон от нее (рис. 4). Для этого можно использовать инструмент Идентифицировать (Identify), указав в качестве идентифицируемого слоя ЦМР, в данном случае 1-m DEM. Высота эстакады с обеих сторон около 41 фута.

 


Рис. 4. Для определения величины вытягивания полигона надо измерить значения высоты ЦМР по краям дороги (обозначены стрелками).


Рис. 5. Задание высоты полигонального объекта-эстакады в диалоговом окне Свойства слоя.

 

  • Чтобы установить высоту полигонального объекта-эстакады, надо открыть диалоговое окно Свойства слоя (Layer properties) на закладке Высота (Elevation) и выбрать опцию Плавающий без поверхности (Floating without a surface). В самой нижней опции Добавить постоянный сдвиг по высоте надо ввести требуемое значение (как показано на рис. 5). Высота ЦМР здесь 41 фут, то есть примерно 12 метров.
  • Определив базовую высоту, надо применить вытягивание, равное 2 м. Чтобы верхняя часть эстакады совпадала с поверхностью дороги с каждой стороны, используйте либо высоту 12 метров и вытягивание -2, или высоту 10 метров и вытягивание +2.
  • Теперь воспользуемся инструментом 3D Слой в класс объектов (Layer 3D To Feature Class) из набора инструментов 3D Analyst, чтобы вытянуть полигон в пространственный объект-мультипатч (или, чтобы пропустить этот шаг, можно использовать заранее подготовленный объект overpass_mp).
  • Теперь надо конвертировать трехмерный пространственный объект-мультипатч в файл формата COLLADA, который можно импортировать в SketchUp и применить к нему снимок с изображением (рис. 6). Это делается с помощью инструмента 3D слой в класс объектов (Layer 3D To Feature Class) из набора инструментов Конвертация (Conversion), сохраняющего на выходе файл COLLADA в указанной папке.

 

   
Рис. 6. Конвертация вытянутого трехмерного полигона (А) в пространственный объект-мультипатч (Б) с помощью инструмента 3D Слой в класс объектов.

 

Часть 2. Извлечение снимка для его использования в качестве текстуры поверхности

  • Извлечем изображение для поверхности эстакады с помощью инструмента Извлечь по маске (Extract By Mask) из набора инструментов Spatial Analyst. В параметрах инструмента надо указать фрагмент изображения в качестве входного растра и полигон эстакады overpass в качестве данных маски (рис. 7). Если хотите пропустить этот шаг, можно использовать готовый выходной файл imagery_extract.
  • Теперь конвертируем извлеченное изображение в формат PNG с помощью инструмента Копировать растр (Copy raster) из набора инструментов Управление данными (Data management tools). В качестве входного растра укажем imagery_extract, выходной растр должен быть PNG и Тип пиксела – 1_BIT_UNSIGNED.

 

   
Рис. 7. С помощью инструмента Извлечь по маске (Extract By Mask) из набора инструментов Spatial Analyst обращаемся к изображению для поверхности эстакады.

 

Часть 3. Применение изображения и цвета для поверхности 3D эстакады в SketchUp

  • Откроем SketchUp и с помощью команд File > Import импортируем сохраненную на седьмом шаге модель COLLADA (*.dae). С помощью инструмента Выбрать выделим модель, щёлкнем правой кнопкой и воспользуемся командой Разъединить (рис. 8).


Рис. 8. В SketchUp выберем модель а затем щёлкнем правой кнопкой и воспользуемся командой Разъединить (Explode).


Рис. 9. Передвигаем четыре булавки на края эстакады и растягиваем изображение по его размерам.


Рис. 10. С помощью цветовой заливки раскрашиваем боковые и нижнюю части эстакады.

 

  • Активизируем только верхнюю поверхность с помощью инструмента Выбрать (Select). С помощью Файл – Импорт добавим изображение PNG, которое было экспортировано на девятом шаге. С помощью опции Использовать как текстуру накинем это изображение на верхнюю поверхность (ничего страшного, если получилось не очень точно).
  • Убедимся, что верхняя поверхность всё ещё выбрана, и с помощью команд меню Правка – Грань – Текстура – Положение расположим на ней фотоизображение. Все четыре находящиеся по углам булавки перетащим на углы объекта-эстакады, чтобы точно подогнать изображение под размер (рис. 9).
  • Теперь с помощью Заливки (рис. 10) можно применить желаемый цвет для всех остальных сторон и нижней части эстакады (в нашем случае хорошо подходит цвет Color_C15 из стандартной палитры Материалы).
  • Если изображение добавлено и раскрашено, экспортируем модель (Файл – Экспорт – 3D Модель) обратно в файл COLLADA, которым затем можно заменить нетекстурированный мультипатч в документе ArcGlobe. Не обязательно сохранять в формате COLLADA, можно на данном шаге использовать формат SketchUp версии 6 (File > Save As > SketchUp Version 6).

 

Часть 4. Импорт текстурированной эстакады обратно в ArcGlobe

  • Нетекстурированный мультипатч находится на своем месте, теперь можно начать сеанс 3D редактирования и с помощью инструмента Редактировать размещение (Edit placement) выбрать эстакаду (рис. 11а). С помощью инструмента Заменить моделью (Replace with Model) в меню панели инструментов Редактор 3D (3D Editor) найдем файл COLLADA (или SketchUp), который был сохранен на 14-м шаге. Готовый текстурированный файл COLLADA также находится в скачанной вместе с архивом папке 3D Models. Сохраним изменения – и новый текстурированный объект-эстакада появится вместо нетекстурированной версии (рис. 11б). (Примечание: можно воспользоваться готовым текстурированным мультипатчем overpass_mp, который тоже находится в базе геоданных.)
  • Чтобы сделать модель ещё более реалистичной, ниже эстакады можно добавить тень, маскирующую дублирующееся изображение на автостраде внизу (в базе геоданных Overpass это shadow_ply). Копию исходного объекта-эстакады надо сделать немного уже, чтобы тень не была видна на верхней поверхности дороги (рис. 12). Для этого, например, применим 80% черной заливки (CMYK=0,0,0,80) и прозрачность 10%.

   
Рис. 11. С помощью инструмента Редактировать размещение выбираем эстакаду (А) и с помощью инструмента Заменить моделью в меню панели инструментов Редактор 3D добавляем созданную ранее модель (Б).


Рис. 12. Теперь сравните изображение эстакады: как было (А) и как стало (Б).

 

На этом решение поставленной задачи достигнуто и наше упражнение завершено.

В качестве заключения. А теперь еще раз рассмотрите последний рисунок и сравните, как выглядит эстакада до и после размещения текстурированного мультипатча. Модель стала намного более реалистичной.

Замечание: Вот структура используемых в упражнении исходных данных

Каталог Название Описание
Maps and GDBs Overpass.3dd

 

Overpass.gdb

Документ ArcGlobe для просмотра в 3D данных по эстакаде

База геоданных, содержащая изображение высокого разрешения, полигональные- и мультипатч объекты

3D Models COLLADA (*.dae)

models

Нетекстурированные и текстурированные модели эстакады в формате COLLADA