WarCraft 3: Альтернативный способ наложения карты путей

» Раздел: Ландшафт

Я взял карту-пример из пака "Западная провинция", в которой импортированы модели из ВоВ локации Гилнеас. Для удобства сократил размер карты до 64х64, этого достаточно, чтобы наглядно показать способ во всей своей красе. Чтобы мне ничего не мешало, я убрал весь лишний импорт и объекты в РО, которые стали не нужны после уменьшения размеров карты, также убрал декорации травы, которая не блокирует проходимость.
Вот первоначальный результат, с которого начнем непосредственно заниматься картой путей или текстурой пути (поправьте, если считаете, что один из вариантов названия будет правильнее).
Карта путей (pathing texture) - это невидимая текстура, расстилающаяся на поверхности рельефа, в которой отмечены проходимые участки рельефа различными цветами. Каждый цвет соответствует определенному типу проходимости: можно/нельзя ходить/летать/строить. В редакторе рельефа включается клавишей [P] (Вид > Пути: суша). Стандартные текстуры путей находятся в папке PathTextures/ в *.mpq архивах игры. Формат текстур путей может быть только *.tga 8-бит, т.к. он не имеет сжатия и потерь качества. Это очень важно, ведь слегка другой оттенок цвета игра не распознает правильно. Каждый пиксель текстуры отвечает за одну игровую клетку на самой мелкой сетке рельефа.
Некоторые расставленные декорации уже имеют свою текстуру пути (стандартная розовая 2х2), ее используют деревья, бочки и прочее, но в этой карте ее используют лишь ёлки и фонари. Оставим это как есть, иначе будет слишком неудобно работать с картой в будущем, постоянно контролируя создаваемые и удаляемые с рельефа декорации. Этот способ рисования текстур позволяет не привязывать каждую отдельную декорацию к карте путей, позволяет расставлять декорации свободно от сетки и, более детализировано прорисовывать карту путей, чем это позволяют стандартные текстуры пути. Также можно отметить преимущество перед стандартными блокираторами пути в том, что их нужно много, чтобы, к примеру, покрыть непроходимый участок скалы. А каждый лишний объект на карте дополнительно нагружает ее. Здесь же можно расставить всего лишь несколько объектов и покрыть ими весь рельеф.
Создаем в фотошопе базовую текстуру пути размером 128х128 пикселей, для удобства ориентации раскрашиваем ее в шахматном порядке так, чтобы клетки соответствовали большой сетке рельефа. Подкрашиваем границу текстуры, чтобы можно было видеть это на карте. Импортируем и привязываем к декорации Doodad. Она будет занимать игровое поле размером 32х32.
Почему не к Destuctable, спросите Вы - есть несколько причин:
  • дудад занимает меньше памяти;
  • текстура пути дудадов лучше воспринимается триггерными функциями проверки пути;
native IsTerrainPathable takes real x, real y, pathingtype t returns boolean
  • можно оптимизировать дудады с помощью Widgetizer без опасения потери данных.
