Задайте вопрос
450135575 • Техподдержка
337652493 • Консультации
digitals sales • Заказ и доставка
digitals.help • Техподдержка
Aнонсы
01.12.2016
Работа с открытыми реестрами и поиск земельных участков по кадастровому номеру
12.03.2016
Шаблон для містобудування (ДСТУ Б Б.1.1-17:2013)
30.07.2015
Учебник по Digitals
09.07.2014
Модуль проверки кадастровых обменных XML файлов
24.01.2013
Просмотр публичной кадастровой карты Украины
Полный список изменений...
Мнения пользователей
Особенно мне нравится в проге простота интерфейса, но плюс очень большие возможности. Меня до сих пор поражают небольшие размеры самой программы и её возможности.
Мазур Иван Викторович,
ЗКБ г. Жмеринка
Как построить свой первый виртуальный город
Ольга Григорива, grigoriva.olga@gmail.com, ICQ: 368-490-045, skype: grigoriva.olga
Практическое руководство наглядно, в примерах, описывает процессы, знание которых необходимо для создания трехмерных моделей городов в Digitals. Рассмотрены этапы подготовки модели рельефа, оцифровки крыш зданий по стереоснимкам, текстурирование моделей и экспорт готовой трехмерной сцены в формат Google Earth KMZ.
Трехмерная модель местности состоит из двух неотъемлемых компонентов: модели рельефа и трехмерных объектов, расположенных на ней. Процессы создания этих компонентов можно считать независимыми, однако в результате они дают готовую геометрическую (а если повезет – то и топологическую) модель.

Рассмотрим моделирование рельефа и трехмерных объектов раздельно.

Моделирование рельефа
Для отображения рельефа используют две модели представления данных: ЦМР и ТИН.

ЦМР (Цифровую Модель Рельефа) можно отнести к растровому отображению, так как она представляет собой регулярную сеть равномерно распространенных узлов со значением отметки Z. Разрешением такой сетки является ширина ячейки, определяющая точность представления – шаг сетки. ЦМР является наиболее часто используемой моделью представления рельефа, так как ее хранение и обработка значительно облегчена по сравнению с ТИН-представлением. Однако ЦМР имеет и больше недостатков. К примеру, ЦМР не способна достаточно хорошо передать гребни, вершины, перегибы и другие характерные элементы рельефа. Поэтому ЦМР уместно использовать для мелкомасштабного картографирования, где не требуется точное изображение пространственных объектов поверхности.

ТИН (Триангуляционная нерегулярная сеть) представляет поверхность в виде совокупности смежных, не перекрывающихся треугольных граней. Благодаря своей нерегулярности она является более гибкой моделью представления рельефа, так как на участках резких изменений рельефа можно использовать переменную плотность точек. В результате получаем более точную модель, которая сохраняет местоположение и форму пространственных объектов. Однако обработка ТИН является более проблематичной, чем ЦМР.

Для трехмерного моделирования Digitals использует ЦМР. Это объясняется тем, что на данном этапе моделирования предусмотрено представление наглядной картины с высоты птичьего полета, а не детализация модели.

Если у Вас уже имеются какие-либо пространственные данные, описывающие рельеф, их можно использовать для построения ЦМР (ТИН). Для этого их необходимо выделить и выбрать пункт главного меню ЦМР > Создать ЦМР (ЦМР > Создать TIN соответственно). Однако если таких данных нет, не спешите беспорядочно собирать дороги или набивать пикеты.

Для создания ЦМР Вам понадобится контур, описывающий модель. Выделите его и вызовите команду ЦМР > Создать ЦМР. Не забудьте указать разумный шаг сетки, ориентируясь на Ваши потребности и форму рельефа. Ведь указав слишком маленький шаг Вы только загрузите свою модель не увеличив особо при этом ее точность.

После того, как ЦМР создана, необходимо каждый ее узел «посадить на землю». Для этого нужно выделить ЦМР и в режиме сбора выбрать из контекстного меню пункт Измерение ЦМР.

Если в Вашей сетки оказались лишние узлы, их можно будет обрезать с помощью команды главного меню Сервис > Обрезать по полигону.


Создание ЦМР вокруг контура

Создание ЦМР по контуру
Моделирование трехмерных объектов
Моделирование трехмерных объектов в основном заключается в построении зданий. Для моделирования зданий в Digitals разработан ряд шаблонов сбора 3D зданий, которые описывают наиболее распространенные типы крыш. А так же выделен специальный тип слоя именуемый «3D Модель». Особенностью этого слоя является то, что в нем объекты, собранные 3D шаблонами (все они описаны ниже) хранятся не как последовательность вершин, составляющих объект, а как последовательность граней.

