Сайт о телевидении

Сайт о телевидении

» » Генерация трехмерных ландшафтов. Простой и быстрый алгоритм генерации ландшафта

Генерация трехмерных ландшафтов. Простой и быстрый алгоритм генерации ландшафта

В самом начале развития трехмерной графики возникло несколько направлений, каждое из которых было востребовано в своей сфере. Так, наряду с инструментами для создания сложных трехмерных поверхностей, моделирования персонажей и создания анимации, огромным спросом пользовались программные решения, предназначенные для имитации природного ландшафта. Стабильный интерес к программам для генерирования природных ландшафтов вполне объясним и понятен. С одной стороны, эти программы несложны в освоении, и начинающий 3D-художник может создавать трехмерные виртуальные миры сразу после знакомства с программой. С другой стороны, такие программы как Vue, выпускаемая компанией e-on software - это незаменимый инструмент для разработчиков компьютерных игр, которым регулярно приходится создавать реалистичное окружение.

К сожалению, многие интересные и перспективные проекты трехмерной графики часто оказываются заброшенными или, не выдержав конкуренции со стороны более мощных компаний, и вовсе "сходят с дистанции". Поэтому сегодня уже мало кто помнит такие названия, как Raydream Studio или Amorphium. Замедлил свое развитие и популярный генератор ландшафтов Bryce, несмотря на большой интерес, проявляемый к нему дизайнерами и художниками. Передаваемый из рук в руки, от одной компании к другой, этот редактор за последние несколько лет практически не развивался. Отчасти это можно объяснить слабой конкуренцией на рынке программного обеспечения для ландшафтного дизайна - один из альтернативных редакторов ландшафтов, Terragen, практически не обновляется, а продукт Mojoworld от компании Pandromeda объективно слабоват для того, чтобы его можно было считать серьезным оппонентом. Ограниченный выбор специальных трехмерных редакторов обусловлен спецификой визуализации таких сцен. Моделирование трехмерных пейзажей отличается от обычного создания трехмерных поверхностей и сопряжено с целым рядом трудностей, которые программистам нелегко преодолеть. Например, один из главных принципов создания реалистичного окружения в 3D состоит в том, чтобы показать зрителю высокую детализацию изображения. Причем поверхности демонстрируемых объектов природы должны иметь уникальную, неповторяющуюся структуру, которую трудно воссоздать стандартным способом, с помощью текстуры высокого разрешения. Моделировать каждую впадину на скале или каждую травинку не представляется возможным, поэтому в основе большинства генераторов природных ландшафтов лежит принцип фрактального алгоритма. Именно по фрактальному алгоритму генерируется трехмерный рельеф поверхности, фрактальный алгоритм определяет естественный неповторяющийся узор на поверхности водной глади, с помощью этого алгоритма моделируется случайная облачность и т.д. Несмотря на то, что для финального просчета трехмерного проекта этот метод используют все популярные генераторы ландшафтов - и Bryce, и Terragen, и MojoWorld, и Vue, - последний редактор выглядит наиболее привлекательно для разработчиков компьютерной графики. В последнее время этот пакет активно развивается и продвигается компанией e-on software, и вполне успешно. Мало кто из зрителей может заметить, что завораживающие пейзажи за спинами актеров в кадрах фильмов "Пираты Карибского моря" или "Индиана Джонс: храм хрустального черепа" - всего-навсего трехмерная подделка, созданная с помощью Vue.

Знакомство с линейкой Vue

Под маркой Vue компания e-one software выпускает целую линейку программ, отличающихся между собой по функциональным возможностям. Самая простая программа из этой линейки называется Vue 7 Pioneer ($49,95). Она позиционируется разработчиками как инструмент для любителей и включает в себя только базовый инструментарий для создания ландшафтов и анимации. Однако при желании можно расширить ее возможности за счет подключаемых модулей, которые приобретаются отдельно. Следующая в иерархии Vue - программа Vue 7 Esprit ($199). Ее основное отличие - интеграция с программой для создания анимации персонажей Poser, а также наличие возможностей экспорта 3D-моделей. Программа Vue 7 Pro Studio ($399) ориентирована на профессиональных 3D-художников и включает некоторые интересные модули, которых нет в более дешевых программах - редактор растений Botanica, LightTune для создания эффектов, связанных со светом, и другие. Еще более подвинутая программа Vue 7 Complete ($599) создана специально для небольших студий. Она по возможностям приближена к Vue Infinite, включает еще больше дополнительных модулей, однако лишена тех функций, которые не нужны пользователям, работающим вне крупных компаний. Что же касается профессионального использования продукции e-one software, то для этих целей выпускаются программы Vue 7 Infinite ($895) и Vue 7 xStream ($1495). Последняя включает в себя все возможности Vue 7 Infinite, а также позволяет использовать программу в паре со всеми основными редакторами трехмерной графики - 3ds Max, Cinema4D, Maya, LightWave и Softimage|XSI. Благодаря тесной интеграции, проекты, созданные в Vue, можно визуализировать в этих программах.

