GameDev HACK


Channel's geo and language: Russia, Russian
Category: Edutainment


HACK — Helpful Advice, Code & Knowledge
Blog by a developer sharing advice and coding tips to help you create better games.

Уютный бложик в виде записок разработчика @AnikoV. Полезные советы, код и знания.

Related channels

Channel's geo and language
Russia, Russian
Category
Edutainment
Statistics
Posts filter


Наткнулся на мощный доклад с AI and Games Conference от Пьеро (CEO Studio Talico). Ребята делают то, о чем многие мечтали: переносят полностью автономных ИИ-персонажей прямо на наши компьютеры и смартфоны.

Помните знаменитый эксперимент Стэнфорда из 2023 года, где 25 нейросетевых жителей деревни сами планировали день, сплетничали и даже организовывали вечеринки? Проблема была в том, что это стоило авторам $1000 в день на API от OpenAI. В играх такое использовать нереально.

Пьеро и его команда это исправили. Они создали прототип GARP, где боты ведут себя так же реалистично, но работают локально.

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

https://www.youtube.com/watch?v=Rt_f9XXYJyc










best practices for character navigation
architecting for ААА performance and robustness


Неплохой обзорный доклад лучших практик для навигации персонажей с GDC 2026 от Tech lead, Havok Navigation Ben Sunshine-Hill

#AI #navigation




Procedural Grass в Ghost of Tsushima

Здесь трава — это не набор расставленных мешей. По сути это GPU-driven procedural pipeline, который генерирует, фильтрует и рендерит растительность почти полностью на стороне GPU.

Цели у системы довольно практичные:

• минимальная нагрузка на CPU
• масштабируемость для большого open world
• высокая визуальная плотность
• правдоподобное поведение на ветру

😡Procedural placement

Растительность не хранится как тысячи объектов сцены. Вместо этого на поверхности генерируются seed points — компактные записи, описывающие будущую траву. В них обычно лежат:

• тип растения
• вариация формы
• плотность
• параметры анимации

Распределение сидов учитывает особенности поверхности:

• угол наклона (slope)
• высоту
• тип материала
• контекст окружения (дороги, тропинки и т.п.)

За счёт этого данных хранится немного, а плотность растительности можно менять динамически.

⚡️ GPU-driven pipeline

CPU здесь в основном задаёт правила. Основная работа происходит на GPU.

Упрощённо пайплайн выглядит так:

seed data → visibility pass → LOD selection → instance buffer → indirect draw

Используются:

• compute shaders для подготовки instance buffer
• GPU frustum и distance culling
• indirect draw calls

CPU не управляет миллионами объектов — он лишь передаёт исходные данные и параметры.

---

🌾 LOD управляет не только геометрией

LOD здесь работает не просто как «меньше полигонов дальше от камеры».

Меняется и геометрия, и плотность растительности:

• рядом с камерой — полноценные blades
• на средней дистанции — grass cards
• вдали — impostor-поля

Так удаётся сохранить ощущение плотного травяного покрытия без перегрузки GPU.

---

🌬 Система ветра

Фирменный “Wind of Tsushima” — важная часть визуального стиля игры.

Для движения травы используется vector field. Он задаёт направление и силу ветра в пространстве.

Поверх этого комбинируются:

• крупные порывы ветра
• мелкие высокочастотные колебания
• локальная деформация от персонажа

Реакция травы задаётся кривыми (curve parameters), поэтому движение выглядит естественно и не синхронно.

---

⚙️ Оптимизации

Несколько вещей, которые делают систему дешёвой:

• секторный procedural culling
• очень компактные instance-данные
• многоступенчатые GPU-буферы

pipeline буферов выглядит примерно так:

visibility → LOD → final draw buffer

В результате одна травинка описывается буквально несколькими байтами данных.

---

🧩 Почему эта система интересна

Ghost of Tsushima хорошо показывает современный подход к растительности:

• data-driven
• GPU-centric
• процедурная генерация
• масштабируемость для open worlds

Трава здесь — не просто декор. Это часть динамической системы окружения, которая реагирует на ветер, камеру и игрока.

---

🎥 Разбор от разработчиков:
https://www.youtube.com/watch?v=Ibe1JBF5i5Y


Вы когда Unity запускаете на исполнение, GameView ставьте на конкретное разрешение, а то кто его знает, сколько пикселей будет, когда вы ставите на Aspect. Часто бывает так что GameView с FullHD достаточно по визуалу и по производительности сильно лучше.


Video is unavailable for watching
Show in Telegram
Алгоритм Грэхема — алгоритм построения выпуклой оболочки в двумерном пространстве. В этом алгоритме задача о выпуклой оболочке решается с помощью стека, сформированного из точек-кандидатов. Все точки входного множества заносятся в стек, а потом точки, не являющиеся вершинами выпуклой оболочки, со временем удаляются из него. По завершении работы алгоритма в стеке остаются только вершины оболочки в порядке их обхода против часовой стрелки.


Хочу Вам поподробнее рассказать про разработчика Бобби из предыдущего поста. Бобби многое повидал: занимался AI ещё в 2008 году, когда это ещё не было мейнстримом, а я ещё в школу под стол ходил.

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

Decision Making

slides: https://docs.google.com/presentation/d/13po2s6tJXeDm0TqFsu5l6q_QzTck9f1P

https://www.youtube.com/watch?v=5ZXfDFb4dzc