Так, при сборе объекта одним и тем же шаблоном Simple Flat Roof в разных слоях с типами «Полигон/полилиния» и «3D Модель» получим разное описание объекта:


При сборе в слое типа «Полигон/полилиния»

При сборе в слое типа «3D Модель»

Разницу в описании объектов можно увидеть и визуально:

Поэтому, нужно всегда помнить два основных требования:

1. Для сбора использовать только 3D шаблоны.
2. Все объекты должны находиться в слое с типом «3D Модель»

Однако, все безнадежно, если Вы вдруг собрали не трехмерный объект. Спасти Вас может команда Сервис > Преобразовать > Полигон в 3D-Модель, вызываемая из главного меню. Но объект все равно должен находиться в 3D слое.

Сбор здания начинается с формирования геометрии крыши и заканчивается регистрацией высоты здания. Для уменьшения трудоемкости в Digitals была реализована технология сбора зданий только по крышам с последующим автоматическим построением стен от основания крыши до ЦМР. Для того чтобы отключить регистрацию высоты здания, в настройках нужно отключить константу 3DBottom (Сервис > Настройки > Главная > Константы), то есть присвоить ей значение «0». Чуть ниже от нее находится константа 3DRectangle, которая отвечает за ортогонализацию крыши при сборе.

В качестве критерия создания слоев лучше выбирать типы крыш. То есть крыши, собранные как Simple Flat Roof и Multi Flat Roof должны находиться в разных слоях. При этом очень важно следить за идентификационным номером слоя.

ID Проецирование Предназначение
1 – 30 Проецирование на ЦМР Основные крыши
31 – 50 Проецирование на ближайшие к ним основные крыши Надстройки
51 – более Не проецируются «Парящие» крыши
Шаблоны сбора 3D Зданий
Плоская Крыша (Flat roof)
Шаблон предназначен для сбора прямоугольных крыш.

Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-4 края крыши.
- Установите высоту (точка 5).
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши. Четвертая точка будет построена автоматически.

Плоская Крыша с количеством углов более/менее четырех (Flat Roof with more or less than four corners)
Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-10 края крыши.
- Установите высоту (точка 5). Для завершения объекта нажмите F5.
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-10 края крыши.
- Для завершения объекта нажмите F5.

Односкатная крыша (Lean-to roof)
Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-4 края крыши.
- Установите высоту (точка 5).
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши.
- Для завершения объекта нажмите F5. Четвертая точка будет построена автоматически.

Двускатная крыша (Gable Roof)
В шаблоне собирается только крыша.

Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-4 края крыши.
- Для завершения объекта нажмите F5.
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши. Четвертая точка и гребень крыши будут построены автоматически.
- После построения объекта необходимо откорректировать высоту гребня крыши.

Вальмовая крыша (Hip Roof)

Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-3 края крыши. И точку 4 на гребне. Противоположная точка гребня будет построена автоматически.
- Установите высоту (точка 5).
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши. И точку 4 на гребне. Противоположная точка гребня будет построена автоматически.
- Для завершения объекта нажмите F5 или кликните левой кнопкой мыши.

Двухскатная вальмовая крыша (Hipped Gable Roof)
Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-3 края крыши.
- Зарегистрируйте вальмовые точки 4, 5 и точку 6 на гребне. Противоположная сторона будет построена автоматически.
- Установите высоту (точка 7).
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши.
- Зарегистрируйте вальмовые точки 4, 5 и точку 6 на гребне. Противоположная сторона будет построена автоматически.
Шатровая крыша (Tent Roof)
Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-3 края крыши. Четвертая точка будет построена автоматически.
- Зарегистрируйте точку 4 на гребне.
- Установите высоту (точка 5).
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши. Четвертая точка будет построена автоматически.
- Зарегистрируйте точку 4 на гребне.
- Для завершения объекта нажмите F5.
Мансардная крыша (Mansard Roof)
Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-3 края крыши.
- Зарегистрируйте вальмовые точки 4, 5 и точку 6 на гребне. Противоположная сторона будет построена автоматически.
- Установите высоту (точка 7).
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши.
- Зарегистрируйте вальмовые точки 4, 5 и точку 6 на гребне. Противоположная сторона будет построена автоматически.
Сочетание Двускатной и Вальмовой Крыши (Combination of Gable and Hip Roof)
Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-3 края крыши. И точку 4 на гребне. Противоположная точка гребня будет построена автоматически.
- Установите высоту (точка 5).
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши. И точку 4 на гребне. Противоположная точка гребня будет построена автоматически.
- Для завершения объекта нажмите F5 или кликните левой кнопкой мыши.
Сочетание Двускатной и Двускатной Вальмовой Крыши (Combination of Gable and Hipped Gable Roof)
Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-3 края крыши начиная со стороны, параллельной гребню.
- Зарегистрируйте вальмовые точки 4 и 5 и точку 6 на гребне, противоположная точка будет построена автоматически.
- Установите высоту (7).
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши начиная со стороны, параллельной гребню.
- Зарегистрируйте вальмовые точки 4 и 5 и точку 6 на гребне, противоположная точка будет построена автоматически.
Усеченная Вальмовая Крыша (Cut Hipped Roof)
Порядок сбора при 3DBottom=1:

