GameDev: разработка игр
7.64K subscribers
932 photos
203 videos
1 file
1.34K links
Всё про геймдев для девелоперов, художников, левел- и геймдизайнеров, сценаристов

Разместить рекламу: @tproger_sales_bot

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
Download Telegram
Как GPU Work Graphs делят поверхности Безье без трещин

Аппаратная тесселяция задаёт плотность сетки всему участку: один изгиб заставляет GPU строить лишние треугольники и на плоских местах.

Метод AMD превращает разбиение в граф задач GPU. Плоский участок выводится двумя треугольниками, сложный делится на четыре. Координаты восстанавливаются так, чтобы границы соседних участков совпадали побитно, а стыки разной детализации закрывают дополнительными треугольниками.

Один запуск с CPU обходится без ручной синхронизации и управления буферами между уровнями. При сопоставимом качестве треугольников получается заметно меньше. Схема графа задач и результаты тестов
❤1
Как теория групп помогает учесть повороты и отражения зданий

В Factorio здания на квадратной сетке требуют отдельных спрайтов для поворотов и отражений. Все восемь преобразований квадрата образуют диэдральную группу D4, а число уникальных вариантов зависит от симметрии объекта.

Проверять нужно не только контур, но и входы с выходами: диагональная симметрия постройки из мода заставила разработчика переписать зеркальное копирование. Разбор десяти типов симметрии поможет заранее собрать нужные спрайты.
❤3
Как нейросеть восстанавливает свет от объектов за пределами кадра

Экранные методы глобального освещения быстры, но не видят геометрию вне камеры. В подходе AMD карты отражений строятся со стороны каждого источника света. Их тексели становятся виртуальными источниками непрямого света, поэтому модель получает сведения об объектах за границей кадра.

К экранным буферам добавляют шумную оценку одного отражения на пиксель. Модуль внимания связывает геометрию пикселя с данными о свете, а отдельные декодеры восстанавливают рассеянную и зеркальную составляющие непрямого освещения.

Модель из технического разбора AMD содержит 2,19 млн параметров и без оптимизации, в FP32 PyTorch, обрабатывает кадр 512×512 за 45,56 мс на MI250. Для разработчиков рендеринга это ориентир для экспериментов с входными данными, но пока не готовый способ получить кадровую частоту реального времени.
❤3👎1
Как разделить управление меню и персонажем в Unity Input System

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

Для локального мультиплеера PlayerInput создаёт отдельный набор действий каждому игроку и динамически связывает устройства. Отдельный менеджер переназначения держит активной только одну операцию и временно отключает обработчики, поэтому два окна настройки не перехватывают одну кнопку.

Архитектура ввода Mega Cat Studios дополняет эту схему центральным менеджером: он переключает карты действий, подписывается на события и обрабатывает смену устройств. Такой фундамент упрощает добавление новых меню, схем управления и локальных игроков без каскада проверок по всему коду.
❤4
Как собрать toon-шейдер для VR в Unity URP

В Shmackle VR базовые Unlit-шейдеры давали плоскую картинку и нестабильные 70 FPS на Quest 2. Автор собрал систему из трёх частей: ступенчатого света, экранных контуров и краевого освещения, которое отделяет силуэт от фона.

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

В проекте автора частота закрепилась на 90 FPS, вызовы отрисовки сократились с 340+ до 180, а варианты шейдера с 12 до 4. Это ориентир, а не гарантия: архитектуру и код прохода контуров стоит проверять профилированием прямо на целевом шлеме.
❤1
Как сделать процедурные уровни разнообразнее, ограничивая случайность

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

Помогают несколько крупных решений на уровень: выбрать ограниченную палитру и набор форм, связать свойства объектов, а редкие особенности включать отдельными переключателями логики. Для большой карты те же решения можно распределять по областям, построенным через диаграмму Вороного или рекурсивное деление, и смешивать на границах.

В интерактивных примерах генератора видно, как ограничения создают заметные варианты без добавления нового контента. Иногда генератору действительно полезно дать меньше свободы.
❤2
Как собрать патрулирование, погоню и атаку врага в Godot 4

Вместо одного контроллера с каскадом условий поведение 3D-врага делится на состояния: ожидание, патруль, погоню, атаку и реакцию на попадание. Каждое состояние выполняет свою задачу и само решает, когда передать управление следующему.

В основе врага находится CharacterBody3D. NavigationAgent3D ведёт его к точкам патруля или игроку в обход препятствий, а две области Area3D отдельно замечают цель и определяют дистанцию атаки. Случайная длительность ожидания не даёт группе противников начать движение синхронно.

Разбор 3D-врага в Godot 4 показывает структуру сцены и код состояний. Перед запуском нужно добавить в уровень NavigationRegion3D и запечь навигационную сетку, иначе враг не сдвинется с места.
❤2
Как связать движение и направленные анимации в Godot 4

В 2D-персонаже мало умножить вектор ввода на скорость: после остановки он должен смотреть туда же, куда шёл, а при движении по диагонали выбирать подходящий спрайт. В Godot 4 это можно собрать через CharacterBody2D и AnimationTree без отдельных условий для каждого направления.

GDScript получает направление через Input.get_vector(), задаёт скорость для move_and_slide(), а анимациями управляют два BlendSpace2D внутри машины состояний. Один отвечает за покой, второй за ходьбу. Компоненты вектора округляются до −1, 0 или 1, а позиция смешивания обновляется только при ненулевом вводе. Поэтому после отпускания клавиш сохраняется последнее направление взгляда.

Практический разбор настройки показывает координаты для направленных анимаций и переключение между покоем и ходьбой через travel().
❤1
Как AMD уменьшает мерцание нейросетевого глобального освещения

Одношаговая диффузионная модель восстанавливает непрямой свет по данным о геометрии, материалах и освещении за один проход.

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

Схема метода AMD показывает замену обычного декодера временным. На тестовых сценах подход лучше прежних методов сохранял геометрию и стабильность освещения. Замеров времени кадра и готовой интеграции в Unity, Unreal Engine или Godot пока нет.
❤1
Как озвучить пролетающие машины в Defold без десятков звуков

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

Громкость считают по расстоянию с квадратичным затуханием, панораму — по горизонтальному смещению. Для боковой координаты берут локальную позицию объекта, чтобы тряска камеры не заставляла звук колебаться каждый кадр.

Микшер раз в кадр оставляет три источника: сначала видимые, затем ближайшие. В практическом разборе есть функции для высоты тона, громкости и панорамы, схема управления звуками и стартовые параметры, которые можно перенести в другой движок.
❤1
Как масштабировать Unity-проект: модули кода и проверки ассетов

После прототипа случайные связи между системами и крупные сцены мешают команде работать параллельно.

В разборе Mega Cat Studios Assembly Definitions группируют C#-код и явно задают зависимости. В Backyard Baseball ввод и игровая логика находятся в разных DLL, поэтому управление можно переписать без риска сломать физику персонажей или ИИ. Небольшие сцены и вложенные префабы снижают риск конфликтов между правками художников и дизайнеров.

AssetPostprocessor автоматически применяет правила импорта, а OnValidate сообщает об отсутствующих ссылках в редакторе до сборки. Для растущего Unity-проекта ориентир простой: после прототипа разделить код на модули, сцены на части и автоматизировать повторяемые проверки ассетов.