Game AI Basics
slides: https://docs.google.com/presentation/d/1nYTzpkAomu2FWro3rytWbxJnCayY5erd/

https://www.youtube.com/watch?v=G5A0-_4dFLg

Animation Programming Basics

https://www.youtube.com/watch?v=Jkv0pbp0ckQ

Animation Graphs
https://www.youtube.com/watch?v=R-T3Mk5oDHI

Entity / Object models
pt1 https://www.youtube.com/watch?v=jjEsB611kxs
pt2 https://www.youtube.com/watch?v=fuiNOWEUnJ8

Также разработчик Бобби время зря не терял:
- написал и выложил в open source свой движок для прототипирования https://www.esotericaengine.com/ (в нём, кстати внутри использованы по сути все концепции из докладов)

- а также ведёт свой бложик в твиттере https://x.com/Bobby_Anguelov и на своём сайте https://takinginitiative.net/

а, ну и на сдачу работает в Valve на данный момент, а до этого в IO Interactive, Ubisoft и WB Games.


Когда-то около 8 лет назад я пристально следил за блогом разработки компании CampoSanto - разработчиков прекрасной Firewatch . По их проекту было много интересных докладов на GDC. Там явно собралась в то время очень талантливая команда из около 10 человек.

- Аниматор James Benson (youtube, x.com), который делал также анимации и для серии игр Ori.

- Matthew Wilde - vfx разработчик (https://x.com/skilful) уже автор шейдеров для воды в CS2.

- Paolo Surrichio - графический программист http://www.paolosurricchio.com - теперь уже работает в Respawn Entertainment

и многие другие были очень талантливые разработчики. В какой-то момент студия начала новый проект In The Valley of Gods, но студию купила Valve - проект был отложен и многие из той команды сейчас работают там над текущими проектами компании.

Мне было и радостно за ребят и грустно от того что дев блог CampoSanto закончился.
https://blog.camposanto.com/

А самыми интересными для меня постами в то время были:
Про GDC доклад об арте Firewatch
О том как реализовать афро причёску вашему персонажу
О новом шейдере воды (выглядит супер реалистично)
О шейдере с процедурным эффектом гало для неба
О способе протестировать коллизии главного персонажа с террейном для ограничения передвижения


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

Мне кажется, это всё про сокращение "времени координации" при обсуждениях и чтении кода и сокращение размера изменений в PR/MR.

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




Forward from: Hipnc Club
А теперь про Gamedev. На сегодняшнем стриме Алексей Калинин покажет, как создавались пропсы для игры Populus Run. Будет много процедурного моделинга, Houdini Engine, Unity3D, а заодно обсудим плюсы и минусы использования Гудини в инди-разработке. Приходите!
Начало, как всегда, в 22:00 по Московскому времени.

https://www.youtube.com/watch?v=MLD7XSjHm8Y


Forward from: C# Ready | Unity
Интерсепторы: ловим вызов метода до его выполнения — без сторонних библиотек!

Иногда нужно логировать вызовы, проверять аргументы или внедрять кросс-срезовые фичи в одном месте — вместо разбросанных Console.WriteLine по всему коду.

Подключаем нужные пространства имён и объявляем универсальный интерсептор на основе DispatchProxy:
using System;
using System.Reflection;

public class LoggingInterceptor : 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();
((LoggingInterceptor)proxy).Target = real;

// Все вызовы пойдут через интерсептор
proxy.DoWork();

🔥 Получаем логирование каждого вызова без сторонних AOP-библиотек — только .NET Core в комплекте!

➡ C# Ready | #практика


🎮 Ранее я уже упоминал интересный блог Глена Фидлера — основателя NetworkNext и эксперта по мультиплееру
(тот пост — тык).

У него есть легендарная статья о реализации игрового цикла с разной частотой обновления логики и рендера

👉 Fix Your Timestep!

Но сегодня — не о ней 😉
Я наткнулся на отличное продолжение этой темы и хочу поделиться ею с вами:

👉 Upgrade Your Timestep!

она развивает идеи Фидлера и добавляет несколько практичных апгрейдов.

🧠 хранить время в u64 (uint64) (наносекундах), а не в double — потому что при долгой работе float и double теряют точность, и симуляция со временем начинает «плыть»;

🛠 рассмотреть проблему времени в шейдерах, которые используют float, — автор ссылается на решение Джонатана Блоу (автор Braid, The Witness (очень советую, кстати, оба эти проекта - покажите их детям) ) и предлагает своё возможное улучшение;

🐌внедрить timescale, который позволяет ускорять или замедлять течение времени без нарушения детерминизма;

⏱️ добавить таймеры, работающие на этой же временной системе — удобно для событий вроде задержек, подсказок и внутриигровых таймингов.




Старое видео о том, как игры используют обратную связь с игроком (feedback loops): структуры вознаграждений в играх, которые могут усиливать или балансировать победителей и проигравших.

На примере Pyre от SupergiantGames

https://www.youtube.com/watch?v=H4kbJObhcHw


Мы представляем новую модель контакта, называемую Offset Geometric Contact (OGC), для гарантированного моделирования объектов с минимальными вычислительными затратами без проникновения. Наш метод основан на построении объемной формы путем смещения каждой грани вдоль ее нормального направления, что обеспечивает ортогональные силы контакта и, таким образом, позволяет получить большой радиус контакта без артефактов.

https://graphics.cs.utah.edu/research/projects/ogc/

https://www.youtube.com/watch?v=7NF3CdXkm68

20 last posts shown.