Сообщество Империал: Редактирование травы в vegetation.db - Сообщество Империал

  • Поиск
  • Законы
  • Сообщество
  • Репутация
  • Экономика
  • Больше

Редактирование травы в vegetation.db
Полное редактирование травы, её плотности, размеров и прочего

KAST ответил:

    6 800

    439

    190

    1 748

    8 972
  • Статус:Варгеймщик

Дата: 11 Июль 2014, 11:46

Трава: общие сведения

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

Настройки для секций травы можно просмотреть путём конвертации файла vegetation.db в текст, используя IWTE вкладку "Veg/GeogDB", команду "Write VegDB text". (файл vegetation.db лежит в data/vegetation/)

Найдите в тексте фразу "settings for climate" – здесь начинается секция травы.
• climate 0 mediterranean - Средиземноморский
• climate 1 sandy_desert – песчаная пустыня
• climate 2 rocky_desert – скалистая
• climate 3 unused1 – неиспользуемый1
• climate 4 steppe - степь
• climate 5 temperate_deciduous_forest – умеренный лиственный лес
• climate 6 temperate_coniferous_forest – умеренный хвойный лес
• climate 7 unused2 – неиспользуемый2
• climate 8 highland - горный
• climate 9 alpine – снежные шапки скал
• climate 10 tropical - тропический
• climate 11 semi_arid - полузасушливый

Для каждой секции климата есть 30 (от 0 до 29) типов земли. Они представлены в следующем порядке; летние версии:
• 0 – Rock - скла
• 1 – Gravel - песок
• 2 - Sand Caked – песок с грязью
• 3 – Sand - песок
• 4 - Sand Blown - пепелище
• 5 – Dirt - грязь
• 6 – Mud - грязь
• 7 – Swamp - болото
• 8 - Grass Dry – сухая трава
• 9 - Grass Short – короткая трава
• 10 - Grass Long – высокая трава
• 11 - Shrub Sparse – редкий кустарник
• 12 - Shrub Dense – плотный кустарник
• 13 - Forest Sparse – редкий лес
• 14 - Forest Dense – густой лес

Зимние версии:
• 15 - Rock
• 16 – Gravel

И т.д. в том же порядке – однако никак не получилось получить траву зимой, поэтому типы от 15 до 29 для зимы можно игнорировать.
Примечание: эти типы земли являются образцами для тактической карты, созданные в файле geography.db и terrain – эти типы земли не одни и те же, что для страткарты.

Текстуры, используемые для травы перечислены под заголовком климата, например:
#----------------------------------------------------------------------------
-----------------------
#---------------   settings for climate    1  --------------------------------------
#--------------------------------------------------------------------------------
-------------------
new_vegetation/grass/sandy_desert/ground_cover_summer.texture       new_vegetation/grass/sandy_desert/ground_cover_winter.texture


и снова для зимы это не имеет значения. Вам не нужно класть новые текстуры в перечисленные папки – вы можете просто изменить путь.
Если вы конвертируете summer.textures в .dds формат, то вы увидите в фотошопе с включённым альфа-каналом, что-то вроде этого:

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

Если секция типов земли начинается с:
0   nvariants

Тогда тип земли не будет ничего отображать (ни травы, ничего) и весь остальной материал будет просто для проформы, чтобы просто сам файл функционировал.


Демонстрация


Я собираюсь изменить траву temperate_deciduous_forest некоторыми простыми цветами радуги. Также к траве добавлю эффект грязи. Ниже представлена моя цветовая версия файла с альфа-каналом, окрашенным в белый – и вот как это выглядит в игре… (заметьте, пока никаких изменений в .db ещё не делалось)

В игре получаем следующее:

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

Чтобы трава появилась, первое, что нужно сделать это внести изменения в descr_geography_new.db, добавить значение 0.5 в таблице распределения растительности для травы в колонке «грязи» (mud) - см. рис. ниже.
В IWTE используйте вкладку "Veg/GeogDB", и команду "Read/edit geography.db", затем выберите вкладку "climates", затем выберите климат из выпадающего списка, и в конце дважды кликните на значении, чтобы отредактировать его. Нажмите кнопку «OK - write files». В итоге вы получите новый файл geography.db с добавлением в названии _IWTE – переименуйте файл в descr_geography_new.db.

