HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть I
Страницы (241): « Первая ... « 232 233 234 235 [236] 237 238 239 240 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг





https://webdocs.cs.ualberta.ca/~mmueller/ps/hpastar.pdf

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 219516

Старое сообщение 07-02-2024 11:02
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Итак товарищи, я финализировал свой авторский алгоритм поиска пути.
При его разработке я сделал целую кучу допущений и активно опирался на уже имеющееся у меня представление навигационной сетки.

Допущения были следующие:
1. В подавляющем большинстве случаев монстру не надо прокладывать кратчайший маршрут через полкарты. Обычно это или маршрут по прямой, или маршрут буквой Г, если враг успел укрыться за углом. Нахождение подобного маршрута может быть решено крайне быстро.
2. В некоторых случаях, например если мы хотим попасть в какую-то точку сквозь узкий проём, допустимо реверсивное построение маршрута, в случае если прямой путь зафейлился.
3. Лучше просто зафейлить построение маршрута, чем пытаться найти путь, который возможно вообще не существует. При этом мы не должны привязываться ни к каким магическим константам или радиусам, в которых этот путь ищется. Иными словами фейл проблемного пути должен завершиться так же быстро, как и поиск существующего.
4. Пусть маршрут будет не слишком коротким, главное чтобы он построился быстро.

Исходя из этого я разработал алгоритм, основанный на движении по заданному направлению, сходимости и отскоке от препятствий, с вариативностью. Суть алгоритма сводится к следующему:
Каждую итерацию мы выбираем ноду, согласно направлению между текущей и финальной. Из четырёх нод мы можем выбрать только три.
Первой будет выбрана самая предпочтительная, затем - менее предпочтительная, затем самая нежелательная. Таким образом на каждом шаге у нас может образоваться три ноды. Первая нода используется в поиске текущего пути, вторая и третья (если они выбраны) добавляются к уже пройденному пути (текущий путь + вторая нода) и (текущий путь + третья нода), которые помещаются в массив частичных путей. Изначально частичный путь состоит всего лишь из одной ноды - стартовой. Ну и в процессе построения первого пути достраиваются остальные частичные пути. Дальше начинается самое интересное:
Если самый первый путь успешно достроился, то функция завершает свою работу и возвращает этот самый первый путь. Если же нет, то функция в цикле пытается достроить остальные частичные пути (попутно порождая новые на каждой потенциальной развилке). Вы конечно можете задаться вопросом, что подобное порождение всё новых и новых частичных путей никогда не закончится и всё это зависнет в бесконечном цикле. Да, но нет. Ведь мы с момента построения самого первого частичного пути помечаем ноды, в которых мы уже побывали, как бы ограничивая пространство. Таким образом, путь ведущий в никуда уже заведомо отсечён чем-то вроде виртуальной секущей плоскости (в роли которой выступает сам наш путь, завершившийся фейлом). Из-за этой любопытной особенности у алгоритма есть сходимость - только один путь из всех закончится успехом, остальные упруться в препятствия. Зная эту особенность нам нет нужды проверять абсолютно все частичные пути - первый, достигший конечной точки и будет валидным маршрутом. Этот момент ценен в качестве оптимизации. т.к. потенциально алгоритм может наплодить до десятка тысяч незаконченных путей, но если уже самый первый путь достигнет финальной точки, то нам уже нет нужды их проверять - мы справились. Так же в коде присутствует специальный лукап, чтобы строящийся путь не упёрся в препятствие уже на следующем шаге, что потенциально может привести не то чтобы к быстрому фейлу, а к весьма замысловатой и нереалистичной траектории маршрута, которая будет похожа на слишком длинную змейку, которая огибает сама себя.
Эта же штука сглаживает обход препятствий и ускоряет поиск маршрута.
Однако для сложных маршрутов она наоборот сама по себе является проблемой. К примеру с этой включённой эвристикой невозможен проход сложного лабиринта, или поиск пути буквой U, когда финальная точка находится сзади начальной, а начальная - соответственно в нише, выход из которой противоположен направлению между стартовой и конечной точкой. Поэтому я сделал данную эвристику отключаемой со стороны пользователя. Таким образом есть флаг глубокого поиск пути, который используется для скриптовых сцен, например, если монстру надо прорваться сквозь всю карту. Если же он просто следует за врагом, то выставлять этот флаг не надо - время поиска значительно ускориться.

