Создание моделей растительности

Материал из BestWay wiki
Перейти к: навигация, поиск

Создание моделей растительности.

Рассмотрим создание дерева.

  1. Для начала создаём ствол и ветки.

Наиболее приемлимой формой для ствола и веток является Cone. Лучше всего количество сторон сделать нечётным и кратным 3 – м. (6, 9, 12) – это облегчит задачу текстурирования при совмещении плоскостей освещённости текстуры. Полигоны основания ствола удалять не нужно, так как дерево в игре падает при контактах. Полигоны основания веток следует удалить. Высоту дерева нужно соотнести с настоящими деревьями. Высоту будующей кроны выбрать по назначению дерева, если оно должно служить укрытием для юнита, то нижние ветки расположить почти у самого основания. Кодом предполагается, что у дерева будет только один ствол с волюмом bole, поэтому многоствольные деревья с далеко наклоняемыми или отстоящими друг от друга стволами делать не рекомендуется.

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

Далее назначаем на ствол и ветки основную текстуру без включения alpha_channel. Выбираем для материала Standart – EclipseMtl. (после назначения EclipseMtl стоит зайти в опции дочернего материала EclipseMtl и включить там заново отображение текстуры)



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





Добавляем к дереву ветки.

Для этого создаём квадратные plane (обычно достаточно 3х разного размера), конвертируем в poly или mesh, делим по диагонали ребром, и придаём изогнутую форму.

Pivot ветки располагаем в той точке, которая будет крепится к стволу. Создаём в другой ячейке Material Editir материал с текстурой, на которой включен alpha_channel. (В EclipseMtl – Альфа 1 бит или Альфа 8 бит) и назначаем материал на ветки. После раскладки текстуры копируем полигоны верхней стороны модели на нижнюю.

Располагаем модели веток как требуется.


Если ветки будут располагаться не полого, а подниматься вверх, то для корректного освещения нужно использовать модификатор Edit normals. Для этого выделяем всю готовую крону и назначаем модификатор, нормали развернём таким образом, чтобы они были как можно более равномерно повёрнуты от воображаемого центра наружу.



3. Создаём из ствола и веток группу, даём название, pivot выставляем в 0 по оси Z (там же должен брать начало ствол). Создаём волюмы: bole_vol для ствола (со свойством Volume) и crown_vol для кроны (со свойством Volume). bole_vol должен представлять собой вертикальный цилиндр, а crown_vol – куб который охватывает гущу кроны. Если дерево предполагается укрытием для юнитов, crown_vol можно продлить до основания ствола. Волюмы прилинковываем к группе. Нужно участь, что обстакл дерева генерируется автоматически по волюму ствола, поэтому чем вертикальнее будет bole_vol, тем ближе обстакл к основанию. В свойствах группы (дерева) прописываем Poly (если анимации нет) или CommonMesh (если есть вертексная анимация), Type=game_entity, Model=entity\flora\.... (путь экспорта модели, название модели).

4. Для деревьев в игре создаётся анимация stir, с помощью которой имитируется колыхание веток при наезде техникой и при падении.


Создание анимации растительности.

Общий принцип анимации: 1. При контакте обьектов с деревом, крона дерева совершает колебательные движения вверх-вниз. Крона приходит в движение преимущественно снизу, причём все ветки реагируют в различное время. 2. Ствол совершает небольшое по амплитуте хлыстообразное движение. Так как направление удара в ствол неопределимо, то движение ствола всенаправленно-вращательное.

Общий принцип реализации: 1. Все анимируемые ветви поделить на 2-3 группы (для удобства им можно назначить уникальные цвета сетки - wirecolor), движение которых будет проходить противоположно или поэтапно. Т.е. одна группа вверх, вторая, с этого же кадра, вниз. Ветка колеблется с уменьшением амплитуды во времени. Если моделирование кроны выполненно правильно, то pivot ветки находится в месте её крепления к стволу. Анимация выполняется при включенном Auto Key таким образом

Пример: (coordinate system - View)

0 кадр – поворот по оси Х на 40 0 вниз 5 кадр - поворот по оси Х на 80 0 вверх ( x0 – отсчёт от текущего положения обьекта) 10 кадр - поворот по оси Х на 30 0 вниз 15 кадр - поворот по оси Х на 60 0 вверх 20 кадр - поворот по оси Х на 20 0 вниз 25 кадр - поворот по оси Х на 40 0 вверх 30 кадр - поворот по оси Х на 10 0 вниз 35 кадр - поворот по оси Х на 20 0 вниз 40 кадр = 0 кадр (скопировать ключ №0 в ключ № 40)

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