Теперь мне нужно изменить текстовый файл растительности, который был создан IWTE из файла .db – я хочу изменить климат temperate_deciduous, тип грязи – из списков выше, это климат под номером 5 и тип земли под номером 6.
На данный момент он имеет 0 nvariants (т.е. ни одного из них). Я просто скопирую рабочую секцию из другого рабочего климата/типа земли:
6   nvariants 
       0        0   +1.407999992      +1.663999915      +1.081599951         150       97   +0.000488281      +0.250488281      +0.500000000      +0.500000000    10   
       0        0   +1.407999992      +1.663999915      +1.081599951         150       97   +0.000488281      +0.000488281      +0.500000000      +0.250000000    10   
       0        0   +1.407999992      +1.663999915      +1.081599951         150       97   +0.500488281      +0.000488281      +1.000000000      +0.250000000    65   
       0        0   +0.287999988      +1.151999950      +0.748799920         104       67   +0.125488281      +0.750488281      +0.250000000      +1.000000000    8   
       0        0   +0.287999988      +1.151999950      +0.748799920         104       67   +0.000488281      +0.750488281      +0.125000000      +1.000000000    5   
       0        0   +0.287999988      +1.151999950      +0.748799920         104       67   +0.250488281      +0.750488281      +0.375000000      +1.000000000    2

Итого, вся моя секция для этого типа земли выглядит так:
Спойлер (скрытая информация)

Сохраните txt-файл. Используйте команду "Read VegDB text" в IWTE для чтения txt-файлов – он затребует у вас .db-файл, поскольку ему нужно будет скопировать некоторые настройки из этого файла – когда вы укажите ему этот .db-файл и txt-файл, он автоматически сгенерирует новый .db-файл с добавленным числом в названии – сохраните старую версию файла и измените название нового файла на "vegetation.db" – теперь смотрите на рис., итого, не зная, что за цифры мы вставляли, и вообще все, тем не менее, у нас есть трава:

Скрин сделан с настройками травы «высокий». Понятно, что при более низких настройках радиус обзора травы будет ещё меньше.


Подробнее о числах
Итак, почему все они синие?

group sections, которую я использовал имела следующий вид:

Цитата

7 stdgroup
0 +0.7000 +0.0000 227 25 205 205
0 +1.0000 -0.1000 14 63 205 205
0 -0.8000 -0.8000 99 35 205 205
0 -1.0000 +1.0000 79 17 205 205
0 +1.0000 +0.9000 103 122 205 205
0 +0.2000 +0.5000 79 88 205 205
0 +0.4000 -1.0000 218 20 205 205

эти первые числа говорят, какой именно вариант линий использовать – в нашем случае 0 значит строка 1, а строка 1 имеет следующий вид:

Цитата

0 0 +1.407999992 +1.663999915 +1.081599951 150 97 +0.000488281 +0.250488281 +0.500000000 +0.500000000 10

Эти последние четыре значения являются координатами на текстуре, которые сообщают ей тот кусок, который нужно отобразить и в данном случае он приблизительно равен 0, 0.25 до 0.5, 0.5. Вот эти координаты на текстуре:

Заметьте, что они не зависят от размера самой текстуры, 0,0 – это верхний левый угол, а 1,1 нижний правый. Если бы я хотел, чтобы отображалась жёлтая часть текстуры, я бы вписал следующие значения: +0.00 +0.00 + 0.50 + 0.25. А для немного зеленоватого 0.125 +0.75 + 0.25 + 1.0

Несмотря на то, что все типы земли в этом климате используют один и тот же файл, они не используют одни и те же секции, так моя «грязь» может использовать только синий и жёлтый участки, а forest_sparse в таком случае будет использовать розовый и зелёный и т.д.

Вы заметите, что на каждую секцию типа земли есть 8 групп – чтобы объяснить это лучше, я изменю мои nvariants, чтобы они использовали все 8 различных участков текстуры, а каждая группа использовала только одну строку. Запомните, строки пронумерованы от 0 до 7, не от 1 до 8, поэтому никакой 8 строки нет!

Теперь мой текст выглядит следующим образом:
Спойлер (скрытая информация)

Итак, у меня получился вполне приличный результат, даже притом, что каждая группа содержит только один цвет;

Теперь, чтобы показать как это работает, так сказать с другой стороны, сделаем так, чтобы каждая группа теперь использовала последовательно строки 0,1,2,3,4,5,7. Каждая группа сделана идентичной:
Спойлер (скрытая информация)

Теперь все группы имеют одни и те же позиции и в результате мы имеем упорядоченная сетка (а зачем :038: )

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

На «средней» детализации всё выглядит похоже с «высокой», 3 и 5 строки каждой группы отображаются при приближении камеры. При отдалении (жёлтый и синий) появляются, но не на дальнее расстояние.


6 и 7 строчки вообще не отображаются. Почему? Помните, что мы сделали в начале, чтобы появилась трава? Мы ввели значение 0,5 для травы в файле geography.db. Теперь, если мы изменим это значение на 1.0, то эти последние строчки (6 и 7 – тёмно синяя и светло-зелёная соответственно) появятся при приближении камеры.


Изменения высоты куска текстуры для строки 0 – жёлтый кусок

Цитата

0 0 +0.287999988 +1.151999950 +10.748799920 104 67 +0.000488281 +0.000488281 +0.500000000 +0.250000000 10

