CPU3D.comКомпьютерная графикаДвухмерная графика → Создание моделей ландшафтов

Создание моделей ландшафтов

создание программ

В этой статье вам будет представлен простой способ создания ландшафтов для заполнения бекграундов.

Мною были использованы:
Geo Control 2 (для генерации ландшафта),
Maya (для работы с моделью),
Photoshop (для создания текстурных карт),
UDK (как конечная точка нашего путешествия).

Первым делом сгенерируем ландшафт.

Открываем Geo Control 2. Для этого урока я просто возьму готовый пример из поставляемых с программой. (Чтобы понять, как работать в программе, смотрите видео урок)

Нажимаем справа вверху PresetBrowser и выбираем что-нибудь приятное глазу. Нажимаем Generate, и по окончании операции — 3D.

У меня выставлен размер террейна 1024. Этого мне вполне достаточно.

Теперь нужно вытащить из программы всю необходимую нам информацию.

Жмем в главном меню сверху Generation->Terrain Export, и здесь нам нужны Normal Map и Wavefront Object.

Для Wavefront Object я выбрал размер объекта 64. Это число показывает сколько сечений вдоль одной оси будет у террейна.

Далее переходим во вкладку Selector. Здесь (в моем случае) мы видим 4 селекшна (выделения). Что это такое? Это по сути метод, которым и создается сам террейн в программе.

Когда вы начинаете задавать настройки для создания террейна, вы указываете его базовый вид, основанный на кривых, которые имеют какую-то случайную или особую форму. Таким образом, получается гора или каньон, холмы или балки. Далее вы указываете минимальную и максимальную высоту, которую может иметь ваш террейн. Начиная с этого момента, вам нужно применять выделения. Вы указываете, с какой по какую высоту вы хотите применить некий эффект, задаваемый параметрами во вкладках ниже: Height, Slope, Relative и проч. Основываясь на них, программа и создает форму террейна.

Если вы посмотрите во вкладку Render, то в Shader Settings увидите, что шейдеры также применяются и смешиваются при помощи выделений. Можете прихватить отсюда информацию о цвете, возможно, она пригодится вам при создании диффузной текстуры.

Более подробно обо всем этом вы также можете узнать из видео урока, на который я ссылался выше.

Выделяем первое выделение и жмем Create. Окно теперь должно показать вам двумерную карту высот террейна с подсвеченной красным картой выделения. Жмем Export и сохраняем карту. Выбираем следующее выделение, Create и Export, пока не вытащите их все или те, которые вам будет достаточно.
Полученные карты выделений:

Запускаем Майку и импортируем в нее полученный ранее файл obj. Я использую как вертикальную ось Z.
После импорта мне пришлось реверснуть нормали, назначить сглаживание и повернуть модель, чтобы она имела правильное вертикальное положение.

Создадим плоскость размером 1024*1024 и поместим ее одним из крайних вертексов в 0 координат так, чтобы она располагалась под моделью террейна.

Как видите, по размеру они совсем не совпадают. Это потому, что хотя в GeoControl2 у нас и был размер террейна 1024, экспортировали мы его с размером 64. То есть 1024/64=16. Умножаем скейл террейна на 16 и получаем нужные размеры. Если присмотреться, вы заметите, что всё равно размеры немного разные. Как будто с некоторых сторон не хватает рядов полигонов. Я не знаю, почему это так, просто GeoControl2 так экспортирует. Оставьте так, как есть, иначе, если вы будете двигать модель, у вас съедут все карты.

Сейчас у вас должно быть так:

Создадим UV развертку, благо здесь все элементарно.

Выделяем обе модели (террейн и плоскость), идем в Create UVs->Planar Mapping, клацаем по квадратику свойств. Там ставим:
Fit projection to: Bounding box
Project from Z axis
Keep image width/height ratio

Применяем, и получаем великолепную плоскую проекцию, на которую без проблем лягут все необходимые карты. :)

Единственное, надо проверить, чтобы она не была развернута не под тем углом, потому что вдруг вы делали не так, как я. Наложите в ее диффуз имеющуюся нормал мапу и посмотрите все ли правильно.

У меня вроде все ок.

Создадим диффузную карту.

Я использовал все карты выделений и нормал мапу для создания диффуза (с нормала я добавил некоторую информацию о тенях). Как видите, я отошел от оригинала в пользу каких-то своих соображений... :)

Саму нормал мапу пришлось исправить. Я просто создал слой с цветом (128, 128, 255) и положил на нее оверлеем, а также инвертировал зеленый канал.

Итого, как это выглядит во вьюпорте Майки с диффузом и нормалом на ламберте:

Сейчас в модели 7688 треугольников, но их может быть и меньше. Надеюсь, вы умеете использовать Reduce? В режиме Polygons идем в меню Mesh->Reduce в квадратик свойств. Настройки стандартные + ставим галку напротив Keep original (for paint weights) и применяем.

У вас появится 2 меша, с очень разной геометрией. Один оригинальный, второй конечный, зависимый.

Выбираем тот, который оригинальный, не измененный. Идем в меню Mesh->Paint Reduce Weights Tool в квадратик свойств. В редакторе атрибутов вам будут доступны настройки кисти.

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

Вот, что получилось у меня с небольшими доделками уже вручную (1480 вертексов, 2943 треугольника):

Как вы наверно поняли, можно не волноваться, что uv координаты потянутся или испортятся. Вы можете в любой момент снова создать их, просто спроецировав модель вместе с плоскостью-помощником на ось Z, как это было вначале.

Окончательно убеждаемся, что все в порядке и готовимся к экспорту всего этого дела в движок. Выставляем правильно модель в центр координат, сбрасываем трансформации ну и т.д.

Что у нас получилось:
1 статическая модель с 1 уникально разложенным uv каналом.
1 диффузная карта 1024*1024
1 карта нормалей 1024*1024

После импорта ставим канал лайтмапы 0, потому что он все равно у нас разложен уникально, и разрешение 128, потому что меньше на объект таких размеров, мне кажется, будет недостаточно.

Думаю, не нужно рассказывать, как в UDK создать материал или назначить его на модель? К имеющейся красоте вы можете еще добавить детализирующие карты нормалей и whatever you want...



Источник: http://www.gamedev.ru