Это популярное сообщение. HellRatz 2 851 Опубликовано 11 Февраля 2015 Это популярное сообщение. Поделиться Опубликовано 11 Февраля 2015 AI-Map в X-Ray: теория, практика, ошибки Статья по возможности расскажет о том, что такое Аи-Карта, как ее правильно сгенерировать, как скорректировать до рабочего состояния. Больше рассчитана на людей, которые более-менее знакомы с СДК, но все равно старался писать максимально подробно. 1. Теория 1.1 Что такое AI-Map? АИ-Карта - площадь на уровне, заполненная аи-узлами (нодами), контролирующие или ограничивающие перемещение НПС/Мутантов (Далее - боты) по уровню. В сталкере существует два типа сущности: либо что-то онлайн, либо оффлайн. Онлайн обычно ограничивается видимостью вокруг ГГ (В оригинале 150 метров). В онлайне боты перемещаются по аи-карте, в оффлайне же они перемещаются по точкам - графпоинтам. Когда моб попадает в видимость ГГ, он переходит из оффлайна в онлайн - это те самые моменты, когда игра зависает иногда на несколько секунд и движок переключает объекты из оффлайн в онлайн. Аи-карта должна быть цельной, не имеющая разрывы между нодами. Рис. 1 - Аи-карта в СДК (Редактор уровней для игры) На картинке видно, как аи-сетка огибает статические объекты. Это не ошибка редактора, так и должно быть. Дело в том, что мобы в игре не видят статические объекты, они видят только аи-карту и перемещаются строго по ней. По этому, если аи-сетка будет проходить сквозь статический объект (Дерево, автомобиль, дом и т.п) то моб спокойно пройдет сквозь него. Рис. 2 - Соединение нодов между собой На изображении видно соединение нодов между собой и направление каждого из них. В зависимости от количества сторон, куда может вывести нод, ноду причисляется свой цвет: 1) Полностью серый нод - все 4 направления; 2) Нод с 1 оранжевым ребром - 3 направления; 3) Нод с 2 синими ребрами - 2 направления; 4) Нод с 3 зелеными ребрами - 1 направление. В самом худшем случае нод имеет красный цвет, это означает, что нод не соединен с основной сеткой. Его нужно либо удалить, либо присоединить к основной карте. 1.1.2 Немного интересных фактов о АИ-Сетке (Спасибо Desertir): 1. При проекции на плоскость XZ представляет собой ноды 0.7х0.7 2. Ноды (или лв) нумеруются с юга на север, с запада на восток. 3. Нулевой вертекс самый западный, однако не всегда самый южный. 4. Вертекс имеет координаты X и Z кратные 0.7 (размеру ноды). 5. Если лв различаются только координатой У (на разной высоте), то нумерация чередуется (что нумеруется первым, верхний или нижний, пока не известно). 1.2 Какой максимальный размер АИ-Карты? Общий максимальный размер карты в среднем включает в себя 3.000.000 - 3.500.000 млн. плотно заполненных аи-нодов, что равняется уровню примерно равному 1.3 х 1.3 км (На данный момент GSC выложили исходные коды в свободный доступ, что увеличивает вероятность увеличения этого ограничения в ближайшем будущем). Так же следует учитывать и точки для оффлайна - графпоинты, чем больше аи-сетка, тем больше должна быть их плотность. Ограничения компиляторов xrAI (Возможно, на данный момент) не дают возможность сделать большой уровень, который можно наполнить жизнью, потому что если превысить среднее значение нодов в 3 млн и более 400 графпоинтов - компилятор будет валиться с ошибками. Конечно, никто не мешает сделать большой уровень сам по себе как таковой (Геометрия), тем более недавно выпущенные х64 компиляторы позволяют тянуть более тяжелую геометрию уровня, но наполнить его событиями не получится, либо нужно ограничивать размер АИ-Карты. 1.3 Что такое графпоинты и для чего они нужны? Если моб становится оффлайновым (Уходит из зоны видимости ГГ, заданным в alife.ltx), то движок переводит его в режим "оффлайн" и моб отправляется ходить по графпоинтам, от точки к точке перемещаясь, как бы живя своей жизнью. Графпоинты - особые точки, которые существуют только на АИ-Карте. Графпоинты видны в СДК, их можно редактировать расставляя как угодно или удаляя их, но в итоге после компиляции под формат игры, графпоинты не будут являться частью игрового уровня или all.spawn: компилятор xrAI переводит графпоинты в вершины игры/уровня (в глобальный граф). Все оффлайновые мобы могут перемещаться по этим точкам, не считаясь с переходами между уровнями (Как для ГГ), то есть для них графпоинты каждого уровня одна большая бесшовная карта, по которой они ходят, по этому и происходят в сталкере многие оффлайн-события, особенно в модах (Типа АМК) без участия игрока, например НПС с Кордона ушел в Бар, на Складах убили сталкеров, пока ГГ был в Припяти и т.д. Следует заметить, что расставляя граф-поинты в СДК, они должны находиться строго на АИ-карте, не должны проваливаться под сетку или висеть над ней, каждый граф должен стоять на ноде - иначе будут ошибки. Рис. 3 - Выделены все графпоинты на локации Кордон. 1.4 Какие файлы относят к АИ в игровых архивах (Или gamedata)? *gamedata/levels/level_name/level.ai - Сами ноды уровня, которые образуют единую карту, запечатаны в этот файл. *gamedata/levels/level_name/level.graph (Только ТЧ) - содержит в себе графпоинты с уровня. В папке с локацией в игре не нужен, нужен только для работы в СДК и xrAI. *gamedata/game.graph (Только ТЧ) - в этот файл запечатаны все т.н вершины (графпоинты) с локаций, подключенных к игре (Собирается из level.graph-ов). Глобальный граф. *gamedata/levels/level_name/level.gct (Только ТЧ) - является кросс-таблицей уровня. level.gct.raw - этот файл создает xrAI и является копией (промежуточной версией?) основного файла. В играх серии "Чистое Небо" и "Зов Припяти" дела обстоят немного иначе, все файлы относящиеся к АИ кроме карты уровня запечатываются в all.spawn. 2. Практика 2.1 Создание AI-Map Итак. Будем считать, что с общими понятиями этого аспекта игры мы разобрались. Настало время поработать по делу и создать свою АИ-Карту для, возможно, своего уровня. Поехали. Для того, чтобы создать сетку, Вы должны убедиться, что Ваш уровень готов к игре: на нем стоят все статические объекты, локацию окружает фейк-стена. Если все готово, то идем далее: Шаг 1. Подготовка уровня. Обязательно нужно "окутать" локацию фейк-стеной (Должна быть замкнута между собой, не иметь дыр), она не даст пройти аи-сетке за нее, что ограничит нас от лишней работы - удаление вручную АИ-Нодов, которые залезли за пределы игрового уровня. Специально создавать ее не обязательно, если Вы делали уровень (Может, был готовый) как полагается, то вокруг забора уже должна быть фейк-стена, которая не даст ГГ перепрыгнуть через забор. Просто копируем ее и опускаем ниже, чтобы она вошла где-то на половину в землю. После генерации АИ-Карты скопированный фейк-объект можно удалить! Рис. 4 - Фейк-стена для АИ-сетки скопированная из стены для ГГ Шаг 2. Выделение объектов Итак, уровень готов, на нем есть все нужные объекты. Идем дальше. Теперь нам нужно добавить все статические объекты уровня в снап-лист, т.е объекты, которые АИ-Сетка будет огибать во время генерации (Прим.: если в статическоем объекте есть дыра, например это здание с дверным проемом, то Аи-Сетка туда заберется и сгенерируется). Вообще, самый простой вариант - это сделать Ctrl+A выделив тем самым все объекты на локации, но мы пойдем немного иным и разумным путем. Дело в том, что кусты на уровне при таком выделении тоже соответственно будут выделены, что не очень хорошо, ведь ГГ может ходить сквозь кусты, так почему мобы не могут? Плюс порой это может вызвать эффект неожиданности, если на тебя из кучи кустов вдруг выпрыгнет кровосос! По этому делаем немного иначе, находясь в режиме работы с объектами (Кнопка Object) заходим в Object List и выделяем мышкой сами все объекты, кроме кустов. Т.к список объектов сортируется по алфавиту, то кусты порой могут оказаться в середине списка, например, и их нужно обойти и не выделить. Сделать это можно зажав Ctrl перед началом выделения и тогда можно выделять объекты выборочно, а нужные объекты конечно смотрим по названию. Рис. 5 - Выделены все объекты, кроме кустов через Object List. Шаг 3. Генерация АИ-Карты Уровень готов, нужные объекты выделены, пора сгенерировать саму аи-сетку. Переходим во вкладку AI Map, далее жмем Commands > And Select To List (Добавить выбранное в список), Рис. 6 - Добавление объектов в список все наши объекты добавляются в снап-лист. Далее жмем на кнопку добавления (Чайник вверху слева, либо горячая кнопка А(ф)) и добавляем на террейн как минимум 1 аи-нод, но лучше раскидать их несколько штук по уровню. Рис. 7 - Одиночные ноды расставленные перед генерацией. Для лучшего покрытия уровня нодами, жмем Ignore Constraints, далее жмем Generate Full - и ждем генерации Аи-Карты для уровня. Процесс может занять несколько минут, зависит от тяжести уровня (ПК, на сколько мне кажется, роли не играет, СДК живет своей жизнью) Рис. 8 - Сгенерированная карта на уровне Как видно на рисунке выше, аи-сетка расстелилась по уровню, прошла под кустами, но обошла дорожные знаки. Теперь в игре мобы будут пробегать сквозь кусты, как и ГГ, но оббегать вокруг препятствие в виде знаков. Рис. 9 - Карта внутри фейк-стены Как и говорилось ранее, аи-сетка не залезает за замкнутую фейк-стену. По желанию можно "разгладить" сетку нажав на кнопку Smooth Selected (Предварительно выделив все ноды с помощью Ctrl+A), но лично я все же не рекомендую это делать, иногда сглаживание проходит не очень выгодно и красиво. Лучше выделять одиночные ноды руками и сглаживать так, чем все сразу. Теперь можно так же удалить копию фейк-стены - она нам больше не нужна. 3. Корректировка сгенерированной Аи-Карты К сожалению, инструмент СДК для работы со сталкером не идеален, и имеет свои ошибки, аи-карта не исключение. Я настоятельно рекомендую, после генерации аи-карты, проверить ее на предмет ошибок. Распространенный тип ошибок и мелких косяков, а так же их исправление, рассмотрим ниже. 3.1. Корректировка 1. Не соединенные ноды Часто бывает, что ноды не соединяются между собой, даже если находятся близко друг к другу. Что на это влияет я так и не понял (Я понимаю, если место стыка находится в трудном месте, на высоте или еще где, а то бывает на ровном месте). Рис. 10 - Не линкованные между собой ноды Как видно из рисунка выше, на краю сетки есть ноды, которые ведут в 1 сторону. Т.е моб попадая на этот нод, не пойдет вдоль например, а развернется назад. Нам конечно это не нужно, по этому начинаем исправлять: 1. Выделяем все Аи-Ноды (Ctrl+A), 2. Затем жмем на среднюю кнопку (+) (К сожалению, ее названия я не знаю, называю ее просто "плюс") (Рис. 11) Рис.11 - Кнопка исправляющая данную ошибку. 3. Смотрим на результат. Рис. 12 - Результат с исправленными нодами Соответственно это исправит такие косяки не только в этом месте, но и в других подобных, возможно которые и не заметишь сразу. 3.2 Корректировка 2. Одиночные ноды Еще одна частая ошибка аи-карты, когда появляются одиночные ноды. Появляться они могут по разным причинам, например во время генерации случайно залезает выше по объекту, и даже коррекция описанная выше не помогает. Я же их расставил специально для примера. В обычном же картостроении, на хорошем большом уровне, их очень часто можно не заметить, опять прибегаем к помощи СДК. Рис. 13 - Одиночные ноды получившиеся после генерации карты Для того, чтобы выделить все одиночные ноды, жмем на Select 0-Link (Находятся справа от кнопки (+) ), данная кнопка выделит все нулевые ноды. Затем жмем Delete на клавиатуре - готово, одиночные ноды удалены. 3.3 Корректировка 3. Лишние ноды (Удаление) Еще один частый глюк СДК, когда аи-сетка произвольно залезает на объекты, которые не должна. Рис. 14 - Аи-сетка на пеньке Как видим с картинки выше, аи-сетка забралась на пенек. Не трудно догадаться, что в игре будет выглядеть не очень красиво, когда НПС или мутант будет бегать по пеньку. В таких случаях, к сожалению, автоматика СДК не поможет - такие места нужно искать самому и исправлять их: 1. Выделяем ноды (Кнопка-стрелочка вверху слева, или горячая кнопка S) Рис. 15 - Выделены лишние ноды 2. Жмем Delete на клавиатуре. 3. Смотрим результат Рис. 16 - Конечный результат, теперь мобы будут обходить пенек 3.4 Корректировка 4. Одиночное (ручное) добавление нодов Порой возникают случаи, когда нужно добавить ноды на уровень. Если аи-сетка создавалась правильно, такие случаи в основном исключены, но никто не от чего не застрахован. Возможно нужно добавить парочку нодов туда, куда СДК автоматически не смог их положить. Я для примера прокладываю "тропинку" к зданию. Чтобы это сделать, нужно опять же находясь в режиме редактирования Аи-Карты (Кнопка Ai Map) нажать на чайник или горячую клавишу А(ф), при условии что все статические объекты до сих пор находятся в снап-листе. Это ограничивает Вас от мороки навроде новой генерации сетки и т.д Рис. 17 - Результат ручного добавления (Новые ноды подсвечены) 3.5 Корректировка 5. Одиночная (ручная) линковка нодов между собой Иногда бывает ситуация, когда ноды не линкованны между собой. Это бывает во многих случаях, например если добавляете некоторые новые ноды вручную, и они не хотят соединяться с основной сеткой. Рис. 18 - Нелинкованные ноды (В моем случае после ручного добавления новых нодов они не соединяются с новой сеткой) Отчетливо видим ошибку. Чтобы мобы смогли зайти в будущем в здание, нужно соединить ноды находящиеся в дверном проеме. Чтобы исправить эту проблему, делаем следующее (Правка похожа на самую первую корректировку): 1. Выделяем ноды, которые нужно соединить между собой Рис. 19 - Выделены необходимые ноды (Подсвечены) 2. Затем жмем на кнопку (+) 3. Смотрим результат Рис. 20 - Результат корректировки 3.6 Корректировка 6. Генерация по определенным объектам Иногда бывают случаи, когда Аи-Карта не генерируется в некоторых местах. Например в зданиях. Благо, это тоже исправляется. Рис. 21 - Внутри здания нет Аи-Сетки Кстати, если все основные работы с основной сеткой были проведены, то для этой корректировки можно и нужно очистить снап-лист, далее мы добавим в него только нужные объекты для генерации. Жмем Commands > Clear List, подтверждаем удаление. Рис. 22 - Очистка снап-листа. Далее вручную выделяем нужные объекты, в моем случае это: дом, мебель. Выделять ВСЕ объекты уровня не нужно! Когда все выделяем, добавляем выделенные объекты с снап-лист, ставим внутрь дома как минимум 1 нод, но я рекомендую (При чем очень настоятельно) расставить по ноду в каждую комнату, чтобы сетка сгенерировалась в каждой комнате, ибо из-за дверных проемов она не всегда пролезает автоматически через него и генерируется в других помещениях. Рис. 23 - Выделены нужные объекты, обновлен снап-лист, добавлены ноды. , выделяем вручную каждый новый нод (Зажав L Ctrl) и жмем Generate Selected (Не Full!) Рис. 24 - Результат выборочной генерации только внутри здания (Основная сетка не была затронута) Теперь, вроде, все ок. Видим правда глюк - на тумбочку залез один нод. Нехорошо. Надо убрать. Как это сделать мы знаем, проходили в 3 корректировке аи-карты. А, хотя стоп, погодите...! Нашел еще один глюк. Как и говорил ранее, аи-сетка иногда может не проходить сквозь дверные проемы и т.п, это мы наблюдаем сейчас. Рис. 25 - Аи-Карта не соединилась из-за узкого прохода Исправить это легко, все из предыдущих корректировок - добавляем в дверной проем по 2 нода (Не забыв нажать Ignore Constraints, как всегда), и тут они либо сами между собой залинкуются, либо выделим их и ближайшие к ним ноды и нажмем на "плюс". Рис. 26 - Исправленная сетка в дверном проеме Вот и все - комнаты соединены между собой. Проделываем эту работу с каждой комнатой и наблюдаем результат. Аи-Карта расстелена по зданию и присоединена к основной сетке, чего не смог сделать СДК. Теперь мобы будут посещать домик. Рис. 27 - Конечный результат 3.7 Корректировка 7. Двигаем "летающие" ноды на место Еще один глюк, который возникает довольно часто - это летающие ноды. Благо это попадается очень редко, почти всегда в лице паре-тройке экземпляров, в основном в зданиях, на объектах, или после ручного добавления нода в узкий проем. Рис. 28 - Летающий нод Нехорошо. Будем исправлять. А то некрасиво как-то будет в игре, если моб попадет на этот нод и резко подлетит вверх, а потом вниз, верно? Выделяем этот нод, затем жмем кнопку отвечающую за перемещение объектов (Вверху на панели инструментов) и как обычный объект двигаем нод вниз по оси Y, и равняем его примерно с остальными. Готово! Рис. 29 - Результат смещения ноды вниз 3.8 Корректировка 8. Неправильная линковка нодов Еще одна редкая, но все же ошибка - когда ноды соединяются между собой по нескольку раз или же на далеких расстояниях, что в игре может вызвать адские глюки и некрасивые моменты. Рис. 30 - Пример такой ошибки Ноды с лестницы соеденились с нодами внизу, которые, в свою очередь, присоединены к основной сетке снизу. О как! Теперь правим: 1. Выделяем все три нода на лестнице, которые соединены к нижним 2. Удаляем 3. Ставим заново поштучно Либо можно не удалять а поставить новые ноды поверх старых, они автоматически перелинкуются в правильную сторону. Такие дела. Рис. 31 - Исправленные ноды, теперь они ведут в правильную сторону Такие ошибки к сожалению могут возникать не только не лестницах, а на различных выступах, ямках, обрывах и т.д - смотрите внимательнее и исправляйте эти недоразумения. 3.9 Корректировка 9. Аи-сетка на вышках и т.д Еще один, не то, чтобы глюк, но недоработка (имхо) аи-сетка не генерируется на вышках, например, вертикальных лестницах и т.д. Все это приходится делать руками. Рис. 32 - Аи-сетка на платформе, которая не соединена с основной сеткой на террейне Чтобы соединить два куска сетки между собой, делаем следующее: 1. Ставим нод снизу лестницы (Должно быть вкл. Ignore Constraints, не забываем), по надобности такой же нод сверху Рис. 33 - Новый нод - будущий мост между двумя кусками 2. Выделяем новый нод, передвигаем его к верху лестницы (Как показано было в ранних корректировках), затем выделяем самый ближний к нему нод и нажимаем на кнопку (+), итог: Рис. 34 - Теперь соединены 2 куска между собой Правда в игре это будет выглядеть не очень хорошо, если НПС или мутант полезет по лестнице, но допускать разъединения сетки нельзя, по этому выбора нет. Так же можно перетащить нод-"мост" на центр лестницы и повернуть его (Через обычный инструмент поворота на панели инструментов): Рис. 35 - Повернутый нод Скорее всего это немного украсит перемещение НПС по лестнице, но на практике не проверял. Ну вот, вроде и все! После всех правок, АИ-сетка должна быть отточена до мелочей, не иметь глюков и ошибок, нпс и мутанты будут бродить везде где положено, ну и прочие хорошие вещи. Кстати, учитывайте: АИ-Сетка не должна иметь разрывов (Например аи-сетка в здании не соединена с аи-сеткой на террейне) - будут вылеты xrAI. Между ними обязательно должен быть хотя бы один нод, соединяющий два куска. Можно билдить аи-сетку, компилировать. 4. Исправление ошибок при компиляции Момент с компиляцией я упущу, пусть это будет описано в статье про подключение уровней. Последним шагом рассмотрим ошибки, которые могут возникнуть, если что-то все-таки проглядели и не исправили. Напомню, что лучше всего будет после сборки аи-сетки проверять ее на наличие ошибок, благо xrAI (Ну или аивраппер) позволяет это делать. Если Вам написали AI-map is valid!, то могу поздравить - Ваша аи-карта готова для дальнейших действий, если же Вам написали ошибку, то: При получении ошибки вида (Скажу честно, другие ошибки мне не попадались, по этому пишу только о ней) Node 13705[-210.000000][36.516769][-151.899963] cannot be reached from the node 794[-255.500000][32.622856][-83.999969] говорит нам о том, что все-таки Аи-Карта не цельная. То есть пропустили место, и на Аи-Карте есть "островок" который отделен от основной Например сетка в домике отделена от сетки на террейне. Надо присоединить. Благо координаты нам пишут, осталось только найти проблемное место и исправить. Я обычно исправляю так: ставлю на карту узкий предмет, типа торчащей вверх палки, трубы, знака, чтобы диаметр(ширина) объекта не превышала размер одного нода. Затем вытягиваю его высоко вверх, чтобы было видно издалека куда он переместился, прописываю ему координаты выданные мне в логе: -255,50; 32.62; -83,9 и жму Enter, объект перемещается на проблемное место. Если на месте, куда переместился объект, не видно ошибок, значит прописываю ему вторые координаты выданные логом: -210; 36.51; -161,8. Нахожу ошибку и удаляю. Так же подобную ошибку могут вызывать такие места, смотрите внимательнее: * Два нода в одном месте * Неправильное линкование нодов (Описывалось ранее в корректировках) Возможное решение генерации АИ-сетки на тяжелых уровнях со сложной геометрией, когда СДК вылетает. (от sneik): Необходимое условие: это наличие полностью готовой локации, уже скомпиленой на максимальном качестве желательно. 1) Разбираем ее в СДК формат конвертером, можно без ключа -with_lods. 2) Запускаем СДК и загружаем уровень, выделяем все объекты и вносим в список аи-мап, ставим нод(ы), отключаем отображение объектов (Скрываем через ПКМ в СДК 0.4 или нажимаем на глазик в 0.7), и пробуем с генерировать сетку в обычном режиме, а вдруг повезет! Если нет, то: 3) закрываем СДК и лезем в папку rawdata\objects\levels\название уровня 4) Открываем папку с кусками геометрии, нажимаем ПКМ и выбираем сортировка по размеру, все "тяжелые" объекты будут первыми по списку 5) Смотрим на первый объект, самый тяжелый, например локация_part0001, запоминаем номер 6) Открываем СДК и опять подгружаем уровень. Находим этот объект и удаляем его. (Желательно объект который удалили перетащить на рабочий стол в отдельную папку, потом они пригодятся и искать будет проще). 7) Опять создаем список для аи мап, но уже в нем не будет одного объекта, того что удалили. Пробуем опять с генерировать. Получилось - отлично! Нет: 8) Удаляем по списку следующий объект и повторяем всю операцию заново, и так до тех пор, пока СДК не сможет с генерировать основную сетку. Дальше делаем все то что описано в уроках этой темы. 9) Все, основная сетка готова, приступаем к изготовлению сетки на объекты которые были удалены. 10) С рабочего стола перетаскиваем папку с объектами которые были удалены, запускаем СДК открываем уровень и выбираем из нашей папки первый по списку объект и ставим его в любое место на локе, нажимаем энтер и выставляем координаты (Местоположение) и ротацию (поворот) на 0, объект встанет на свое место где он и был. 11) Опять делаем по урокам из этой темы, отрезаем под объектом лишние ноды. Выбираем этот объект и в носим его в список аи мап, только его одного, других не надо. Генерируем на этом объекте аи сетку, редактируем ее а потом линкуем с основной сеткой, точки соприкосновения должны быть! Если это здание то соединяем ноды на входе. Для того что бы соединять ноды надо внести в список дополнительный объект, обычно террейн, для этого надо нажать +\-. 12) Когда сетка будет готова для первого объекта его можно удалить, и ставить следующий, повторив выше описанную операцию. И так по списку ставим все объекты и делаем для них сетку. 13) В последний раз проверяем всю сетку, убедившись что все нормально, приступаем к билду. Лезем в вкладку Scene и выставляем максимальное качество. Лезем в вкладку Object потом нажимаем Object List и удаляем все что там есть, то есть все объекты на локации, вплоть до террейна, только надо оставить один объект, какую-нибудь маленькую железяку, кирпич, без разницы. 14) Билдим, естественно на локе должны стоять глоу и лайтс. Компилим как обычный уровень, это займет без геометрии всего несколько секунд, компилим аи-сетку. Все, файл level.ai готов! Кидаем его в паку с уровнем и опять разбираем его, но только теперь уже для спавна, то есть для заселения. Ставим точки графа свой спавн и компилим алл.спавн. Кидаем в геймдату и запускаем, смотрим что натворили! Все! Более подробное представление о организации Аи-Сетки, принципиальных ограничениях (От malandrinus) Ссылка на пост Рекомендации к генерации Аи-Сетки (От CuJIbBEP) Ссылка на пост Альтернатива методу, если автогенерация сетки заканчивается вылетом о нехватки памяти (От h0N0r) Создание нод с зажатой клавишей alt + регулировка их количества с помощью brush size (в свойствах сетки). Напоминает создание ландшафта в редакторе для HoMM Подгонка геометрии в 3d max под аи-ноды Ссылка на пост 12 7 13 GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
Desertir 202 Опубликовано 11 Февраля 2015 Поделиться Опубликовано 11 Февраля 2015 Я снова рекламирую свой пост про АИ-сетку, вдруг будет полезно (первый спойлер с фактами, остальное не совсем по теме). Добавлено HellRatz, 11 Февраля 2015 Спасибо, факты забрал. 1 ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
HellRatz 2 851 Опубликовано 14 Февраля 2015 Автор Поделиться Опубликовано 14 Февраля 2015 (изменено) На уникальность конечно не претендую, но новичкам думаю в самый раз, которые хотят разобраться в тонкостях работы с аи-картой. Изменено 14 Февраля 2015 пользователем Murarius Добавлено Murarius, 14 Февраля 2015 Спасибо! Уверен, твой труд оценят по достоинству! 1 GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
Lagos 688 Опубликовано 14 Февраля 2015 Поделиться Опубликовано 14 Февраля 2015 Добавить бы описание, при вылете на стадии компиляции(тот вылет, который не имеет лога). Я вылет не разбирал, может кто знает. Официальный сайт . Ссылка на комментарий
HellRatz 2 851 Опубликовано 14 Февраля 2015 Автор Поделиться Опубликовано 14 Февраля 2015 Добавить бы описание, при вылете на стадии компиляции(тот вылет, который не имеет лога). Мне пока не попадался такой. да и без лога думаю трудно будет понять что-то GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
BFG 7 582 Опубликовано 14 Февраля 2015 Поделиться Опубликовано 14 Февраля 2015 Напоминаю, в данной теме обсуждаем всё что связано с АИ-сеткой и сопутствующими ей составляющими. Никакого оффтопа и флуда. Такие посты будут удаляться Куратором темы сразу. "Кругом зомби.....у меня кончаются патроны...." Ссылка на комментарий
sneik 341 Опубликовано 14 Февраля 2015 Поделиться Опубликовано 14 Февраля 2015 @HellRatz, Посоветуй что делать! Локация ОЧЕНЬ большая, геометрии ОЧЕНЬ много, не могу с генерировать аи-сетку, вылет СДК по памяти. Комп не металлом! СДК 0.7 Ссылка на комментарий
Lagos 688 Опубликовано 14 Февраля 2015 Поделиться Опубликовано 14 Февраля 2015 @sneik, либо маловата система, либо ОЗУ. Можно сдк прогнать под 64(ну, вы меня поняли). Повысь файл подкачки, в редких случаях помогает. P.S.: каков же объем локации, что вылетает.. @HellRatz, нынче, под отладкой можно будет разобрать думаю(исх. имеются). Я такой вылет встречаю иногда, могу скинуть, и собственно, подумаем над решением. Официальный сайт . Ссылка на комментарий
HellRatz 2 851 Опубликовано 14 Февраля 2015 Автор Поделиться Опубликовано 14 Февраля 2015 Локация ОЧЕНЬ большая, геометрии ОЧЕНЬ много, не могу с генерировать аи-сетку, вылет СДК по памяти Выше все верно сказали, но еще, возможно, получается слишком много нодов - СДК не может обработать просто такое количество, ведь все-таки как Вы говорите огромная локация.. СДК от ПК обычно мало зависит (пример тому много объектов в rawdata - что слабый, что мощные ПК - грузит одинаково СДК). Можно узнать размер уровня? Я такой вылет встречаю иногда, могу скинуть, и собственно, подумаем над решением. Да, интересно было бы посмотреть, если что пиши. 1 GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
sneik 341 Опубликовано 15 Февраля 2015 Поделиться Опубликовано 15 Февраля 2015 Можно сдк прогнать под 64(ну, вы меня поняли)Это что значит? Как это сделать? Можно узнать размер уровня? Размер я не знаю но он практически совпадает с размером терейна локации Долина Теней команды СВ. Только у них там практически пусто а у меня сплошная техногенная лока, жд дорога, вокзал, заводы, фабрики, шахта, только подземелий 12, 4 из них полноценные многоуровневые лаборатории, болото с секретной базой типа как в ЧН на локе "болота", и.т.д. Много всего вообщем. Что интересно локу то я скомпилил на хайте, и траву тоже, комп тянет это, я же говорю что у меня не металлолом! А сетку не могу сгенерировать. Ссылка на комментарий
Lagos 688 Опубликовано 15 Февраля 2015 Поделиться Опубликовано 15 Февраля 2015 (изменено) @sneik, в сети есть исходники. Взять сдк, и собрать его под 64. Но, это работа не "совсем лёгкая". Начиная, что по-хорошему сдк надо отправить в студию, из борланда. А это дикий труд. Скорее всего у тебя выплыло ограничение по аи-нодам. Ну, 70%. Изменено 15 Февраля 2015 пользователем Lagos Официальный сайт . Ссылка на комментарий
sneik 341 Опубликовано 15 Февраля 2015 Поделиться Опубликовано 15 Февраля 2015 (изменено) С генерировал я аи-сетку, правда весьма необычным способом но результат отличный! Кстати помогли уроки с этого раздела. спасибо! Изменено 15 Февраля 2015 пользователем sneik Ссылка на комментарий
Lagos 688 Опубликовано 15 Февраля 2015 Поделиться Опубликовано 15 Февраля 2015 @sneik, было бы не плохо рассказать сообществу, чтобы люди не повторяли ошибок. Но это, как говорится, хозяин - барин. 1 Официальный сайт . Ссылка на комментарий
sneik 341 Опубликовано 15 Февраля 2015 Поделиться Опубликовано 15 Февраля 2015 @Lagos, А кто говорит об ошибке? У меня ни какой ошибки не было! Я для себя разработал методику генерирования аи-сетки на локацию на которую СДК не в состоянии обычным способом с генерировать, в силу своей ограниченности! Сейчас уже поздно, завтра напишу тутор по этой теме, если захочет автор темы то добавит в шапку. 4 Ссылка на комментарий
HellRatz 2 851 Опубликовано 16 Февраля 2015 Автор Поделиться Опубликовано 16 Февраля 2015 завтра напишу тутор по этой теме, если захочет автор темы то добавит в шапку. Конечно добавлю, думаю это многим будет полезно и интересно. GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
Это популярное сообщение. Malandrinus 615 Опубликовано 18 Февраля 2015 Это популярное сообщение. Поделиться Опубликовано 18 Февраля 2015 (изменено) Хочу добавить немного информации по организации AI сетки на уровне формата файла. Думаю, что это может дать представление о принципиальных ограничениях. - Сетка внутри файла представляет собой линейный массив из всех узлов. Они нумеруются от нуля. Самих узлов может быть теоретически 2 в степени 32, но реально намного меньше, а главное - размер сетки в плане диктуется ещё одним ограничением, которое будет понятно далее.- Положение отдельного узла задаётся двумя целыми числами: 16 бит для координаты Y по высоте и 24 бита на две упакованные координаты XZ в плане. Назовём эти числа NY и NXZ. Для перевода этих чисел в реальные геометрические координаты (X,Y,Z) в заголовке файла записаны следующие данные:Размер уровня (точнее сетки) по вертикали, назовём HYразмер элемента сетки по горизонтали (узел сетки квадратный), назовём DXZразмеры сетки уровня в виде бокса, заданного вектором двух вершин. Назовём их (X0,Y0,Z0) и (X1,Y1,Z1). При этом размер по вертикали HY всегда совпадает с размером, полученным из вычитания этих двух векторов Y1-Y0 (т.е. имеется избыточность данных). Размеры бокса в плане X1-X0 и Z1-Z0 должны быть кратны элементу ячейки в плане DXZ.Алгоритм перевода упакованных числе в координаты такой:По вертикали всегда имеем максимально возможное число уровней 65536 (два байта), и соответственно минимальный шаг по вертикали будетDY = HY / 65536Положение вертекса по вертикали будет соответственноY = Y0 + DY * NY или, что тоже самоеY0 + NY * HY / 65536Для получения координат по горизонтали надо распаковать 24 бита NXZ. Поступаем так:Сперва вычисляем количество вертексов по X и Z (точнее размер бокса в вертексах, самих вертексов может быть меньше):СX = (X1 - X0) / DXZСZ = (Z1 - Z0) / DXZТеперь как-бы принимаем, что все позиции вертексов в плане упорядочены в набор горизонтальных строк и пронумерованы сквозным образом примерно как показано на картинке: 24-х битное поле NXZ - это и есть номер сквозной нумерации. Для получения координат надо выделить номер строки NX и столбца NZ.NX - это по сути номер строки, соответственно:NX = результат целочисленного деления NXZ / CZ NZ - это позиция внутри строки и соответственно:NZ = остаток от деления NXZ / CZ Теперь сами координаты получаем просто:X = X0 + NX * DXZZ = Z0 + NZ * DXZТеперь что следует из такого алгоритма. Самое главное, что размеры сетки в плане "в ячейках" имеет ограничение, а именно:NX * NZ <= 16777216 (2 в степени 24)При этом не важно, насколько реально в плане уровень покрыт сеткой, важно именно расстояние между наиболее удалёнными точками сетки. Для примера, сетку уровня можно вписать в плане в квадрат 4096х4096 ячеек или в прямоугольник 8192х2048 или в прямоугольник 5592х3000 и т.д. Вот это и накладывает ограничения на максимальный размер уровня, а точнее той его части, что покрыта сеткой и соответственно доступна для неписей.Кто-нибудь может подсказать, можно ли при компиляции задавать размер ячейки? Обычно он 0.7. Соответственно, для такого размера ячейки и квадратной в плане области сетки максимальные геометрические размеры будут 4096*0.7 = 2867.2 игровых метра.К этому можно добавить, что вертексы в этом массиве отсортированы по возрастанию всех трёх координат для того, чтобы движок мог их искать бинарным поиском. Изменено 18 Февраля 2015 пользователем malandrinus 3 1 7 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
CuJIbBEP 540 Опубликовано 18 Февраля 2015 Поделиться Опубликовано 18 Февраля 2015 (изменено) говорит нам о том, что все-таки Аи-Карта не цельная. То есть пропустили место, и на Аи-Карте есть "островок" который отделен от основной Например сетка в домике отделена от сетки на террейне Зависит от случая, в работе над Вокзалом был островок, но к ошибке это не приводило... Единственное что - не стоит ставить на "острове" графпойнты, это приведёт к ошибке при компиляции level.graph... Манипуляции с аи-нодами по направлениям, в картинках на ЯДе, увы, хостинги изображений что-то глючат... Пожелания или советы: Есть три способа создания сетки: 1 - Сгенерировать и "забить", 2 - сгенерировать и отредактировать в ручную, 3 - использовать fake-объекты... В первом случае сетка делается быстро, но так получится что НПС (собаки, тушканы, кобаны и прочие мутанты) будут ходить по кустам, сидеть на них как вороны, а псевдогиганту будет весьма удобно разместиться на маленьком пеньке... И это будет забавно, но не серьёзно... 2 - Для редактирования в ручную потребуется много терпения и усидчивости, но оно того стоит... Во время правки вы сможете поправить летающие аи-ноды, где-то через большой но редкий кустарник проложите тропинку... А в каком-то месте можно самому проложить путь, где СДК сетку не проложил, но вам показалось что в этом месте вполне логично сделать дорожку... Да и во время этих манипуляций можно увидеть ошибки по геймплейной части (спавн объектам) и косяки по геометрии. 3 - Можно создать фейковые объекты, которые будут огибать lod`ы и сложные статические объекты по оси Y, но для этого надо иметь хотя бы начальные навыки моделирования в 3D-редакторах. Как пример возьмём этот перевёрнутый ЗИЛок: В 3D-редакторе мастерим фейковый объект, можно простейший примитив - просто прямоугольник: Но я предпочитаю делать более подробный фейк модели, позже поясню почему... Ну и смотрим в СДК, подгоняем простой фейк к ЗИЛку и генерируем сетку: Пробуем подробный фейк и видим результат (вид сверху): Может во втором случае мы выиграем совсем немного аи-нодов, но для НПС это очень важно... Подробная сетка влияет на мобильность всего населения Зоны, и максимально упрощённый её вариант рассчитываю как акт читерства, превращающих НПС в мишени в тире... Если выбрали второй вариант с созданием подробной сетки то будьте внимательны, не допускайте что бы НПС утопали в геометрии, проверяйте сложные места в СДК сразу по ходу работы... Как пример: Эту пару аи-нодов стоит удалить... Так же стоит подумать о крупных монстрах, таких как Псевдогигант, тут надо что-то делать, либо в гулаге его закрыть, либо сетку делать примитивной. В случае с lod`ами фокус с фейками не всегда панацея, я привёл пример в отношении объектов расположенных на ровной поверхности, с учётом что они не были как-то повёрнуты на карте в самом СДК, как если бы взять вагон и развернув его положить на насыпь или ещё на любую другую неровную поверхность... В этом случае изготовленный вами фейк не подойдёт, учитывайте это. Так же НПС не различают высот, если на стыке двух объектов (например дома и террейна) по оси Y (по высоте) сетка допускает переход, то мутанты вас настигнут даже на крыше девятиэтажки, не сомневайтесь... Изменено 19 Февраля 2015 пользователем CuJIbBEP 1 1 1 Ссылка на комментарий
Сталкер Лом 356 Опубликовано 18 Февраля 2015 Поделиться Опубликовано 18 Февраля 2015 (изменено) malandrinus, вы нас, батюшка, спасли и развеяли наши сомнения - я локу планирую 2,2км на 2,2 км и всё сомневался, хватит ли АИ-сетки. Благодарю! Предлагаю ссылку на пост № 16 закрепить в шапке, ибо информация очень полезна, но может потеряться в теме. Изменено 18 Февраля 2015 пользователем Сталкер Лом Работы на Artstation - https://www.artstation.com/artist/stalker_lom Ссылка на комментарий
UnLoaded 313 Опубликовано 18 Февраля 2015 Поделиться Опубликовано 18 Февраля 2015 (изменено) К статье @Malandrinus: т.е. возможно создать и покрыть AI-сеткой локацию в 262144x64 ячейки, или 183500x44 игровых метра ? Изменено 18 Февраля 2015 пользователем UnLoaded Ссылка на комментарий
h0N0r 325 Опубликовано 18 Февраля 2015 Поделиться Опубликовано 18 Февраля 2015 Дополню, что присутствует баг (возможно только визуальный, в любой версии сдк), когда после создании сетки - некоторые ноды начинают постепенно (после 2-го сохранения уровня, и дальше - больше) утопать в геометрии. Будто при сохранении, отдельные ноды принудительно сглаживаются. http://funkyimg.com/view/Ue8U- Сетка только создана. http://funkyimg.com/view/Ue8V- Сетка (не изменялась, как и сам уровень) после 2-го сохранения. Альтернатива методу, если автогенерация сетки заканчивается вылетом о нехватки памяти. Создание нод с зажатой клавишей alt + регулировка их количества с помощью brush size (в свойствах сетки). Напоминает создание ландшафта в редакторе для HoMM 1 1 2 https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти