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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
Как найти узкое место CPU или GPU в Unreal Engine 5.8

При 60 кадрах в секунду на кадр остаётся 16,6 мс, при 30 кадрах — 33,3 мс. Сначала выясните, какой бюджет превышен: CPU занят игровой логикой, Tick, ИИ и подготовкой физики, а GPU отвечает за геометрию, тени, освещение и постобработку. Оптимизация свободной стороны частоту кадров не поднимет.

Команда stat unit показывает время Frame, Game, Draw и GPU. Если упираетесь в графику, stat GPU разбивает затраты по проходам рендера. Unreal Insights помогает разобрать нагрузку на временной шкале по кадрам, включая CPU, GPU и память.

Схема профилирования в Unreal Engine 5.8 предлагает проверять сборку на целевом устройстве: найти лишний Tick или дорогой проход, изменить что-то одно и повторить замер. Так видно, какая правка действительно вернула миллисекунды кадра.
Как превратить Gaussian Splat в уровень для браузерного FPS

Gaussian Splat создаёт фотореалистичное окружение, но остаётся облаком пятен без поверхностей, коллизий и навигации. В демо на PlayCanvas скан превратили в браузерный FPS с физикой, освещением моделей и NPC.

splat-transform превращает сплат в воксели и строит меш для столкновений, а Recast создаёт по нему навигационную сетку. Для освещения персонажей автор запёк яркость окружения с шести направлений.

В разборе и открытом проекте есть скрипты, демо FPS и основа для своей сцены.
❤1
Как адаптировать собственный SRP к Unity 6.5

После обновления учебного конвейера рендеринга Custom SRP рендеринг перестаёт собираться: ImportBackbuffer теперь требует описание целевого буфера через RenderTargetInfo. В нём нужно передать размеры камеры, глубину 1, один образец сглаживания и формат текстуры либо кадрового буфера.

Миграция затрагивает и Render Graph. Unity больше не поддерживает отсечение списков отрисовщиков, поскольку синхронизация с системой отсечения обычно снижала производительность. Поэтому из параметров графа удаляется rendererListCulling, а из проходов неба и гизмо — принудительный запрет на их отсечение.

Разбор перехода на Unity 6.5 также показывает, какой код убрать после отключения Light Probe Proxy Volumes и устаревших настроек теней. Получается практический список правок для обновления собственного SRP.
Как выбрать хитбокс для bullet hell и отладить столкновения

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

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

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

Если CharacterBody проходит сквозь мир, а Area не замечает предмет, не начинайте со случайного переключения слоёв. Порядок диагностики начинается с Remote scene tree: проверьте, что оба объекта существуют, а CollisionShape включены, содержат форму и пересекаются.

Затем уточните, кто управляет движением. CharacterBody перемещает скрипт через move_and_slide() в физическом такте. RigidBody должен получать силы и импульсы от физического движка. Прямое изменение позиции может обойти ожидаемую обработку столкновений.

Только после этого проверяйте слои и маски: слой задаёт категорию объекта, маска определяет, какие категории он отслеживает. Для Area дополнительно нужны включённый monitoring и верно подключённый сигнал. Пример движения и прыжка проверен в Godot 4.7.2, но остальные сценарии столкновений автор не тестировал во время выполнения.
❤2
Как тетраэдральные оболочки разгружают BVH у анимированной растительности

В демо AMD 25 тысяч растений реагируют на ветер, а после выбора уровня детализации трассируется около 500 миллионов анимированных треугольников за кадр.

Вместо деформации плотной сетки метод меняет простую тетраэдральную оболочку. Геометрия и BVH остаются статичными, а лучи переводятся в исходные координаты. Затраты зависят от сложности оболочки, а не от числа треугольников.

Тетраэдральные оболочки сократили память BVH с 80 до 1,7 ГБ, а обновление за кадр: с 300 до 3,3 мс.
❤1
Как один раз объявить ресурсы шейдера для C++ и пяти графических API

В движке SETech интерфейс ресурсов задают в общем заголовке, который обрабатывают и компилятор шейдеров, и C++. Это заменяет три синхронизируемых вручную сущности: объявление в шейдере, его копию в C++ и таблицу отражения. Если переименовать ресурс и не исправить обращение к нему, C++ перестанет собираться. Тихо получить непривязанную текстуру уже не выйдет.

Макросы превращаются в обычные объявления HLSL на стороне шейдера и в структуру с описателями на стороне C++. Препроцессор назначает регистры и пространства отдельно для D3D11, D3D12, Vulkan, Metal и WebGPU.

Ресурсы делятся на Fixed, PerFrame, PerBatch и PerDraw по частоте обновления. Благодаря этому движок повторно привязывает только изменившиеся группы. В техническом разборе схемы SETech есть код генерации раскладок и ограничения D3D11.
❤1
Как собрать физический 2D-рэгдолл в Godot 4

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

Для сложной цепочки автор предлагает заменить стандартный физический движок Godot 4.x на Rapier2D. Быстрые конечности защищают от прохождения сквозь пол и стены с помощью непрерывного обнаружения столкновений. Отдельная настройка слоёв отключает столкновения частей тела друг с другом, но сохраняет контакт с окружением.

Пошаговая сборка рэгдолла содержит параметры шарниров и готовые файлы проекта. Управление активным рэгдоллом в руководство не входит.
❤2
Где выполнять вычисления шейдера и как не переплачивать за точность

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

Часть вычислений можно выполнить для вершин, а результаты интерполировать по поверхности. Это дешевле, но на крупных треугольниках освещение может потерять детали: блик вычисляется лишь в углах и затем размазывается между ними. Расчёт для каждого фрагмента точнее, хотя требует больше работы GPU.

Интерактивные схемы графического конвейера показывают растеризацию, интерполяцию нормалей и разницу нагрузки. Они помогут решить, что переносить в вершины, а что оставлять для попиксельного расчёта.
❤2👍1
Как разгрузить CPU в Unity при тысячах объектов

Сначала профилируйте: скачки времени кадра создаёт CPU или GPU. Если процессор тратит время на тысячи команд отрисовки, статический батчинг объединит неподвижные меши с одним материалом. Цена: дополнительная память GPU.

Для одинаковых подвижных объектов используйте GPU instancing: CPU передаёт модель и материал одной командой, а параметры экземпляров хранит отдельно.

VAT переносит анимацию вершин на GPU: позиции и повороты хранятся в текстуре, а шейдер двигает вершины. В разборе Backyard Baseball VAT вместе с instancing позволил отрисовывать тысячи анимированных объектов. Метод расходует память и не обновляет коллайдеры, поэтому не подходит для точной физики.
❤2
Как сгладить сетевую физику интерполяцией снимков

Передающая сторона отправляет состояния объектов, а клиент не запускает такую же симуляцию. Он ненадолго задерживает два снимка и строит между ними движение. Цена плавности: дополнительная задержка и трафик.

В примере с 900 кубами снимок занимает около 25 КБ. Поток из 60 снимков в секунду требует 11,6 Мбит/с, из 10 — около 2 Мбит/с. Даже при меньшей частоте сплайн Эрмита сглаживает движение с учётом скорости, а сферическая интерполяция кватернионов сохраняет постоянную скорость вращения.

При 5% потерь и неравномерном приходе пакетов до двух кадров автор использовал буфер на 350 мс. Потерянный UDP-пакет можно пропустить и двигаться к следующему состоянию. Сравнение интерполяции и экстраполяции показывает компромисс: без данных о физике прогноз проводит кубы сквозь пол, а затем резко исправляет их положение.
❤1
Как GPU Work Graphs делят поверхности Безье без трещин

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

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

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

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

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