This media is not supported in your browser
VIEW IN TELEGRAM
На GDC 2022 Ben Sunshine-Hill (Havok Navigation) выступил с интересным докладом «Down with Nav Meshes» и предложил способы использования coridor maps для навигации.
🔥 Мотивация:
- navmesh не так хорошо работает с динамическим окружением
- navmesh не масштабируется под разных NPC
- navmesh требует кучу ручной поддержки
🆕 Что вместо?
- Corridor Maps — не поверхности, а графы переходов между областями
- Определяет границу на любой точки поверхности с помощью Срединной оси
- Разделяет всю площадь навигации на монотонные выпуклые формы на основе того какая граница является ближайшей к точке на поверхности
- Если сложить все оружности с центрами на границах полученных форм, то мы получим полную навигационную поверхность (то есть это альтернативный способ описать навигационную поверхность)
- Позволяет дешево строить пути с учётом радиуса агентов, потому что каждая точка на графе имеет информацию о расстоянии до ближайшей границы
❌ Минусы
- сложнее генерация
- перестройка всей AI-архитектуры
- не содержит данных о зонах
- плохо работает с многоуровневыми средами - приходится генерировать для каждого уровня отдельно и мёржить результаты
✅ Плюсы
- повсеместное использование дополнительной информации о дистанции до границ (спавн, построение путей, геймплейные механики, steering, avoiding, запросы о видимости)
- универсальные навигационные данные — одна система для всех размеров NPC
📌 Ссылки:
https://webspace.science.uu.nl/~gerae101/pdf/corridor.pdf
https://webspace.science.uu.nl/~gerae101/UU_crowd_simulation_publications_ecm.html
https://github.com/alexshafranov/corridormap
#gamedev #gameai #AI #pathfinding #Havok #gdc2022 #gdc #programming
- navmesh не так хорошо работает с динамическим окружением
- navmesh не масштабируется под разных NPC
- navmesh требует кучу ручной поддержки
- Corridor Maps — не поверхности, а графы переходов между областями
- Определяет границу на любой точки поверхности с помощью Срединной оси
- Разделяет всю площадь навигации на монотонные выпуклые формы на основе того какая граница является ближайшей к точке на поверхности
- Если сложить все оружности с центрами на границах полученных форм, то мы получим полную навигационную поверхность (то есть это альтернативный способ описать навигационную поверхность)
- Позволяет дешево строить пути с учётом радиуса агентов, потому что каждая точка на графе имеет информацию о расстоянии до ближайшей границы
❌ Минусы
- сложнее генерация
- перестройка всей AI-архитектуры
- не содержит данных о зонах
- плохо работает с многоуровневыми средами - приходится генерировать для каждого уровня отдельно и мёржить результаты
✅ Плюсы
- повсеместное использование дополнительной информации о дистанции до границ (спавн, построение путей, геймплейные механики, steering, avoiding, запросы о видимости)
- универсальные навигационные данные — одна система для всех размеров NPC
https://webspace.science.uu.nl/~gerae101/pdf/corridor.pdf
https://webspace.science.uu.nl/~gerae101/UU_crowd_simulation_publications_ecm.html
https://github.com/alexshafranov/corridormap
#gamedev #gameai #AI #pathfinding #Havok #gdc2022 #gdc #programming
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤2
Мне кажется это один из самых оптимальных на сегодняшний день подходов для дизайна архитектуры проектов. Не важно какой DI, не важно какой ECS. Их смесь и правильное разделение модулей и их зависимостей asmdef-ами даёт очень многое.
Forwarded from Everyday Unity
How to Use Dependency Injection with ECS
A new post on my blog.
I’ve seen this question come up quite often in ECS discussions, so I decided to share how I typically integrate Dependency Injection with ECS — complete with the simplest working example on GitHub. To me, such a setup always feels more convenient and more efficient. But it doesn't mean it is the only or the right way to work with it. If you prefer the Entities approach, or a manual setup of dependencies via the inspector in Morpeh, then that is also okay.
https://gamedev.center/how-to-use-dependency-injection-with-ecs-for-scalable-game-development/
Repo: https://github.com/AlexMerzlikin/ECS-DI-Sample
#ecs #di
A new post on my blog.
I’ve seen this question come up quite often in ECS discussions, so I decided to share how I typically integrate Dependency Injection with ECS — complete with the simplest working example on GitHub. To me, such a setup always feels more convenient and more efficient. But it doesn't mean it is the only or the right way to work with it. If you prefer the Entities approach, or a manual setup of dependencies via the inspector in Morpeh, then that is also okay.
https://gamedev.center/how-to-use-dependency-injection-with-ecs-for-scalable-game-development/
Repo: https://github.com/AlexMerzlikin/ECS-DI-Sample
#ecs #di
gamedev.center
How to Use Dependency Injection with ECS for Scalable Game Development
Using Dependency Injection with ECS simplifies system management and improves scalability. A DI container like VContainer automates system setup, reducing boilerplate. In this post, I share my experience, demonstrate DI integration with ECS, and provide a…
👍2🔥1
Набор рекомендаций для сражения с долгим Domain Reload в Unity. Всё ради быстрых итераций. Всё как обычно - померять, распознать бутылочные горлышки, пофиксить.
https://johnaustin.io/articles/2020/domain-reloads-in-unity
https://johnaustin.io/articles/2020/domain-reloads-in-unity
John Austin
Fast Domain Reloads in Unity — John Austin
What are the main components of the Domain Reload, and how can we achieve those golden 5 second iteration times?
👍3❤2🔥1
Конференция по искусственному интеллекту в играх возвращается и будет проведена в ноябре 2025 https://www.aiandgamesconference.com/
AI and Games Conference
AI and Games Conference 2026 | London
Nov 10–11, 2026 · Central London 3rd Edition Europe's leading Game AI Conference Two days of in-depth talks on the AI driving today's biggest games. Built by the community of Game AI developers, researchers and enthusiasts. Get tickets from £75 View agenda…
❤1
Оскар Стольберг рассказывает о тонкостях генерации островов с помощью коллапса волновой функции или редукции фон Неймана (алгоритмом, вдохновлённым идеями квантовой механики) [habr.com] и не только. Также Оскар автор проекта https://www.townscapergame.com/ , который можно погонять прямо онлайн в браузере без регистрации и смс и пощупать WFC в действии.
Ссылка на доклад https://www.youtube.com/watch?v=NpfoRAzfGDg
Ссылка на доклад https://www.youtube.com/watch?v=NpfoRAzfGDg
❤1
Forwarded from Unity: Всё, что вы не знали о разработке
Player Loop
Вместо MonoBehaviour на сцене можно использовать инжект в текущий луп. Для этого нужно понимать в какой именно мы хотим добавить вызов своего метода. Всего есть 8 групп:
Использовать проще всего с инжектом при инициализации, но в принципе можно вызывать этот код когда угодно, как и удалять свою систему из обработки:
#unity #playerloop
Вместо MonoBehaviour на сцене можно использовать инжект в текущий луп. Для этого нужно понимать в какой именно мы хотим добавить вызов своего метода. Всего есть 8 групп:
TimeUpdate = 0
Initialization = 1
EarlyUpdate = 2
FixedUpdate = 3
PreUpdate = 4
Update = 5
PreLateUpdate = 6
PostLateUpdate = 7
Использовать проще всего с инжектом при инициализации, но в принципе можно вызывать этот код когда угодно, как и удалять свою систему из обработки:
[RuntimeInitializeOnLoadMethod]
static void Inject() {
var loop = PlayerLoop.GetCurrentPlayerLoop();
var sys = new PlayerLoopSystem {
type = typeof(YourClassName),
updateDelegate = () => Debug.Log("Custom Update")
};
var index = 4; // PreUpdate (см список выше)
loop.subSystemList[index].subSystemList = loop.subSystemList[index].subSystemList.Append(sys).ToArray();
PlayerLoop.SetPlayerLoop(loop);
}
#unity #playerloop
2👍2🔥1👏1
Недавно наткнулся на доску в miro с дорожной картой развития Unity-разработчика.
Если вдруг Вы только-только начинаете или не знаете с чего начать, чтобы поковырять геймдев и хотите начать с Unity, то эта штука хотя бы даст Вам вектор "куда копать".
Таких карт действительно много в сети, если поковыряться, но тут, как мне кажется, соблюдён баланс между сложностью и понятностью.
Понятно, что тут нет многих глубоких вещей, но именно для старта или получения общего обзора - более чем.
Если вдруг Вы только-только начинаете или не знаете с чего начать, чтобы поковырять геймдев и хотите начать с Unity, то эта штука хотя бы даст Вам вектор "куда копать".
Таких карт действительно много в сети, если поковыряться, но тут, как мне кажется, соблюдён баланс между сложностью и понятностью.
Понятно, что тут нет многих глубоких вещей, но именно для старта или получения общего обзора - более чем.
🔥2
Мы представляем новую модель контакта, называемую Offset Geometric Contact (OGC), для гарантированного моделирования объектов с минимальными вычислительными затратами без проникновения. Наш метод основан на построении объемной формы путем смещения каждой грани вдоль ее нормального направления, что обеспечивает ортогональные силы контакта и, таким образом, позволяет получить большой радиус контакта без артефактов.
https://graphics.cs.utah.edu/research/projects/ogc/
https://www.youtube.com/watch?v=7NF3CdXkm68
YouTube
NVIDIA Just Solved The Hardest Problem in Physics Simulation!
❤️ Check out Lambda here and sign up for their GPU Cloud: https://lambda.ai/papers
Guide:
Rent one of their GPUs with over 16GB of VRAM
Open a terminal
Just get Ollama with this command - https://ollama.com/download/linux
Then run ollama run gpt-oss:120b…
Guide:
Rent one of their GPUs with over 16GB of VRAM
Open a terminal
Just get Ollama with this command - https://ollama.com/download/linux
Then run ollama run gpt-oss:120b…
🔥4
Старое видео о том, как игры используют обратную связь с игроком (feedback loops): структуры вознаграждений в играх, которые могут усиливать или балансировать победителей и проигравших.
На примере Pyre от SupergiantGames
https://www.youtube.com/watch?v=H4kbJObhcHw
На примере Pyre от SupergiantGames
https://www.youtube.com/watch?v=H4kbJObhcHw
🔥1
Forwarded from Блог Василия Скобелева
Объясняю диаграмму интенсивности на примере сайд-квеста Building Bridges из первого региона Ghost of Yotei. Приятного чтения!
#анализигр #нарративныйдизайн #левелдизайн #GhostofYotei
#анализигр #нарративныйдизайн #левелдизайн #GhostofYotei
Telegraph
Интенсивность и стори-биты
С точки зрения дизайна миссий очень полезно оценивать получившийся опыт с точки зрения интенсивности. Для этого сценарий игровой сессии делят на стори-биты (единицы сценария) и выставляют условную оценку интенсивности геймплея. Иногда это называют уровнем…
❤1
🎮 Ранее я уже упоминал интересный блог Глена Фидлера — основателя NetworkNext и эксперта по мультиплееру
(тот пост — тык).
У него есть легендарная статья о реализации игрового цикла с разной частотой обновления логики и рендера
👉 Fix Your Timestep!
Но сегодня — не о ней😉
Я наткнулся на отличное продолжение этой темы и хочу поделиться ею с вами:
👉 Upgrade Your Timestep!
она развивает идеи Фидлера и добавляет несколько практичных апгрейдов.
🧠 хранить время в u64 (uint64) (наносекундах), а не в double — потому что при долгой работе float и double теряют точность, и симуляция со временем начинает «плыть»;
🛠 рассмотреть проблему времени в шейдерах, которые используют float, — автор ссылается на решение Джонатана Блоу (автор Braid, The Witness (очень советую, кстати, оба эти проекта - покажите их детям) ) и предлагает своё возможное улучшение;
🐌 внедрить timescale, который позволяет ускорять или замедлять течение времени без нарушения детерминизма;
⏱️ добавить таймеры, работающие на этой же временной системе — удобно для событий вроде задержек, подсказок и внутриигровых таймингов.
(тот пост — тык).
У него есть легендарная статья о реализации игрового цикла с разной частотой обновления логики и рендера
Но сегодня — не о ней
Я наткнулся на отличное продолжение этой темы и хочу поделиться ею с вами:
она развивает идеи Фидлера и добавляет несколько практичных апгрейдов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
GameDev HACK
Network programming blog
https://gafferongames.com/categories/game-networking/
#network #gamedev
https://gafferongames.com/categories/game-networking/
#network #gamedev
👍2
Forwarded from C# Ready | Unity
Интерсепторы: ловим вызов метода до его выполнения — без сторонних библиотек!
Иногда нужно логировать вызовы, проверять аргументы или внедрять кросс-срезовые фичи в одном месте — вместо разбросанных
Подключаем нужные пространства имён и объявляем универсальный интерсептор на основе
Теперь создаём прокси для вашего сервиса и вызываем метод через интерсептор:
🔥 Получаем логирование каждого вызова без сторонних AOP-библиотек — только .NET Core в комплекте!
➡ C# Ready | #практика
Иногда нужно логировать вызовы, проверять аргументы или внедрять кросс-срезовые фичи в одном месте — вместо разбросанных
Console.WriteLine по всему коду.Подключаем нужные пространства имён и объявляем универсальный интерсептор на основе
DispatchProxy:using System;
using System.Reflection;
public class LoggingInterceptor<T> : DispatchProxy
{
public T Target { get; set; }
protected override object Invoke(MethodInfo method, object[] args)
{
Console.WriteLine($"➡️ Вызов метода: {method.Name}");
return method.Invoke(Target, args);
}
}
Теперь создаём прокси для вашего сервиса и вызываем метод через интерсептор:
// Предположим, есть интерфейс IMyService и класс MyService
IMyService real = new MyService();
var proxy = DispatchProxy.Create<IMyService, LoggingInterceptor<IMyService>>();
((LoggingInterceptor<IMyService>)proxy).Target = real;
// Все вызовы пойдут через интерсептор
proxy.DoWork();
🔥 Получаем логирование каждого вызова без сторонних AOP-библиотек — только .NET Core в комплекте!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Forwarded from Hipnc Club
А теперь про Gamedev. На сегодняшнем стриме Алексей Калинин покажет, как создавались пропсы для игры Populus Run. Будет много процедурного моделинга, Houdini Engine, Unity3D, а заодно обсудим плюсы и минусы использования Гудини в инди-разработке. Приходите!
Начало, как всегда, в 22:00 по Московскому времени.
https://www.youtube.com/watch?v=MLD7XSjHm8Y
Начало, как всегда, в 22:00 по Московскому времени.
https://www.youtube.com/watch?v=MLD7XSjHm8Y
YouTube
Стрим: Гудини для инди (Алексей Калинин)
Донаты: https://donatty.com/houdinirus
https://www.donationalerts.com/r/houdinirus
Поддержка канала:
Из России: https://boosty.to/houdini
Из других стран: https://www.patreon.com/hipnc
Телеграм-канал и чат: https://t.me/hipnc
Houdini FAQ: http://hipnc.club/houdini…
https://www.donationalerts.com/r/houdinirus
Поддержка канала:
Из России: https://boosty.to/houdini
Из других стран: https://www.patreon.com/hipnc
Телеграм-канал и чат: https://t.me/hipnc
Houdini FAQ: http://hipnc.club/houdini…
🫡3
Кратко об асинхронных механизмах
https://discussions.unity.com/t/introducing-asynchronous-programming-in-unity/1693772
https://discussions.unity.com/t/introducing-asynchronous-programming-in-unity/1693772
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Несколько видео с выдержками из "чистого кода", которые, в том числе, визуально показывают их влияние на общую работу в команде.
Мне кажется, это всё про сокращение "времени координации" при обсуждениях и чтении кода и сокращение размера изменений в PR/MR.
Я не приверженец безукоризненно соблюдать всё, что написано в "чистом коде", но многие вещи оттуда реально работают и проверены временем и работой в разного размера командах. Важно расставлять приоритеты, что важно для каждой команды в данный момент времени и договариваться о общих правилах.
Мне кажется, это всё про сокращение "времени координации" при обсуждениях и чтении кода и сокращение размера изменений в PR/MR.
Я не приверженец безукоризненно соблюдать всё, что написано в "чистом коде", но многие вещи оттуда реально работают и проверены временем и работой в разного размера командах. Важно расставлять приоритеты, что важно для каждой команды в данный момент времени и договариваться о общих правилах.
❤1