Чётко видно изменение высоты
Для строки 1 – светло-синяя

Цитата

0 0 +1.287999988 +1.151999950 +0.748799920 104 67 +0.000488281 +0.250488281 +0.500000000 +0.500000000 10


В результате вы видите, что можно менять высоту и ширину кусков текстур

Теперь вернём всё назад и сделаем другие манипуляции. Изменим значения так, чтобы все куски текстур были под одним углом
Спойлер (скрытая информация)


Теперь немного развернём углы

Цитата

7 stdgroup
0 +1.0000 +1.0000 0 25 205 205
1 +0.66 +0.0000 0 255 205 205
2 +0.33 +0.0000 0 191 205 205
3 +0.00 +0.0000 0 25 205 205
4 -0.33 +0.0000 227 25 205 205
5 -0.66 +0.0000 227 25 205 205
6 -1.00 -1.0000 227 89 205 205

получаем

Эти выделенные значения разнятся от 0-255 на 360 градусов


Зачем это всё?
Так почему же вам стоит возиться со всей этой кутерьмой, а не взять и просто сделать текстуру травы красивее?

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

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



Подводя итоги
Для полного понимание текстового файла, созданного с помощью IWTE, показываю содержимое с пояснениями.

Цитата

#-------------------------------------------------- -------------------------------------------------
#--------------- groundtype 6 -------------------------------------- *comments - just to help you find position
#-------------------------------------------------------------------------------- -------------------
8 nvariants - количество строк, которые будут использоваться ниже
0 0 +0.657999988 +1.151999950 +0.748799920 255 67 +0.500000000 +0.250000000 +1.000000000 +0.500000000 10
Стандарт, не менятьотображение ширины – не выделенный текст - это неизвестные значения - отображение высотыстартовые позиции х,y, на текстурефинишные позиции на текстуре
0 0 +0.587999988 +1.151999950 +0.948799920 104 67 +0.500000000 +0.250000000 +1.000000000 +0.500000000 10
0 0 +0.587999988 +1.151999950 +0.448799920 104 67 +0.500000000 +0.250000000 +1.000000000 +0.500000000 10
0 0 +0.517999988 +1.151999950 +0.648799920 104 67 +0.500000000 +0.250000000 +1.000000000 +0.500000000 10
0 0 +0.587999988 +1.151999950 +0.748799920 0 67 +0.500000000 +0.250000000 +1.000000000 +0.500000000 10
0 0 +0.497999988 +1.151999950 +0.648799920 104 67 +0.500000000 +0.250000000 +1.000000000 +0.500000000 48
0 0 +0.427999988 +1.151999950 +0.748799920 104 67 +0.500000000 +0.250000000 +1.000000000 +0.500000000 1
0 0 +0.007999988 +1.151999950 +0.00799920 104 67 +0.500000000 +0.250000000 +1.000000000 +0.500000000 1
8 intgroup
7 stdgroup
Стандарт, не менять

5 +0.0000 +0.8000 0 25 205 205
1 +0.1 -0.8000 0 25 205 205
Эти первые две выделенные шрифтом строки будут отображаться больше остальных на карте
2 +0.1 +0.75000 0 79 205 205
число строк в nvariants (начинается с 0)~позиция x,y в группе, где 0,0 это центр ~ невыделенные текст - неизвестные значения! - вращение
0 +0.00 -0.7000 0 99 205 205
4 -0.1 +0.7000 227 120 205 205
2 -0.1 -0.7000 227 130 205 205
6 -0.00 +0.8000 227 240 205 205
Эти две последние строки будут меньше всего отображаться
7 stdgroup
7 +0.7000 +0.0000 227 25 205 205
7 +1.0000 -0.1000 14 63 205 205
7 -0.8000 -0.8000 99 35 205 205
7 -1.0000 +1.0000 79 17 205 205
7 +1.0000 +0.9000 103 122 205 205
7 +0.2000 +0.5000 79 88 205 205
7 +0.4000 -1.0000 218 20 205 205


Чтобы вы ни делали, запомните, что первые две строки в каждой группе будут отображаться больше всех и на дальних дистанциях (а на низких настройках травы, вообще будут отображаться только они) – поэтому, если вы хотите добавить какую-нибудь особую, запоминающуюся растительность, её следует размещать именно в первых двух строках.
    Ответить в темуВведите Ваш логин  
    [Регистрация нового аккаунта]
    Введите Ваш пароль 
    [Восстановить пароль]
    Создать новую тему
    или Войти на форум через соцсеть
      Стиль:
        09 Дек 2016, 16:33
    © 2016 «Империал». Условия предоставления. Ответственность сторон. Рекрутинг на Империале. Лицензия зарегистрирована на: «Империал». Счётчики