Кастомизация воды

Добавлен , опубликован

О статье

После статьи про клифы возникло желание написать похожую статью про воду, но тут будет скорее просто разбор характеристик стандартной воды и пример ее кастомизации (насколько мне известно нельзя юзать несколько типов воды, они привязаны к базовому ландшафту). Так же понадобится самоподключающийся .mix архив.
Тестировалось только на 1.26.

Подготовка

База

Вода это те же тайлы, только рисуются поверх тайлов ланда и могут быть всячески анимированы.
Текстуры воды лежат по пути ReplaceableTextures\Water во вложенных mpq (A.mpq, B.mpq, C.mpq и т.п) и как и в случае с клифами зависят от базового ланда, т.е. выборочно подгружаются; они имеют имена Water*.blp где * это номер (по дефолту от 00 до 44).
Текстуры из дополнения ROC так же есть и в самом war3.mpq по тому же пути но у них в имени есть приставка по типу A_ , где первая буква характеризует ланд.
Данные о воде хранятся в файле TerrainArt\Water.slk.
Длинный список обозначений:
  1. waterID - идентификатор воды;
  2. height - высота воды, определяет на каком уровне по Z будет находится вода (0.0 это уровень рельефа, -1.0 это уровень мелководья, -2.0 это уровень глубоководья; положительные значения будут рисовать воду выше рельефа на котором она расположена);
  3. impassable - проходима ли вода (0 - проходима, 1 - непроходима; летать можно в любом случае);
  4. texFile - файл текстуры воды;
5-8 - Цвета на миникарте (от 0 до 255).
  1. mmAlpha - прозрачность;
  2. mmRed - красный;
  3. mmGreen - зеленый;
  4. mmBlue - синий;
9-14 - Эти поля связаны с текстурой и влияют на саму текстуру.
  1. numTex - количество задействуемых текстур;
  2. texRate - скорость смены текстур;
  3. texOffset - с какой текстуры начинать анимацию (или сдвиг при анимации, хз зачем оно надо);
  4. alphaMode - режим наложения текстуры (0 - Blend, 1 - Add, 2 - Mod, 3 - Mod 2X, 4 - Alpha Key);
  5. lighting - влияет ли освещение на текстуру (0 - не влияет, 1 - влияет);
  6. cells - размер текстуры, имеется ввиду сколько клеток будет занимать текстура;
15-25 - Эти поля влияют на движение тайлов.
  1. minX - минимальный предел движения по горизонтали;
  2. minY - минимальный предел движения по вертикали (по дефолту minX minY и прочие выставлены на 0 и вода сама по себе не движется, меняется только текстура);
  3. minZ - минимальный предел движения по высоте (угу, вода может быть анимирована по высоте, создавая эффект приливов и отливов);
  4. maxX - максимальный предел движения по горизонтали;
  5. maxY - максимальный предел движения по вертикали;
  6. maxZ - максимальный предел движения по высоте;
  7. rateX - скорость движения между пределами minX и maxX по горизонтали;
  8. rateY - скорость движения между пределами minY и maxY по вертикали;
  9. rateZ - скорость движения между пределами minZ и maxZ по высоте;
  10. revX - инвертировать ли горизонтальное направление движения воды rateX при достижении горизонтальных пределов minX или maxX (чтоб вода могла туда-сюда течь; 0 - не инвертировать, 1 - инвертировать);
  11. revY - инвертировать ли вертикальное направление движения воды rateY при достижении вертикальных пределов minY или maxY;
Пример где задействованы все эти поля.
26-13 - Эти поля связаны с волнами на стыке рельефа.
  1. shoreInFog - показывать ли волны в тумане войны (0 - не показывать, 1 - показывать);
  2. shoreDir - директория с моделями волн;
  3. shoreSFile - поддиректория и модель волны на стыке рельефа бег угла (станет ясно если глянуть на путь дефолтной волны Doodads\LordaeronSummer\Water\Shoreline\Shoreline0.mdx);
  4. shoreSVar - количество вариаций модели shoreSFile (по дефолту везде стоит 0, похоже за ненадобностью, т.к. в самой модели можно заюзать множество анимаций с разной редкостью);
  5. shoreOCFile - поддиректория и модель волны на стыке рельефа углом наружу;
  6. shoreOCVar - количество вариаций модели shoreOCFile;
  7. shoreICFile - поддиректория и модель волны на стыке рельефа углом внутрь;
  8. shoreICVar - количество вариаций модели shoreICFile;
