Бесплатная реклама

Автор: Андрей Прахов

Опубликовано: 04.01.2011

Изменено: 04.01.2011

Постоянная ссылка

Комментарии [11]

Секреты создания ландшафтов для BGE


Рассматриваются способы создания ландшафта и текстурная заливка для "Blender Game Engine", а также раскрываются некоторые секреты реалистичности при минимуме затрат.


Blender Game Engine

Большинство современных игр щеголяют красивой графической картинкой. Немаловажное значение имеют красочные элементы пейзажа и ландшафта. В этом уроке рассматриваются способы создания ландшафта и текстурная заливка для Blender Game Engine (BGE), а также раскрываются некоторые секреты реалистичности при минимуме затрат.


Часто начинающие разработчики мало внимания уделяют разработке и прорисовки базисной части игры, а именно ландшафта. Между тем, ландшафт – это самая большая территория в игре, которая сразу бросается в глаза. Попадаются игры отличающиеся качественными моделями, отличным геймплеем, но крайне унылой в визуальном отношении основой. Возьмем, к примеру, простую полянку с цветами. Кажется, что достаточно создать модель с некоторыми неровностями, залить текстурой "травы" и понаставить тут и там модельки растений. В итоге получается одноцветная картинка, которая буквально через несколько минут намозолит глаза. Особенно это актуально, если игроку подолгу приходится находиться в одной и той же области (RTS, квест, пошаговая стратегия).

Чтобы избежать подобного рода ошибок достаточно найти свободное время и посмотреть на естественный прототип. Уже при беглом взгляде на живую полянку станет видно, что трава неоднородная по цвету, имеются прогалины голой земли, возможно, какие-нибудь тропинки. Только вот как воплотить подобное в игре, особенно не растрачивая свое время и ресурсы компьютера?

Строим основу

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

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

Создайте новый проект, удалите имеющийся куб и откройте в удобном для вас месте окно Scripts Window. Запустите скрипт из меню Scripts -> Wizards -> Landscape Generator. В закладке Main расположены основные функции начальной настройки модели. Имеется несколько вариантов: использовать существующий примитив (Assign Selected), создать новый (Add New Grid) или же загрузить уже ранее сохраненный.

Мы будем работать с новой решеткой. Нажмите Add New Grid. Появившееся окно позволяет выбрать разрешение и место расположения сетки. По умолчанию значение размера установлено в 256. Для использования в игре это просто избыточно. Поэтому установите значение в 128. Чтобы ландшафт появился на месте 3D-курсора нажмите кнопку At Cursor.

Итак, на месте курсора должна появится плоскость с весьма большим количеством полигонов. Что же дальше? Все просто... Закладка Noise содержит большое количество предустановленных алгоритмов шумов. Достаточно выбрать необходимый, установить желаемые параметры, нажать кнопки Randomise для генерации и Update для обновления экрана. Вот и всё, основа для ландшафта создана.

Blender Game Engine
Рис. 1. Не правда ли, эта модель идеально подходит для реализации острова?

При необходимости можно доработать модельку с помощью инструментов скульптурного моделирования.

Сделаем мир ярче

Качественная модель – это пол дела. Все будет зависеть от умелой раскраски. Как уже говорилось, использование однотонного материала – признак дурного вкуса. Необходимо также учитывать, что при приближении к поверхности будет видна пикселизация текстуры. Соответственно нужна еще детальная текстура.

Договоримся сразу, что игра будет работать в режиме рендера шейдеров. Поэтому выберите пункт Blender GLSL Material в меню Game главного окна программы. Для визуального просмотра результата нелишне будет включить режим Textured в меню Draw Type.

Итак, создайте новый материал. Для создания качественной картинки понадобится минимум три текстуры: основная (предположим камень), вторичная (трава) и детальная в виде карты нормалей (Normal Map).

Blender Game Engine
Рис. 2. Основная (камень), вторичная (трава) и карта нормалей (Normal Map).

Прежде чем начать настройку материала следует установить координаты UV. Выделите плоскость, нажмите <TAB> для перехода в режим редактирования и клавишу <U> для вызова меню UV. В появившемся меню выберите пункт Unwrap. Запаситесь терпением, так как процесс генерации координат может несколько затянуться.

Загрузите основную текстуру в первый слот материала (<F6>) и в закладке Map input (<F5>) включите кнопку UV (подобное действие необходимо и для остальных текстур). Также нужно будет настроить бликовые шейдеры. Настройки по умолчанию дают слишком яркие переходы. Перейдите на закладку Shaders панели материалов (<F5>) и немного поиграйтесь с параметрами Spec и Hard.

Blender Game Engine
Рис. 3. Однотонный унылый пейзаж с размытой текстурой.

Гладкая, размытая текстура – картинка просто отвратительная! Улучшить положение можно, если наложить на неё карту детализации. В её роли будет выступать мелкозернистая Normal Map.

Добавьте новый текстурный слой и загрузите в него карту нормалей. Не забудьте в панели Map Image включить кнопку Normal Map. Перейдите на закладку Map To панели Material и выполните следующие действия:
  • отключить кнопку Col;
  • активировать кнопку Nor;
  • бегунком Nor отрегулировать желательную резкость.

Blender Game Engine
Рис. 4. Normal map придаст текстуре необходимую четкость.

Взмахи кистью

Картинка стала выглядеть гораздо лучше. Теперь давайте займемся рисованием на текстуре. Думаете сложно?

Задача заключается в создании островков зелени на каменистой поверхности. Нам понадобятся две текстуры – маска, сквозь которую будет просвечиваться основной фон и, собственно, текстура зелени.

Откройте в любом удобном для вас окошке UV/Image Editor. Выделите объект и нажмите клавишу <Tab>. Теперь в окне Image Editor необходимо создать новую текстуру в меню Image -> New. В появившемся окошке можно все оставить по умолчанию, за исключением начального цвета. Замените предлагаемый черный на белый. Перейдите обратно в панель материалов.

Сейчас займемся настройкой наложения. Откройте закладку Map To и выполните следующие действия:
  • отключить кнопку Col;
  • включить кнопки Stenci, Neg, NoRGB.

Добавьте новый текстурный слот и загрузите в него текстуру зелени. Снова перейдите в окно UV/Image Editor и откройте созданную белую текстуру. Для рисования на текстуре необходимо включить специальный режим. Для этого активируйте пункт Texture Painting в меню Image. Нажмите клавишу <C> для вызова плавающей панели Image Paint. Именно в ней можно настроить размер и цвет кисти. Установите цвет кисти в черный.

Всё, можете смело рисовать непосредственно по текстуре в окне редактора, а на модели будут проявляться все ваши художества.

Blender Game Engine
Рис. 5. С такими доработками ландшафт выглядит гораздо эффектнее.

 


 

Статья была опубликована в электронном журнале "Linux Games Technologies". Номер 1 (июль 2009).