- Зарегистрируйте точки 1-3 края крыши начиная со стороны, параллельной гребню.
- Зарегистрируйте вальмовые точки 4 и 5, противоположные точки будут построены автоматически.
- Установите высоту (6).
Порядок сбора при 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши начиная со стороны, параллельной гребню.
- Зарегистрируйте вальмовые точки 4 и 5, противоположные точки будут построены автоматически.
Башня (Tower)
При сборе Башни необходимо в настройках отключить константу 3DRectangle. Собирается только крыша.

Порядок сбора при 3DBottom=1, 3DBottom=0:

- Зарегистрируйте точки 1-3 края крыши.
Башня (Tower Roof)
Собирается только крыша.

Порядок сбора при 3DBottom=1, 3DBottom=0:


- Зарегистрируйте точки 1-3 края крыши.
- Зарегистрируйте вершину шатра (4). Еще раз кликните левой кнопкой мыши (5).

Будьте внимательны! Иногда шаблоны Tower и Tower Roof могут дать непредсказуемый результат!!! Поэтому экспериментируйте.

Шатровая Крыша (Polytent Roof)
Собирается только крыша.

Порядок сбора при 3DBottom=1, 3DBottom=0:


- Зарегистрируйте точки 1-8 края крыши.
- Зарегистрируйте вершину шатра (9). Нажмите F5.
Так же существуют следующие шаблоны:
Цилиндрическая крыша (Barrel Roof),

Купол (Dome Roof)

Стена (Wall)

Однако они, к сожалению, на сегодняшний день находятся в затяжной доработке.
Построение стен
Построение стен зданий выполняется путем их автоматического проецирования на цифровую модель рельефа. Функция работает следующим образом: для каждой вершины грани объекта определяется соответственная точка на ЦМР. Плановые координаты у нее остаются прежними, а координата Z получается интерполированием по ЦМР.

Формирование стен зданий

Для окончательного построения геометрической модели для зданий, созданных шаблоном Multi Flat Roof нужно сформировать горизонтальные грани крыш, так как они изначально отсутствуют. Для этого используем функцию @Map.CoverMultiFlatRoofs.


Результат действия функции @Map.CoverMultiFlatRoofs
Текстурирование модели
Текстурирование предназначено для придания объекту и модели в целом более реалистичного вида. Для получения текстур (растровых изображений грани) Digitals использует наклонные снимки. Сам принцип текстурирования заключается в сопоставлении географических координат объекта с текстурными координатами, т.е. пикселами растра.

Текстурные координаты

Текстурирование грани

Текстурирование модели следует разделить на два этапа: текстурирование 3D объектов и текстурирование ЦМР.

Текстурирование 3D объектов
Для текстурирования 3D-объектов в Digitals разработана функция автоматической генерации текстур – @Window.GenerateTextures. Функция обрабатывает выделенные объекты. Если выделенных объектов нет, обрабатываются все трехмерные объекты карты (объекты из слоев типа 3D модель).

Текстурирование выполняется для каждой грани объекта. Для определения соответствующей грани текстуры восстанавливается пучок лучей от грани к сенсору камеры. Восстановление лучей выполняется по фотограмметрическим формулам для получения координат точек проецируемой грани. Для определения, является ли грань видимой, для нее строится вектор нормали.

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


Восстановление пучка лучей

Функция работает с одним каталогом (включая подкаталоги), поэтому все снимки, используемые для текстурирования, должны находиться в одной папке. Выбранная текстура вырезается со снимка с окрестностью, не превышающей 50 пикселей, и записывается в отдельный файл. Все файлы текстур заносятся в отдельный каталог «FileName (Textures)» или файл с текстурами DTX (Digitals Textures), находящийся в папке с картой. При этом для слоя типа «3D модель» создается табличный параметр «Textures», в котором хранится имя текстуры и текстурные координаты, соответствующие вершинам грани (<Имя файла текстуры>, X1, Y1, X2, Y2, X3, Y3, X4, Y4).