Ниже речь пойдет о самой "продвинутой" из линейки программ - Vue 7 xStream.

Интерфейс и начало работы

Несмотря на то, что интерфейс программы выполнен так, чтобы с ним было удобно работать любому, кто уже имеет некоторый опыт работы с 3D-редакторами, все же понадобится некоторое время, чтобы привыкнуть к некоторым его особенностям. Рабочее пространство Vue 7 представлено четырьмя окнами проекции. В активном окне проекции показан вид главной виртуальной камеры, которая включена в сцену уже по умолчанию. Управление видом в окне проекции можно осуществлять при помощи инструментов свитка Main camera. Интересно, что Vue 7 xStream даже поддерживает специальные манипуляторы, среди которых SpaceNavigator, SpaceExplorer и другие устройства, выпускаемые компанией 3Dconnexion. Такие манипуляторы представляют собой альтернативу стандартной мыши и дают возможность пользователю удобно перемещаться в виртуальной среде проекта, над которым идет работа. Вполне сносно сделан инструмент для выполнения операций трансформации с объектом. После выделения трехмерного объекта в окне проекции рядом с ним возникает несколько значков трансформации. При выборе одного из этих значков появляется возможность для масштабирования, вращения и перемещения объекта в сцене. Для управления самими объектами сцены используется World Browser, в окне которого в виде иерархичного списка представлены все компоненты трехмерного проекта, упорядоченные по слоям, типам и названию. Чтобы отредактировать тот или иной элемент сцены, достаточно отыскать его в этом списке и выполнить по нему двойной щелчок.

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

При работе над обычным трехмерным проектом положение трехмерных объектов в окнах проекций дает представление о том, как будет выглядеть конечная сцена. При моделировании ландшафтного дизайна все обстоит несколько иначе. Помимо трехмерных объектов, которые, безусловно, играют не последнюю роль, в сцене используются атрибуты естественного окружения, такие как атмосфера, облачность и т.д. Эти факторы также влияют на конечный результат работы в программе, и поэтому необходимо иметь представление о том, как эти атрибуты сказываются на внешнем виде природного ландшафта. Решение этой задачи в Vue 7 xStream реализовано с помощью интерактивного окна предварительного просмотра свитка Main Camera - в небольшом окне происходит интерактивная визуализация, которая пересчитывается каждый раз при внесении изменений в проект.

Работа с объектами

В любом 3D-редакторе основу для трехмерного моделирования и создания трехмерных сцен составляют простейшие объекты - своего рода строительный материал для 3D-дизайнера. Поскольку цель Vue 7 xStream - создание трехмерной модели, максимально повторяющей естественную среду, примитивы для построения природного ландшафта несколько отличаются от тех простейших форм, которые часто можно встретить в 3D-редакторах. Так, помимо обычных сферы, куба, тора и остальных примитивов, в программе есть еще примитивы типа скала (rock), вода (water), планета (planet), растение (plant), облачность (MetaCloud).

Наличие такого примитива как объемный текст говорит о том, что программа может использоваться и при создании рекламных роликов. Сам по себе текст - плоская фигура, поэтому чтобы придать такому объекту форму, разработчики использовали две настройки выдавливания - обычное выдавливание и выдавливание с фаской. Чтобы в различных проектах текст не выглядел одинаково, можно использовать разную гарнитуру шрифта, а также различный профиль выдавливания.