Где какие углы.
34-49 - Эти поля связаны с цветом воды основываясь на разнице между высотой воды и высотой рельефа под ней (линейная цветовая интерполяция).
  1. Smin_A - мелководье, минимальная прозрачность;
  2. Smin_R - мелководье, минимальный красный;
  3. Smin_G - мелководье, минимальный зеленый;
  4. Smin_B - мелководье, минимальный синий;
  5. Smax_A - мелководье, максимальная прозрачность;
  6. Smax_R - мелководье, максимальный красный;
  7. Smax_G - мелководье, максимальный зеленый;
  8. Smax_B - мелководье, максимальный синий;
  9. Dmin_A - глубоководье, минимальная прозрачность;
  10. Dmin_R - глубоководье, минимальный красный;
  11. Dmin_G - глубоководье, минимальный зеленый;
  12. Dmin_B - глубоководье, минимальный синий;
  13. Dmax_A - глубоководье, максимальная прозрачность;
  14. Dmax_R - глубоководье, максимальный красный;
  15. Dmax_G - глубоководье, максимальный зеленый;
  16. Dmax_B - глубоководье, максимальный синий.

Нужный инструментарий

  1. Любой MPQ редактор (я юзаю Ladik's MPQ Editor).
  2. Любой редактор для работы с SLK таблицами (тот же Microsoft Excel).

Кастомизируем воду

В данной статье мы будем извращаться над дефолтной водой Подземелья (DSha), а именно переделаем воду в лаву.
Как и в случае с файлами тайлов и клифов, файл воды TerrainArt\Water.slk нет смысла кидать в импорт мапы, поэтому создадим пустой .mix архив по этой статье и назовем его WaterCustom.mix, закинем туда файл TerrainArt\Water.slk который мы будем редактировать по ходу дела.
1) Определимся с текстурой и цветом - в нашем случае подойдет и текстура воды самого подземелья так что оставим поле texFile дефолтным, однако чтобы это больше походило на лаву сделаем ее полностью непрозрачной изменив поля Smin_A и т.д. (все 16 штук), поставив значения:
  • Прозрачность : 255
  • Красный : 255
  • Зеленый : 255
  • Синий : 215
Сразу же можем изменить цвет воды на миникарте:
  • mmAlpha : 128
  • mmRed : 224
  • mmGreen : 32
  • mmBlue : 0
Как по мне так наша лава слишком жидкая и мелкая.
2) Воспользуемся хитрушкой-заманушкой и вместо динамической смены текстуры сделаем движение одной текстуры по горизонтали/вертикали, так же увеличим ее размер. Изменим следующие значения:
  • numTex : 1
  • texRate : 0
  • cells : 4
  • rateX : 4
  • rateY : 4
  • revX : 0
  • revY : 0
Надо что-то сделать с этими морскими волнами...
3) Неплохо было бы заменить модели волн на что-то типа всплеска лавы или разлета искр, но чисто для пример возьмем модельки огня которые я фастом сварганил - одна для shoreSFile и вторая для shoreOCFile/shoreICFile (модельки по этим путям мы запихнем в наш WaterCustom.mix):
  • shoreDir : Doodads\Dungeon\Water
  • shoreSFile : DungeonShoreline
  • shoreOCFile : DungeonShorelineCorner
  • shoreICFile : DungeonShorelineCorner
Уже похоже на лаву, хотя огня кажется многовато.
4) Небольшие косметические изменения, например можно сделать так чтобы по лаве нельзя было перемещаться и чтобы ее было видно даже без источников света:
  • impassable : 1
  • lighting : 0
Результат можно проверить скачав пример и закинув WaterCustom.mix в корень игры.
Для того чтобы лава так же отображалась в редакторе надо немного "пропатчить" .mpq вара таким же образом как и наш WaterCustom.mix.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
3
Хорошее руководство для чайников. Всë чëтко и понятно. Статья 10/10.
Ответы (3)
18
rsfghd, хотя хер знает насколько полезное, обычно воду вообще не трогают)
28
OVOgenez, ландшафтерам пригодится эта информация, не волнуйся)
23
Интересно смотрится, тем кому будет в лом делать это из отдельных моделей, обязательно воспользуется данной статьей. Лайк автору!
23
Очень годно. Очень будет круто, если кто нибудь запилит статью, как сделать набор текстур из рендеров шейдерной воды, и тогда можно будет запилить "HD" воду в 1.26. А если тут можно ставить размер текстур, значит можно сделать прям тайлы воды 512х512 и будет очень разнообразная водичка)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.