Теперь мне надо финализировать отладочный режим поиска пути, чтобы провести углублённое юнит-тестирование и по его окончании, я выложу разные интересные скриншоты и комментарии. Повторюсь, главное свойство моего алгоритма - это поиск, на который требуется не более 0.001 секунды (или меньше). Вне зависимости от кол-ва нод на карте.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 219519

Старое сообщение 08-02-2024 08:59
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



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

Надо будет уже у себя тогда поэкспериментировать.

Цитата:
Дядя Миша писал:
Вы конечно можете задаться вопросом, что подобное порождение всё новых и новых частичных путей никогда не закончится и всё это зависнет в бесконечном цикле. Да, но нет. Ведь мы с момента построения самого первого частичного пути помечаем ноды, в которых мы уже побывали, как бы ограничивая пространство. Таким образом, путь ведущий в никуда уже заведомо отсечён чем-то вроде виртуальной секущей плоскости (в роли которой выступает сам наш путь, завершившийся фейлом).


А если мы тут впервые?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 08-02-2024 в 09:15

Сообщить модератору | | IP: Записан
Сообщение: 219520

Старое сообщение 08-02-2024 09:14
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
А если мы тут впервые?

Цитата:
FiEctro писал:
Дата регистрации: Aug 2006



Добавлено 08-02-2024 в 13:53:

В режиме глубокого поиска мой алгоритм фейлит только в случае если пути действительно не существует. По крайней мере с обратной ситуацией я ещё не столкнулся. Но надо ещё на болотах рассчитать ноды для полноценного теста. Там их как раз 4.5 миллиона, вот и посмотрим.

Добавлено 08-02-2024 в 14:54:

Предварительные выводы:
1. Пока что подтверждается факт, что поиск со включённым режимом глубокого исследования никогда не фейлит.
2. В режиме глубокого исследования путь зачастую может выглядеть... странно. См аттач. В режиме быстрого поиска эвристика предотвращает появление подобных загогулин, но и вероятность фейла в случае сложного пути - кратно выше.
3. Производительность алгоритма прибита гвоздями к порядку следования нод и как следствие - к вектору направления поиска. Иными словами, поиск с севера на юг гораздо быстрее, чем поиск с востока на запад. Ну это к примеру, поскольку там целый ряд факторов. Заметным это становится тогда, когда мы выбираем сложный случай и сперва нацеливаем конечную точку в одну сторону (например на юго-запад), а потом на второй попытке целимся на северо-восток. Стартовая точка в обоих случаях остаётся идентичной.
И вот в одном случае у нас скорость работы может быть порядка 0.0005, а в другом - 0.27 секунды. Почему так происходит тоже понятно - алгоритм генерирует порядка десяти тысяч недостроенных путей и чем раньше он найдет правильный - тем быстрее завершится поиск. В первом случае валидный путь находится ближе к началу, во втором - ближе к концу, отсюда и такая чудовищная разница в скорости поиска. Однако всё вышесказанное относится только к предельным, максимально сложным случаям. Данные что я приводил выше не придуманы мной от балды, а получены на тестировании сталкеровской карты testers_mp_rostok.
Там, как вы знаете, по центру уровня стоит такой пятиэтажный недострой. Чем не лабиринт? И вот значит я тестировал выход с пятого этажа на один из краёв карты. И именно так и были получены эти значения. Впрочем подобный поиск пути в бою не нужен, только для скриптовых персонажей. Так что некритично. Важен сам факт, что по крайней мере пока доказать возможность фейла глубокого поиска мне не удалось, следовательно алгоритм работает правильно. В случае же типового поиска когда конечная и начальна точка лежат плюс-минус на одной плоскости (пусть даже и с препятствиями), поиск пути завершается примерно за 0.001 секунду, назависимо от направления поиска. Это глубокий. Обычный завершится ещё быстрее, хотя при таких значения это уже не имеет особого значения. Опять-таки сам факт, что поиск может сфейлить можно использовать для эмуляции умных и глупых монстров, например.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 219521

Старое сообщение 08-02-2024 11:54
-
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4423
Возраст: 34