Далее остается лишь заполнить нашу карту новой декорацией в стык друг к другу и начать закрашивать пиксели в фотошопе по самой мелкой сетке рельефа. Там, где мы не планируем ходить - красим розовым, а там, где нужно оставить возможность пройти - красим черным либо синим.
Если Вы обладаете пространственным воображением, то очень быстро приловчитесь ориентироваться в сетке при рисовании путей, ведь часто приходится вращать камеру со всех сторон, когда, в свою очередь, изображение остается в одном положении.
Периодически импортируем измененную в процессе текстуру в карту. Нужно, чтобы изменения визуально вступили в силу, и здесь действует единое для всего импорта правило: карту с новым импортом нужно сохранить до того, как он будет использован и отображен в редакторе. Это значит, что после сохранения нужно вырезать объект с рельефа и снова вставить на место. Если декорация не ставится из-за помехи в картах путей от других декораций, то нужно ставить с зажатой клавишей SHIFT. Клетки, на которые попали нескольких декораций, при слиянии приобретают свойства обеих цветов и окрашиваются в новый, соответствующий этому свойству, цвет.
Старайтесь расставлять декорации таким образом, чтобы заранее учитывать их попадание в сетку и ячейки, иначе бывает так, что граница декорации проходит между клеток и возникает спорный момент, какую клетку зарисовать, а какую оставить.
Физический размер юнитов напрямую взаимодействует с картой путей, поэтому нужно прорисовывать проходы такой ширины, чтобы юниты могли пройти. Там, где пройдет пехотинец, может не пройти герой. Проходы по диагонали должны быть немного шире, чем вертикальные или горизонтальные, иначе там пролезет лишь курица. Также надо учитывать такие фрагменты карты, куда невозможно попасть, приказывая юниту, но можно оказаться от триггерного перемещения, например, от разного рода отталкиваний и телепортаций. Иногда такие места лучше сразу закрасить непроходимым цветом.
По завершению всех процедур не забываем заменить модель нашей декорации моделью блокиратора пути, т.к. он невидимый и его трудно выделить в редакторе.
Я не стал прорабатывать все 4 фрагмента в примере, т.к. по времени на проработку каждого такого фрагмента в среднем уходит 1 час.
Спасибо Clamp за подталкивание к написанию этой статьи.
Спасибо LongbowMan за этот замечательный пак моделей, который меня вдохновил. Я с удовольствием использую его в своем проекте, где и применяю этот способ с картами путей.
Прикрепляю архив с картой и текстурами в форматах *.tga и *.psd. Можно использовать любой редактор, сохраняющий изображения в *.tga, и, желательно, поддерживающий слои.
pathing texture, pathing, path, карта путей, текстура пути, проходимость

Просмотров: 1 511

» Лучшие комментарии