Имя файла текстуры формируется следующим образом:
<Имя исходного снимка текстуры><~><№ объекта><-><№ грани объекта><.bmp>/<.jpg>

№ объекта – уникальный номер объекта, который является номером объекта в карте.

Отсчет текстурных координат начинается с верхнего левого угла, а для того, чтобы операции выполнялись над целыми числами, координаты умножаются на 10. Строки с именем текстуры заносятся в том же порядке, в котором перечислены грани в списке точек объектов.


Экранные координаты

При отображении текстурированной 3D-модели на каждую грань объекта слоя «3D модель» выполняется наложение текстуры по данным табличного параметра «Textures». Функция @Window.GenerateTextures имеет следующие параметры:
- Bond – эта константа присутствует всегда.
- Pak – при указании данного параметра текстуры будут упаковываться в один файл с именем карты и расширением DTX(Digitals TeXtures), если не указан, то все текстуры будут записаны в каталог с именем карты плюс (Textures).
- Jpg – текстуры создаются в формате JPG а не BMP.

Текстурирование ЦМР
Для текстурирования ЦМР лучше всего использовать ортофотоплан, так как он максимально приближен к плановому отображению объекта моделирования. Однако в качестве текстуры может быть использован и наклонный снимок.

Для текстурирования программе необходимо указать файл, который будет использоваться в качестве текстуры для ЦМР.

Проецирование текстуры на ЦМР выполняется путем проецирования каждого тайла снимка. Для этого для углов каждого тайла TIF Tiled (блочный ТИФ – 256х256 пикселей) находится его геодезическая координата.

Для того чтобы вычислить геодезические координаты углов тайлов, необходимо решить следующую задачу – по точке на снимке определить геодезическую координату. Так как по одному снимку вычислить высоту нельзя, используется итерационный алгоритм. Выполняется пересчет сначала в одну сторону (из снимка в землю с начальной высотой), а потом обратный пересчет с той же высотой. Если изменения большие, то изменяется высота и повторяется итерация, пока прямой и обратный пересчет не дадут одинаковые результаты. При этом ЦМР используется для получения значений начальной высоты в точке X, Y методом интерполяции. Так один объект ЦМР разбивается на N текстурированных объектов из 4-х точек, где N – количество тайлов в растре. Координаты углов тайлов вычисляются путем откладывания по 256 пикселей.


Проецирование тайла на ЦМР

Представление готовой модели

Для того чтобы просмотреть построенную Вами модель необходимо перейти к трехмерному виду (Вид > Трехмерный). Перед вами появится геометрическая модель, для которой теперь нужно включить отображение текстур. Это делается из контекстного меню, пункт Загрузить текстуру для ЦМР и Загрузить все имеющиеся текстуры. Если текстуры не появились, включите Вид > Полный. Для улучшения наглядности нужно так же выполнить команду Вид > Скрыть внутренние поверхности.


Для навигации по модели существуют следующие функции:
- Свободная камера
- Задать позицию камеры
- Задать точку наблюдения
- Задать скорость камеры
- Задать минимальную высоту камеры

Алгоритм построения 3D модели
1. Построение ЦМР.
2. Создание ортофотоплана.
3. Сбор 3D зданий по шаблонам для 3D моделирования.
4. Построение стен с помощью команды ЦМР > Переприсвоить высоты (только при сборе с 3DBottom=0).
5. Формирование крыш @Map.CoverMultiFlatRoofs.
6. Устранение мерцания накладывающихся граней @Map.RemoveFaceBlinking.
7. Генерация текстур @Window.GenerateTextures

Экспорт/импорт модели

Начиная с версии Digitals от 07.08.09 добавлена поддержка формата KMZ – обменного формата представления трехмерных геопространственных данных в Google Earth.

И напоследок…

Полученную модель в Digitals можно не только посмотреть в трехмерном виде! Но еще и в 3D стерео (Вид > Трехмерный > Анаглифическое стерео > Включить).

Вы себе это трудно представляете? Тогда срочно запасайтесь анаглифами!

Созданная в Digitals фотореалистичная модель города



Описание на форуме
http://www.geosystema.net/forum/viewtopic.php?p=2603#2603
http://www.geosystema.net/forum/viewtopic.php?p=4827#4827

Обсудить статью.

© 2008-2017 OOO «Аналитика»