Раздел:
Ландшафт
Я взял карту-пример из пака "Западная провинция", в которой импортированы модели из ВоВ локации Гилнеас. Для удобства сократил размер карты до 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, и, желательно, поддерживающий слои.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
8 лет назад
0
Maniac_91, верное наблюдение!
0
27
7 лет назад
0
Если посмотреть в IsTerrainPathable (Проходима ли местность)
у него есть кучу проверок, и возникает вопрос а где "плавать", где "амфибии" и прочее.
Кстати PATHING_TYPE_PEONHARVESTPATHING за что отвечает? я тыкал на рельеф/ландшафт/дом/декор с помощью канала везде, такое чувство, что никаких изменений, везде одинаково, будто бы говорило, то что-то неправильно. Единственное где были противоположные результаты на склонах, клифах и в воде.
PATHING_TYPE_PEONHARVESTPATHING - точка, в пределах которой могут передвигаться работники (добывая золото и дерево). Какое назначение этого паффинга? даже на рудник и дерево тыкал, ничего.
0
11
7 лет назад
0
можно ли сделать для самой карты текстуру путей?
5
30
7 лет назад
Отредактирован Clamp
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).
0
4
5 лет назад
0
А в чем разница между текстурой пути и картой пути?
2
33
5 лет назад
2
Choperok, в данном контексте, имхо, карта путей — это информация о проходимости всех участков карты, а текстура — информация о проходимости, привязанная к конкретному объекту (декорации, разрушаемому объекту или зданию).
0
27
4 года назад
Отредактирован MpW
0
плохо, что черный цвет невидим при строительстве, должен показать зеленый квадрат при строительстве. Но он полностью прозрачен (как решить такую проблему?).

еще заметил что функция IsTerrainPathable не видит текстуру пути здания или декора. А вот функцией SetTerrainPathable нельзя отредактировать (к примеру разрешить "строить"), если там лежит текстура пути здания или декора. Короче изменяет сам ландшафт, но не участок. Получается что поверх положат текстуру пути здания, если что-то изменяешь, это снизу ланд меняем. Поэтому вы используете дудад doodad
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.