К сожалению, объемный текст на русском не совсем корректно отображается, впрочем, как нам кажется, это не очень большой недостаток, ведь модель трехмерного текста можно легко создать в любом трехмерном редакторе - и Cinema4D, и 3ds Max, и Maya. Также в Vue можно импортировать файлы практически всех известных 3D-форматов: 3DS, 3DMF, COB, DAE, DEM, DXF, LWO, OBJ, PZ3, PZZ, RAW, SKP, VRM и других. Кроме вышеперечисленных примитивов, в Vue 7 xStream предусмотрено создание двух типов гор - Standard Heightfield Terrain и Procedural Terrain. Эти два объекта отличаются между собой тем, что в первом случае плотность полигональной структуры остается одинаковой вдоль всей площади. Процедурные горы имеют более сложную топологию, причем плотность сетки такого объекта зависит от расстояния до него - чем дальше отстоит от виртуальной камеры процедурная гора, тем меньше ее детализация и, следовательно, меньшее количество полигонов используется. Форму как первого, так и второго объекта можно отредактировать с помощью редактора рельефа земной поверхности. Он представляет собой удобный мини-редактор, в котором при помощи виртуальных кистей обозначаются возвышенности и впадины, а также различного рода неровности. Во многом помогает то, что в этом редакторе есть возможность генерирования случайного рельефа для разного типа гор - для каньона, для имитации дюн, колотой формы айсберга и так далее. Аппарат моделлинга в программах для ландшафтного дизайна обычно довольно скуден или вообще отсутствует как таковой. В принципе, это можно считать слабой стороной программы, так как отсутствие инструментов трехмерного моделирования ограничивает возможности 3D-дизайнера. Рассматривая возможности моделирования в Vue, следует отметить, что этот недостаток сведен к минимуму. Во-первых, его с лихвой компенсирует арсенал инструментов для моделирования трехмерных редакторов, с которыми обеспечивается тесная интеграция генератора ландшафтов. Во-вторых, в программу включены несколько важных средств, позволяющих получить несложные трехмерные формы. Так, например, Vue позволяет использовать трехмерные объекты для булевых операций. Еще один инструмент для имитации сложных органических форм - метабол, примитив, который обладает свойством слияния с аналогичным объектом при расположении их в непосредственной близости друг от друга. Используя этот тип объекта, можно быстро создать трехмерную модель, на создание которой обычным способом ушло бы намного больше времени. Работать с метаболами очень просто - достаточно разместить несколько примитивов в непосредственной близости друг от друга и выбрать на вертикальной панели инструментов команду Create Metablob Object.

Редактор материалов

Создание реалистичных материалов для объектов сцены выполняется с помощью специального редактора материалов, который может работать в двух режимах - простом (basic) и продвинутом (advanced). Эти режимы отличаются только количеством параметров, доступных для описания свойств материала, во втором случае их больше. Внешний вид материала описывается такими параметрами как прозрачность, рельеф, рисунок поверхности, цвет и сила бликов и т.д. Угадать, какие настройки за что отвечают, неподготовленному пользователю очень сложно, особенно если до этого он никогда не работал с 3D-редакторами и не имеет ни малейшего представления о том, как создаются материалы для трехмерных моделей. Но это не означает, что работа с материалами для новичка будет недоступна, ведь в программе все реализовано таким образом, чтобы в ней можно было работать, даже не имея достаточного опыта в 3D.

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

Создание анимации

Несмотря на отсутствие в Vue 7 xStream специальных инструментов для создания трехмерных персонажей (если, конечно, не считать таковым возможность работать с моделями пакета Poser), анимации в программе уделено довольно много внимания. Создание и настройка анимации объектов может быть выполнена с помощью пошагового мастера создания анимации. Этот мастер возникает автоматически при выборе любой команды пункта Animation главного меню программы. От "услуг" этого мастера можно отказаться и продолжить настройку анимации вручную, работая с появившейся временной шкалой Timeline. Однако в некоторых случаях мастер создания анимации позволяет заметно сэкономить время, например, при создании анимации движущегося автомобиля или при наличии в сцене летательного аппарата, скажем, вертолета.

Работа с мастером анимации позволяет создать анимацию с выбранным объектом в несколько этапов: указывается характер движения объекта, выполняется настройка основных параметров движения (задается цикличность, можно придавать вращательный момент анимируемому объекту и т.д.). Далее определяется траектория движения объекта, которая формируется с помощью узловых точек, через которые должен пройти объект во время перемещения, устанавливается продолжительность движения. На последнем этапе мастера создания анимации можно посмотреть движение объекта согласно указанным настройкам. Если мастер анимации не планируется использовать, его назойливое появление на экране можно остановить, убрав флажок Display this Wizard when creating a new object animation (Отображать этот мастер при создании нового объекта анимации). Другой способ анимации - вручную, для чего используются ключи анимации и треки анимации. Находясь в режиме автоматического создания ключей анимации, можно указать исходные параметры анимируемого объекта, переместить ползунок анимации на нужный кадр и изменить исходные параметры на новые. При этом программа автоматически проследит за изменением значения анимируемого параметра (например, координаты объекта) и в промежуточных кадрах сама поставит надлежащее значение, так, что объект станет анимированным. Чтобы включить режим автоматического создания ключей анимации, необходимо выполнить команду Animation > Autokeyframing. Тонкую настройку характера изменения анимируемого параметра между двумя ключевыми значениями можно осуществлять при помощи кривых анимации, которые являются зависимостью значения анимируемого параметра от времени. Этот метод аналогичен настройке кривых анимации в профессиональных редакторах трехмерной графики, например, в таких, как 3ds Max 2009.

Визуализация проекта