Для внесения элемента «хаоса» в анимацию, начало движения каждого элемента можно варьировать сдвигом ключей по шкале, изменением углов поворота.

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

Варианты практического выполнения: 1. а.) Каждая ветка может быть анимирована вручную. б.) Всё дерево может быть реализовано единым обьектом (Editable Poly, Editable Mesh), к которому применён модификатор Skin. Управляющими костями могут быть dummy или др. обьекты. При этом выполнима анимация колебания веток и общая анимация ствола сразу. В свойствах группы при экспорте указывается параметр NoSkin. в.) дерево может быть анимируемо с помощью Reactor. Всем обьектам задаются свойства Soft Body или Rigid Body с соответсвующими настройками и вертексным закреплением веток.

2. а.) Группе может быть назначен и анимирован модификатор FFD box . б.) Вариант c модификатором Skin (см. выше)


Общие требования при создании растительности.

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

  1. Текстура для куста рисуется размером не менее 256 х 256 px.
  2. Необходимый минимум текстур для одного вида :
    • базовая текстура
    • #autlate (осенняя, почти без листьев)
    • #bare (голые ветки)
    • #burned (горелые голые ветки)
    • #win (заснеженные ветки)
    • #win3 (слегка заснеженные ветки, производный от #win)

Начиная с базовой текстуры по #burned, тексмоды используются для имитации горения. Если будет создан тексмод #aut (осенний с жёлтыми листиками), то он тоже включится в процесс горения. Внимательно следите за изменением внешнего вида на этих тексмодах, чтобы при горении на уже голом кусте не появились листья.

  1. Правила названия необязательных тексмодов:
    • осенние тексмоды называем #aut, #aut1, #aut2....
    • осенние тексмоды с остатками листьев, тёмные и почти голые называем #autlate, #autlate1, #autlate2...
    • тексмоды с почками и маленькими листиками, цветами называем #spring, #spring1...
    • тексмоды с поломанными ветками называем #broken
    • тексмод #crushed зарезервирован для случая наезда техникой на куст, используется движком.
    • зимние тексмоды называем #win, #win1... Тексмод #win3 зарезервирован для случая осыпания снега с кустика и дерева, используется движком. Зимние тексмоды с #win по #win2 морфируют в #win3, поэтому не делайте кардинальных различий в их внешнем виде. Линейка выше #win3 свободна для использования.
    • Тексмоды для цветущих растений с вариантами цвета можно именовать либо цифрами #1,#2,#3... (если иx немного и это оттенки одного цвета), либо названием цвета #red, #blue – если цвета хорошо различимы.
    • Не назывйте тексмоды например #a1cc4n даже временно – вы сами через неделю внятно не ответите, что там нарисовано, а картограф и вовсе проигнорирует такое название.
  2. При создании тексмода учитывайте что он будет морфировать при горении и наезде по основной линейке тексмодов, не делайте тексмодов кардинально отличных от базовой текстуры.
    • Если нужно создать иной вид растения, создайте новую модель.
  3. Формат текстуры и МИП-уровни

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

Для игры на сегодня текстуры выкладываются в виде dxt1 и dxt3. Внимательно ознакомтесь с документацией по применению этих форматов. Текстуры растений требуют корректировки МИП-уровней, для этого текстуру сохраняем в незапакованный dds и открываем в AdobePhotoshop c МИП-уровнями. На МИП-уровнях при необходимости корректируем базовый слой и особое внимание уделяем альфа-каналу. В альфа-канале редактируем 1, 2 и 3 МИП обязательно, остальные МИПы должны быть более-менее прорисованы. По 3 МИПу отрисовывается тень в игре, прорисовывать его можно не столь же плотным как сама текстура, а более редким, но чётким. Для зимних текмодов может понадобится цветокоррекция базового слоя и вы сделаете МИПы разными по цвету, тону, контрастности. Сохраните в своей рабочей папке файл в незапакованном формате с коректирующими слоями, например в PSD и дайте файлу соответсвующее название. Позаботтесь о сотрудниках, которые будут изменять вашу работу после вас.


Создание текстуры «заливочной» травы для карты.

1. Текстура сохраняется в общую папку resource\texture\common\flora в формате dxt3 без прорисовки МИП-уровней. 2. В файл resource\set\grass.set вносится структура будующего набора, например

{"grass_win" ;имя набора {models ;перечень моделей (выбираются равновероятно)

			{"new_grass0c2" "win1"}

{"new_grass0c2" "win"} } {dencity 1} ;плотность шт./кв.м } 3. Вносится название тексмода в файл resource\texture\summer.etf в раздел grass alpha_channel uncompressed.