Рейтинг



Цитата:
Дядя Миша писал:
2. В режиме глубокого исследования путь зачастую может выглядеть... странно. См аттач. В режиме быстрого поиска эвристика предотвращает появление подобных загогулин, но и вероятность фейла в случае сложного пути - кратно выше.

где аттач

Цитата:
Дядя Миша писал:
Первой будет выбрана самая предпочтительная, затем - менее предпочтительная, затем самая нежелательная.

Надо найти ноды у стенок и запретить им быть предпочтительными.

Сообщить модератору | | IP: Записан
Сообщение: 219523

Старое сообщение 08-02-2024 13:54
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Пардон, забыл прикрепить


Цитата:
Crystallize писал:
Надо найти ноды у стенок и запретить им быть предпочтительными.

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

Добавлено 08-02-2024 в 17:25:

А вообще, я подумаю, может соображу такую табличку-матрицу 4х4 и там вручную пропишу приоритеты поиска. Глядишь станет веселее.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 219525

Старое сообщение 08-02-2024 14:25
-
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4423
Возраст: 34

Рейтинг



Цитата:
Дядя Миша писал:
Пардон, забыл прикрепить

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

Отредактировано Crystallize 08-02-2024 в 14:46

Сообщить модератору | | IP: Записан
Сообщение: 219529

Старое сообщение 08-02-2024 14:43
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Странно, похоже на баг, А* не должен так работать.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 219531

Старое сообщение 08-02-2024 15:12
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
А* не должен так работать

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

Добавлено 08-02-2024 в 19:37:

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

Добавлено 08-02-2024 в 19:39:

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


__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 219533

Старое сообщение 08-02-2024 16:39
-
ZGreen
Житель форума

Дата регистрации: Sep 2007
Проживает: Красноярск
Сообщений: 294
Возраст: 36

Рейтинг



Подозрительно высокий фпс при таком количестве дипов, что это за компуктер?

Сообщить модератору | | IP: Записан
Сообщение: 219537

Старое сообщение 08-02-2024 16:46
+ За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



ZGreen
Так, а оригинальный сталкер разве меньше фпс даёт?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 219538

Старое сообщение 08-02-2024 16:52
- За что?
ZGreen
Житель форума

Дата регистрации: Sep 2007
Проживает: Красноярск
Сообщений: 294
Возраст: 36

Рейтинг



Да какая разница что там кто дает, предыдущие билды с таким дип сотку показывали.

Сообщить модератору | | IP: Записан
Сообщение: 219539

Старое сообщение 08-02-2024 16:54
+ За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Дядя Миша писал:
Так это и не A*
Я ведь целую простыню накатал выше, что алгоритм мой собственный.
Да, он иногда выделывает затейливые вензеля, но в целом они предиктабельные.


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

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 219540

Старое сообщение 08-02-2024 16:55
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
ZGreen писал:
Подозрительно высокий фпс при таком количестве дипов, что это за компуктер?

Да всё тот же Corei3-3Ghz, GTX650.

Это как раз небольшое кол-во дипов. Проблемы начинаются от трёх тысяч.

Цитата:
ZGreen писал:
предыдущие билды с таким дип сотку показывали

Формат уровней поменялся, оптимизация поддержки детайлов. Может поэтому.

Цитата:
FiEctro писал:
Интересно теперь проверить когда монстров будет ну хотя бы такое же количество как на картах в сталкере.

Проверим, но монстры не перестраивают свои пути каждый кадр.

Мне сейчас самое главное набросать рабочий прототип. А потом что-то изменить или улучшить можно без нарушения совместимости.

Добавлено 08-02-2024 в 23:33:

По новостям: я сейчас портирую на Xash вот эту игру. Как управлюсь - будет масштабное обновление.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 219541

Старое сообщение 08-02-2024 20:33
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг





https://twitter.com/turanszkij/stat...UiQDN4n_7A&s=19

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 22-02-2024 в 10:23

Сообщить модератору | | IP: Записан
Сообщение: 219687

Старое сообщение 22-02-2024 10:19
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 09:02. Новая тема    Ответить
Страницы (241): « Первая ... « 232 233 234 235 [236] 237 238 239 240 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть I
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024