Визуализация (рендеринг) - это заключительный этап работы над трехмерной сценой и занимает немало времени, порой гораздо больше, чем отнимает работа над самим проектом. К тому же проекты, сделанные в Vue 7 xStream, достаточно объемны и сложны. Такие трехмерные сцены с природными ландшафтами включают в себя большое количество поверхностей (листья и ветки растительности, горные кряжи и т.п.), на просчет которых уходит дополнительное время. Для того чтобы ускорить просчет сцены Vue 7 xStream, проект можно визуализировать с помощью связки компьютеров, так называемой рендер-фермы, где задание распределяется между несколькими рабочими станциями и просчитывается параллельно. Кроме того, Vue 7 xStream поддерживает работу с 64-битовыми платформами, что позволяет эффективно использовать системные ресурсы. Если же при всем при этом программа работает слишком медленно, можно попробовать использовать опцию моментальной очистки памяти Purge Memory. Необходимость в ее использовании может возникнуть, например, после удаления из сцены большого, сложного объекта. Эта команда позволяет автоматически выгрузить из оперативной памяти неиспользуемые данные, освобождая системные ресурсы для текущих вычислений.

Следует отметить, что визуализация статического изображения и визуализация анимационной сцены в Vue 7 xStream - это разные вычислительные процедуры, которые запускаются разными командами. Так, например, чтобы визуализировать изображение, нужно использовать команду Render > Render. Однако если необходимо просчитать анимационный клип, следует вначале открыть окно с настройками визуализации анимационной сцены (Render > Animation Render Options), указать параметры просчета (разрешение, продолжительность и пр.), указать расположение файла на диске и определить его формат, а только лишь после этого нажать кнопку Render animation в окне настроек.

Параметров визуализации в Vue 7 xStream более чем достаточно - от возможности просчета эффектов каустики и глобальной освещенности, до визуализации с эффектом смазанного движения и глубины резкости. Имеется также возможность послойного рендеринга. Поскольку визуализация сложных сцен занимает много времени, удобно использовать инструмент для пакетной визуализации (batch rendering). Составленный список заданий будет автоматически обработан программой, согласно выбранным настройкам визуализации и очередности. Визуализированное изображение (или анимация) - это готовый продукт трехмерного редактора. И, тем не менее, он часто требует дополнительной коррекции. Использовать постобработку изображения для коррекции цветопередачи для большинства 3D-художников - обычное дело. Коррекция изображения бывает необходима даже в тех случаях, когда освещение сцены настроено должным образом. В Vue 7 xStream включены некоторые инструменты для постобработки. После визуализации изображения на экране появляется окно Post Render Options с настройками цветопередачи и некоторыми инструментами для постобработки просчитанного изображения.

Автоматизация заданий

3D-художникам, которые постоянно работают в сфере дизайна и индустрии компьютерных игр, приходится многократно выполнять одни и те же действия. Например, создавая несколько морских сцен для компьютерной игры, необходимо добавить в сцену объект типа Water и загрузить определенную атмосферу. Большинство повторяемых действий в программе можно упростить, создав макрос - определенную последовательность команд. Для создания пользовательского макроса нужно включить режим записи макроса, после чего выполнить тот порядок действий, который необходимо было бы автоматизировать. По окончанию необходимо остановить запись и сохранить созданный макрос в виде отдельного файла c расширением *.vmc. В дальнейшем для запуска макроса необходимо будет воспроизвести его, после чего все заложенные в него действия выполнятся автоматически. Кнопки для записи/воспроизведения макроса расположены на горизонтальной панели инструментов. Можно сэкономить времени еще больше, если созданному макросу назначить сочетание горячих клавиш.

Интеграция с другими 3D-редакторами

Одно из неоспоримых преимуществ версии Vue 7 xStream перед прочими генераторами ландшафтов - возможность использовать профессиональные редакторы для работы с проектами Vue. Процесс интеграции Vue 7 xStream с такими пакетами, как 3ds Max, Cinema4D, Maya, LightWave и Softimage|XSI, происходит автоматически. На этапе инсталляции приложения мастер установки выполняет анализ системы и определяет, какие из 3D-редакторов, поддерживаемые Vue 7 xStream, уже установлены. После этого мастер установки предложит установить дополнительные модули для этих обнаруженных программ. Что же получит 3D-дизайнер, после установки этих модулей, и в чем заключается интеграция с другими программами? После установки специального плагина для 3ds Max в главном меню программы появляется дополнительный пункт Vue 7 xStream. Этот пункт содержит набор вложенных команд, по сути, повторяющих команды главного меню Vue 7 xStream. Таким образом, установив дополнительный модуль для трехмерного редактора, можно загружать готовые сцены 3D-окружения, использовать всевозможные варианты имитации атмосферы, а также различные типы объектов Vue. Интеграция с пакетом Autodesk Maya 2009 происходит несколько иначе. Как и любой другой подключаемый модуль программы, Vue 7 xStream необходимо включать вручную, в настройках 3D-редактора. Для этого следует выполнить команду Window > Settings/Preferences > Plug-in Manager.

