GameDev HACK
91 subscribers
29 photos
14 videos
6 files
100 links
HACK — Helpful Advice, Code & Knowledge

Blog by a developer sharing advice and coding tips to help you create better games.


Уютный бложик в виде записок разработчика @AnikoV. Полезные советы, код и знания.
Download Telegram
🎮 Ранее я уже упоминал интересный блог Глена Фидлера — основателя 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
👍2
Forwarded from C# Ready | Unity
Интерсепторы: ловим вызов метода до его выполнения — без сторонних библиотек!

Иногда нужно логировать вызовы, проверять аргументы или внедрять кросс-срезовые фичи в одном месте — вместо разбросанных 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 в комплекте!

➡ C# Ready | #практика
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
🫡3
Кратко об асинхронных механизмах
https://discussions.unity.com/t/introducing-asynchronous-programming-in-unity/1693772
🔥1
Несколько видео с выдержками из "чистого кода", которые, в том числе, визуально показывают их влияние на общую работу в команде.

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

Я не приверженец безукоризненно соблюдать всё, что написано в "чистом коде", но многие вещи оттуда реально работают и проверены временем и работой в разного размера командах. Важно расставлять приоритеты, что важно для каждой команды в данный момент времени и договариваться о общих правилах.
❤1
Когда-то около 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
О том как реализовать афро причёску вашему персонажу
О новом шейдере воды (выглядит супер реалистично)
О шейдере с процедурным эффектом гало для неба
О способе протестировать коллизии главного персонажа с террейном для ограничения передвижения
🔥3🤝1
GameDev HACK
Decision Making от чувака, который прочувствовал боль на Hitman Absolution и Batman Arkham Knight. slides: https://docs.google.com/presentation/d/13po2s6tJXeDm0TqFsu5l6q_QzTck9f1P/edit#slide=id.p1 https://www.youtube.com/watch?v=5ZXfDFb4dzc #ai #gameai…
Хочу Вам поподробнее рассказать про разработчика Бобби из предыдущего поста. Бобби многое повидал: занимался 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.
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Алгоритм Грэхема — алгоритм построения выпуклой оболочки в двумерном пространстве. В этом алгоритме задача о выпуклой оболочке решается с помощью стека, сформированного из точек-кандидатов. Все точки входного множества заносятся в стек, а потом точки, не являющиеся вершинами выпуклой оболочки, со временем удаляются из него. По завершении работы алгоритма в стеке остаются только вершины оболочки в порядке их обхода против часовой стрелки.
🔥4🤔1
Вы когда Unity запускаете на исполнение, GameView ставьте на конкретное разрешение, а то кто его знает, сколько пикселей будет, когда вы ставите на Aspect. Часто бывает так что GameView с FullHD достаточно по визуалу и по производительности сильно лучше.
🤝3
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1🤝1
best practices for character navigation
architecting for ААА performance and robustness


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

#AI #navigation
🤝2