darkowlom #1 - 11 месяцев назад (отредактировано ) 0
Неплохо, очень даже. Самый главный вопрос, так ведь теоретически можно нарисовать карту путей детальней стандартных квадратов и их четвертей? Видимо да, как будет время попробую декорине HD текстуру путей нарисовать
Xin #2 - 11 месяцев назад 0
Будет крайне полезно для карт типа дуэльных, или как делал огр, (где куча-куча декора иморта без карты путей) что бы их в игровые превратить быстренько.
Diaboliko #3 - 11 месяцев назад 1
Имхо стоит добавить по какой цене обходится такой импорт (в плане веса текстурки).
Лень качать архив, да.
Ige #4 - 11 месяцев назад 0
Diaboliko, а вот если бы скачал архив, то увидел бы, что текстурка весит ~50кб, но сжимается до 1кб
случайно на + тыкнул XD
GF RaiseD #5 - 11 месяцев назад 0
Создаем в фотошопе базовую текстуру пути размером 128х128 пикселей, для удобства ориентации раскрашиваем ее в шахматном порядке так, чтобы клетки соответствовали большой сетке рельефа. Подкрашиваем границу текстуры, чтобы можно было видеть это на карте. Импортируем и привязываем к декорации Doodad. Она будет занимать игровое поле размером 32х32.
Diaboliko #6 - 11 месяцев назад (отредактировано ) 0
но сжимается до 1кб
Формат текстур путей может быть только *.tga 8-бит, т.к. он не имеет сжатия и потерь качества. Это очень важно, ведь слегка другой оттенок цвета игра не распознает правильно. Каждый пиксель текстуры отвечает за одну игровую клетку на самой мелкой сетке рельефа.
Я, быть может, олень в вопросе изображений, ибо с ними дел толком не имел, но, смею предположить, "не имеет сжатия" значит то, что кажется.
GF RaiseD, если кто спросит сколько весит такая текстурка, так и отвечу. Да. =/
Ige #7 - 11 месяцев назад 0
Diaboliko, под сжатием я имел ввиду сжатие самого варкрафта, т.е. после добавления текстуры вес карты увеличится на ~1кб, а не на 50
JaBeN_Симфер #8 - 11 месяцев назад (отредактировано ) 6
Есть форматы изображений со встроенным в них алгоритмом сжатия, например JPG, BLP, это сжатие, скорее всего, будет с потерями, т.е. качество ухудшится после сохранения в такой формат. Есть форматы без сжатия, например TGA, PNG, BMP, они в обычном состоянии весят много, но отлично архивируются, т.к. архивация - это сжатия без потерь.
Теперь самое интересное, карта в варкрафте - это архив, который сжимает все файлы точно также, как например WinRAR.
16 текстур размером 128х128 будет достаточно для покрытия игрового поля размером 128х128, а в формате TGA с 8-битными цветами эти файлы сожмутся и займут места меньше, чем одна иконка 64х64 в BLP.
прикреплены файлы
GF RaiseD #9 - 11 месяцев назад 0
Diaboliko, я к тому что они мало весят. Я думал, размер текстуры подскажет тебе насколько незначителен её вес.
VetsaN #10 - 11 месяцев назад 0
darkowlom:
Неплохо, очень даже. Самый главный вопрос, так ведь теоретически можно нарисовать карту путей детальней стандартных квадратов и их четвертей? Видимо да, как будет время попробую декорине HD текстуру путей нарисовать
Мне тоже интересна данная тема
Кет #11 - 11 месяцев назад 0
Так в Зефире же можно нарисовать свою карту путей для всей карты...
darkowlom #12 - 11 месяцев назад 0
Кет, можно, но зефир неудобная крокозябра
Кет #13 - 11 месяцев назад 2
darkowlom, да, но в этом способе геморрою не меньше.
JaBeN_Симфер #14 - 11 месяцев назад (отредактировано ) 0
Кет, в зепире можно, но там не видно где декорации, куда ставить каждую клетку и тд. К тому же всякие правки все время в зепире не удобно делать.
Maniac_91 #15 - 11 месяцев назад 3
Закодированный цвет и возможность ходьбы/строительства/полёта совпадают следующим образом:
# ходить летать строить
Если символы равны 00, то можно, если FF - нельзя.
Интересно)
Это сообщение удалено
JaBeN_Симфер #17 - 11 месяцев назад 0
Maniac_91, верное наблюдение!
Steal nerves #18 - 5 месяцев назад 0
Если посмотреть в IsTerrainPathable (Проходима ли местность)
у него есть кучу проверок, и возникает вопрос а где "плавать", где "амфибии" и прочее.
Кстати PATHING_TYPE_PEONHARVESTPATHING за что отвечает? я тыкал на рельеф/ландшафт/дом/декор с помощью канала везде, такое чувство, что никаких изменений, везде одинаково, будто бы говорило, то что-то неправильно. Единственное где были противоположные результаты на склонах, клифах и в воде.
PATHING_TYPE_PEONHARVESTPATHING - точка, в пределах которой могут передвигаться работники (добывая золото и дерево). Какое назначение этого паффинга? даже на рудник и дерево тыкал, ничего.
Nighty #19 - 2 месяца назад 0
можно ли сделать для самой карты текстуру путей?
Clamp #20 - 2 месяца назад (отредактировано ) 5
Nighty, ЕМНИП проходимость считается в рантайме, так что или делать точно так, как описано в статье, или делать через код, под катом вся нужная инфа:
» pathing API
    constant pathingtype        PATHING_TYPE_ANY                = ConvertPathingType(0)
    constant pathingtype        PATHING_TYPE_WALKABILITY        = ConvertPathingType(1)
    constant pathingtype        PATHING_TYPE_FLYABILITY         = ConvertPathingType(2)
    constant pathingtype        PATHING_TYPE_BUILDABILITY       = ConvertPathingType(3)
    constant pathingtype        PATHING_TYPE_PEONHARVESTPATHING = ConvertPathingType(4)
    constant pathingtype        PATHING_TYPE_BLIGHTPATHING      = ConvertPathingType(5)
    constant pathingtype        PATHING_TYPE_FLOATABILITY       = ConvertPathingType(6)
    constant pathingtype        PATHING_TYPE_AMPHIBIOUSPATHING  = ConvertPathingType(7)

native IsTerrainPathable        takes real x, real y, pathingtype t returns boolean
native SetTerrainPathable       takes real x, real y, pathingtype t, boolean flag returns nothing

Через код весьма геморройно, хотя способы упростить себе задачу всё-таки есть (выставлять по типу текстуры ландшафта, по высоте ландшафта, по позициям разрушаемых, etc).