В списке дополнительных модулей программы следует отыскать модуль с названием Vue7xStream.mll - это и есть установленный плагин. Включается этот модуль с помощью флажка Loaded (Загруженный). Если необходимо, чтобы этот модуль подгружался при каждом последующем запуске Autodesk Maya 2009, следует установить флажок напротив опции Auto load (Автоматически загружать). После этого в главном меню Autodesk Maya 2009 появится пункт Vue 7 xStream, который будет неизменно присутствовать в интерфейсе программы, независимо от того, в каком режиме работы используется 3D-редактор. При использовании дополнительного модуля, можно использовать фотореалистичный визуализатор MentalRay, а также программный визуализатор Maya.

В связке с LightWave и Cinema4D программа Vue 7 xStream используется со стандартными модулями визуализации, назначенными в программах по умолчанию. Интересно, что, несмотря на заявленную полную интеграцию с различными пакетами, возможности Vue 7 xStream немного отличаются в разных программах. Например, интерактивное раскрашивание моделей Экосистемами (EcoSystems) или, попросту говоря, размещение объектов растительности по трехмерной поверхности доступно только пользователям 3ds Max и Cinema4D. Что же касается пакетов Softimage XSI, LightWave и Maya, то подобная функция в этих программах пока что только планируется, и соответствующие версии дополнительных модулей находятся на стадии разработки.

Вывод

К сожалению, все возможности программы невозможно вместить в один обзор, однако даже те инструменты, о которых мы успели рассказать, дают возможность получить определенное представление о Vue 7 xStream. Эту программу некорректно было бы сравнивать по возможностям с такими "китами", как Autodesk Maya 2009 или Softimage|XSI, ведь цели и задачи, которые ставили перед собой создатели Vue 7 xStream, совершенно иные. Вместе с тем, нельзя не отметить и то, что постепенно, от версии к версии, продукт компании e-one software набирает обороты и уже по своим возможностям стал выходить за пределы обычного набора инструментов генератора ландшафтов. В программе есть возможность использования внешнего визуализатора, используется сложный алгоритм просчета глобальной освещенности, имеется модуль для просчета динамики в сценах - все это и многое другое явно свидетельствует о намерении разработчиков постепенно наращивать тот самый "недостающий" инструментарий, который пока заменяет интеграция с профессиональными 3D-пакетами от компаний Autodesk, Maxon, Newtek.

Если же сравнивать Vue 7 xStream с другими программами для моделирования природных ландшафтов, то тут лидерство продукта от e-on software очевидно. Vue 7 xStream опережает конкурентов буквально во всем - в наличии средств для создания анимации, в тонкой настройке визуализации, в создании самых разных материалов. Очень важно и наличие удобного и понятного интерфейса, который можно освоить за короткое время. На последнем хотелось бы сделать особый акцент, так как создание трехмерных вселенных - это увлекательнейшее занятие, которое наверняка придется по душе каждому, кто захочет поближе узнать о Vue 7 xStream.

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

В какой ситуации удобен алгоритм

Недавно столкнулся с задачей: написать простую стратегию с трёхмерным ландшафтом. Так как я в данный момент обладаю маленьким опытом программирования на языке С++, мои попытки написать «diamond-square» закончились ошибками на ровном месте (ссылка на статью по «diamond-square» также будет в конце). Требовался простой в написании алгоритм, не дающий реалистичный ландшафт, так что данный метод поможет в первую очередь новичкам.

Алгоритм и результат

Прежде чем описывать сам алгоритм поделюсь его результатами:


Алгоритм заключается в том, что программа в случайных координатах заполняет карту прямоугольниками случайного размера. Карта имеет вид двухмерного массива, представляющего карту высот нашего ландшафта.

Для простоты создадим структуру прямоугольника:

Struct tRect { int x1, y1, x2, y2; }
Переменные x1 и y1 - левая нижняя координата прямоугольника, x2 и y2 - правая верхняя.

Наша карта представлена в виде массива HM;
- mapsizey и mapsizex - переменные, определяющие размер вашей карты;
- genStep - переменная, отвечающая за количество наших прямоугольников;
- zscale - некий коэффициент растяжения карты в высоту. Можно заменить числом.
- recSizex и recSizey - пределы размеров прямоугольника.

Теперь необходимо заполнить нашу карту прямоугольниками:

For (int i=0; i mapsizey) genRect.y2 = mapsizey; if (genRect.x2 > mapsizex) genRect.x2 = mapsizex; for (int i2 = genRect.x1; i2 Рельеф со скриншота был получен значениями:

genStep = 1024
zscale = 512
mapsizex и mapsizey = 128
recSize = 10

Далее вы выводите карту на экран любым доступным вам способом. В моём случае - openGl+glfw.

Преимущества и недостатки алгоритма

Преимущества:

  • Простота и скорость в написании самого алгоритма
  • Скорость исполнения алгоритма
Недостатки:
  • Примитивность
  • При маленьком шаге заполнения карты ландшафт становится «квадратным»
  • Отсутствует возможность разбивать ландшафт на биомы по ходу генерации карты высот
Данный способ, как уже было сказано выше, подходит в первую очередь для новичков и людей, сильно ограниченных временем.

Надеюсь, данная статья была Вам полезной.

Ландшафтный дизайн на компьютере Орлов Андрей Сергеевич

Глава 15 Генерация ландшафтов

Генерация ландшафтов

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

В данной главе познакомимся с программами, которые сами генерируют ландшафты. Таких приложений довольно много, остановимся на Terragen и CyberMotion 3D-Designer. Рассмотрим создание ландшафта и сохраним его в виде изображения, что позволит в дальнейшем использовать созданное изображение в качестве заднего плана при работе в программах ландшафтного дизайна. Начнем знакомство с программами – генераторами ландшафтов с приложения Terragen.

Из книги Прикладное программное обеспечение: системы автоматической обработки текстов автора Мальковский Михаил Георгиевич

1.2. Генерация текста С необходимостью генерации хотя бы простейших фраз разработчики практических систем столкнулись еще на заре их создания. Даже в столь примитивно организованной (в плане дружественности пользовательского интерфейса) среде, как DOS, при попытке

Из книги Документация NetAMS автора Автор неизвестен

OID, их автоматическая генерация и перезагрузки При создании конфигурационного файла, и при добавлении юнитов вручную oid можно не указывать. При этом значение oid генерируется автоматически, так что если набрать show config, значения oid выставятся каким–то случайным образом.

автора Реймонд Эрик Стивен

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

Из книги BPwin и Erwin. CASE-средства для разработки информационных систем автора Маклаков Сергей Владимирович

9.2. Генерация специального кода Операционная система Unix оснащена несколькими мощными генераторами кода специального назначения, предназначенного для таких целей, как создание лексических анализаторов (tokenizers) и синтаксических анализаторов; они рассматриваются в главе

Из книги Инфраструктуры открытых ключей автора Полянская Ольга Юрьевна

15.4.4. Генерация make-файлов Одним из неочевидных преимуществ Unix make по сравнению с базами данных зависимостей, встроенных в многие IDE-среды, является то, что make-файлы представляют собой простые текстовые файлы, т.е. файлы, которые могут создаваться программами.В середине 1980-х

Из книги PGP: Кодирование и шифрование информации с открытым ключом. автора Левин Максим

2.6.1. Генерация словаря ERwin Для управления большими проектами ERwin имеет специальный инструмент - ERwin Dictionary, который обеспечивает коллективную работу над диаграммами и позволяет сохранять и документировать различные версии моделей данных. ERwin Dictionary представляет собой

Из книги Фундаментальные алгоритмы и структуры данных в Delphi автора Бакнелл Джулиан М.

Генерация пар ключей При помощи этого сервиса генерируется пара ключей (открытый ключ/секретный ключ), секретный ключ хранится в файле, защищенном паролем или иными средствами (например, на смарт-карте или при помощи другого аппаратного или программного средства,

Из книги Инфобизнес на полную мощность [Удвоение продаж] автора

Генерация ключа RSA. Для генерации вашей собственной уникальной пары открытый/секретный ключ заданного размера, наберите:pgp -kgPGP покажет вам меню рекомендуемых размеров ключа (простой уровень, коммерческий уровень или военный уровень) и запросит требуемый размер ключа

Из книги Социальные сети [Источники новых клиентов для бизнеса] автора Парабеллум Андрей Алексеевич

Генерация случайных чисел Прежде всего, давайте опишем, что мы понимаем под случайным числом (random number). Без четкого определения термина мы будем неуверенно себя чувствовать при разработке и реализации генератора случайных чисел.Будет ли число 2 случайным числом? Просто

Из книги Разработка ядра Linux автора Лав Роберт

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

Из книги автора

Генерация контента Как часто нужно писать статьи, выкладывать новые материалы? В среднем, оптимальный вариант – один раз в сутки. У вас на сайте и во всех ваших соцсетях должно постоянно что-то появляться. Хотя мы пишем значительно больше.Видео удобнее выкладывать на YouTube,

Из книги автора

Генерация потенциальных клиентов Остановимся более подробно на том, как с помощью соцсетей проходить каждый из указанных этапов и как грамотно их использовать. Ранее уже говорилось о том, что нужно правильно настроить сайт. Тогда генерация новых клиентов будет идти за

Из книги автора

Генерация заплат Все изменения исходного кода ядра Linux распространяются в виде заплат (patch). Заплаты представляют собой результат вывода утилиты GNU diff(1) в формате, который может подаваться на вход программы patch(1). Наиболее просто сгенерировать заплату можно в случае, когда

  • Tutorial

Думаю все заметили, что сейчас стало появляться множество всяких бродилок с выживанием в стиле Minecraft . Сделать такую решился и я. Начало было лёгким - Unity3d имеет огромный функционал для сознания простеньких игр (и не только). Персонаж, игровые объекты, в общем основу сделать быстро. Но какой minecraft без рандомно генерируемого мира? Это стало первой трудной задачей. И думаю не только для меня. Просмотрев весь гугл и потратив кучу времени на эту бесполезную вещь я решил написать эту статью дабы сократить страдания других.

План действия

Для начала хорошо бы было разобраться, что подразумевается под генерацией ландшафта:

Итак, поняв общий план действий, надо приступать к делу.

Частые ошибки

С самого начала я думал, что всё будет очень просто и для рандомной генерации ландшафта можно обойтись обычной функцией Random(). Но это самый неправильный способ. Его результат это вовсе не красивая карта, а расчёска в приближении.

Шум Перлина

Существуют множество способов создания карты высот, но почти все они схожи в одном - использование шумов. Самый первый алгоритм, который мне попался это метод с использованием шума Перлина
Perlin noise (Шум Перлина, также иногда Классический шум Перлина) - математический алгоритм по генерированию процедурной текстуры псевдо-случайным методом. Используется в компьютерной графике для увеличения реализма или графической сложности поверхности геометрических объектов. Также может использоваться для генерации эффектов дыма, тумана и т.д.

Думаю многих испугала приставка псевдо, но от неё легко избавиться. Далее представлен способ реализации шума в Unity3d:

Using UnityEngine; using System.Collections; public class PerlinNoisePlane: MonoBehaviour { public float power = 3.0f; public float scale = 1.0f; private Vector2 startPoint = new Vector2(0f, 0f); void Start () { MakeNoise (); } void MakeNoise() { MeshFilter mf = GetComponent(); // Ищем mesh Vector3 vertices = mf.mesh.vertices; // Получаем его вершины for (int i = 0; i < vertices.Length; i++) { float x = startPoint.x + vertices[i].x * scale; // X координата вершины float z = startPoint.y + vertices[i].z * scale; // Z координата вершины vertices[i].y = (Mathf.PerlinNoise (x, z) - 0.5f) * power; // Задаём высоту для точки с вышеуказанными координатами } mf.mesh.vertices = vertices; // Присваиваем вершины mf.mesh.RecalculateBounds(); // Обновляем вершины mf.mesh.RecalculateNormals(); // Обновляем нормали } }
Я бы не сказал, что данный способ даёт ошеломляюще реалистичные результаты, но он довольно неплох для создания пустынь или равнин.

Алгоритм diamond-square

После долгих часов скитаний по интернету наткнулся на этот алгоритм, и он оправдал все мои ожидания. Он даёт прекрасные результаты. Для расчитывания вершин есть очень простая формула.
Представим себе плоскость, её 4 вершины и точку по центру. Её высота будет равна сумме высот 4 вершин, делённая на их кол-во и некого случайного числа с коэффициентом. Вот код для unity3d (халява копи-пастерам):

Using UnityEngine; using System.Collections; public class TerrainGenerator: MonoBehaviour { public float R; // Коэффициент скалистости public int GRAIN=8; // Коэффициент зернистости public bool FLAT = false; // Делать ли равнины public Material material; private int width=2048; private int height=2048; private float WH; private Color32 cols; private Texture2D texture; void Start () { int resolution = width; WH = (float)width+height; // Задаём карту высот Terrain terrain = FindObjectOfType (); float[,] heights = new float; // Создаём карту высот texture = new Texture2D(width, height); cols = new Color32; drawPlasma(width, height); texture.SetPixels32(cols); texture.Apply(); // Используем шейдер (смотри пункт 3 во 2 части) material.SetTexture ("_HeightTex", texture); // Задаём высоту вершинам по карте высот for (int i=0; i 1.0f) { middle = 1.0f; } } divide(x, y, newWidth, newHeight, c1, edge1, middle, edge4); divide(x + newWidth, y, newWidth, newHeight, edge1, c2, edge2, middle); divide(x + newWidth, y + newHeight, newWidth, newHeight, middle, edge2, c3, edge3); divide(x, y + newHeight, newWidth, newHeight, edge4, middle, edge3, c4); } } }

18 июня 2014 в 16:15

Генерация ландшафтов в Unity3d

  • Разработка игр ,
  • Unity
  • Tutorial

Думаю все заметили, что сейчас стало появляться множество всяких бродилок с выживанием в стиле Minecraft . Сделать такую решился и я. Начало было лёгким - Unity3d имеет огромный функционал для сознания простеньких игр (и не только). Персонаж, игровые объекты, в общем основу сделать быстро. Но какой minecraft без рандомно генерируемого мира? Это стало первой трудной задачей. И думаю не только для меня. Просмотрев весь гугл и потратив кучу времени на эту бесполезную вещь я решил написать эту статью дабы сократить страдания других.

План действия

Для начала хорошо бы было разобраться, что подразумевается под генерацией ландшафта:

Итак, поняв общий план действий, надо приступать к делу.

Частые ошибки

С самого начала я думал, что всё будет очень просто и для рандомной генерации ландшафта можно обойтись обычной функцией Random(). Но это самый неправильный способ. Его результат это вовсе не красивая карта, а расчёска в приближении.

Шум Перлина

Существуют множество способов создания карты высот, но почти все они схожи в одном - использование шумов. Самый первый алгоритм, который мне попался это метод с использованием шума Перлина
Perlin noise (Шум Перлина, также иногда Классический шум Перлина) - математический алгоритм по генерированию процедурной текстуры псевдо-случайным методом. Используется в компьютерной графике для увеличения реализма или графической сложности поверхности геометрических объектов. Также может использоваться для генерации эффектов дыма, тумана и т.д.

Думаю многих испугала приставка псевдо, но от неё легко избавиться. Далее представлен способ реализации шума в Unity3d:

Using UnityEngine; using System.Collections; public class PerlinNoisePlane: MonoBehaviour { public float power = 3.0f; public float scale = 1.0f; private Vector2 startPoint = new Vector2(0f, 0f); void Start () { MakeNoise (); } void MakeNoise() { MeshFilter mf = GetComponent(); // Ищем mesh Vector3 vertices = mf.mesh.vertices; // Получаем его вершины for (int i = 0; i < vertices.Length; i++) { float x = startPoint.x + vertices[i].x * scale; // X координата вершины float z = startPoint.y + vertices[i].z * scale; // Z координата вершины vertices[i].y = (Mathf.PerlinNoise (x, z) - 0.5f) * power; // Задаём высоту для точки с вышеуказанными координатами } mf.mesh.vertices = vertices; // Присваиваем вершины mf.mesh.RecalculateBounds(); // Обновляем вершины mf.mesh.RecalculateNormals(); // Обновляем нормали } }
Я бы не сказал, что данный способ даёт ошеломляюще реалистичные результаты, но он довольно неплох для создания пустынь или равнин.

Алгоритм diamond-square

После долгих часов скитаний по интернету наткнулся на этот алгоритм, и он оправдал все мои ожидания. Он даёт прекрасные результаты. Для расчитывания вершин есть очень простая формула.
Представим себе плоскость, её 4 вершины и точку по центру. Её высота будет равна сумме высот 4 вершин, делённая на их кол-во и некого случайного числа с коэффициентом. Вот код для unity3d (халява копи-пастерам):

Using UnityEngine; using System.Collections; public class TerrainGenerator: MonoBehaviour { public float R; // Коэффициент скалистости public int GRAIN=8; // Коэффициент зернистости public bool FLAT = false; // Делать ли равнины public Material material; private int width=2048; private int height=2048; private float WH; private Color32 cols; private Texture2D texture; void Start () { int resolution = width; WH = (float)width+height; // Задаём карту высот Terrain terrain = FindObjectOfType (); float[,] heights = new float; // Создаём карту высот texture = new Texture2D(width, height); cols = new Color32; drawPlasma(width, height); texture.SetPixels32(cols); texture.Apply(); // Используем шейдер (смотри пункт 3 во 2 части) material.SetTexture ("_HeightTex", texture); // Задаём высоту вершинам по карте высот for (int i=0; i 1.0f) { middle = 1.0f; } } divide(x, y, newWidth, newHeight, c1, edge1, middle, edge4); divide(x + newWidth, y, newWidth, newHeight, edge1, c2, edge2, middle); divide(x + newWidth, y + newHeight, newWidth, newHeight, middle, edge2, c3, edge3); divide(x, y + newHeight, newWidth, newHeight, edge4, middle, edge3, c4); } } }