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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
Человек, который шесть лет разбирает чужие портфолио по игровому интерфейсу — больше сотни портфолио и уже не сосчитать сколько HUD внутри них, — свёл повторяющиеся проблемы к четырём.

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

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

Третья — HUD рисуют в тишине и покое, а работать ему приходится в самый громкий момент. Проектировать надо под взрыв, летящие цифры урона и крик «поднимите меня» в наушниках. Босс-файт тут крайний случай: невидимый кулдаун или незамеченный лежачий союзник стоят всего боя.

Четвёртая — размер. Он сравнивает HUD первой Demon's Souls, огромный, и Elden Ring, где за годы в том же жанре всё ужалось, а при полном здоровье HUD со временем гаснет целиком. Ужимать стоит всё, кроме шрифта: его размер надо взять комфортный и потом ещё увеличить.

Четвёртый пункт вообще самый недооценённый — шрифт всегда мельче, чем кажется автору на его мониторе в полуметре от лица :)

@make_game
👍42
Восемь игроков, полторы тысячи юнитов, модем 28,8 килобита и Pentium 90. Доклад с GDC 2001 про сетевой код Age of Empires — пятнадцать страниц о том, как это вообще заработало.

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

Именно тут начинается интересное. Расхождение проявляется не сразу: чуть иначе посчитанное положение оленя приводит к тому, что крестьянин через несколько минут идёт к другому кусту, добывает другое количество еды, и партии расходятся. Ловить это пришлось сверкой состояния мира, объектов, поиска пути, выбора целей и генератора случайных чисел.

Поверх UDP команда сделала свою обработку порядка сообщений, обнаружение потерь и повторную отправку.

Отдельно ценны замеры на живых игроках: задержка до 250 миллисекунд обычно не замечается, от 250 до 500 играбельна, выше 500 уже мешает. Эти цифры с тех пор никуда не делись.

@make_game
🔥111
Детерминированная симуляция — это когда одна и та же последовательность входных данных всегда даёт один и тот же результат. Из неё получаются честные реплеи, откат состояния и возможность доиграть матч после падения сервера.

Рик Хоскинсон рассказал, как это делали в League of Legends. Работа заняла почти год и стала основой восстановления матчей на ранних турнирах.

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

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

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

@make_game
👍10
Разработчик Warlondor выложил полный отчёт по рекламе в Reddit Ads. Открутил 1160 долларов, из которых 500 были промокредитом, то есть своих потратил около 660. Получил 861 вишлист: по полной цене это 1,35 доллара за вишлист, по фактически потраченным деньгам — 0,77.

США и остальной мир разошлись сильно. В США 113 485 показов, 3436 кликов, CTR 3,028% и клик по 0,28 доллара. За пределами США 100 169 показов, 1642 клика, CTR 1,639% и клик по 0,13.

Он отдельно сравнил два способа таргетинга: около 250 разрешённых ключевых слов и 100 исключённых против выбора сообществ. В США ключи дали 3,122% CTR, сообщества 2,990%, и автор сразу оговаривает, что не считает ключи лучше сообществ.

Про окупаемость автор честно говорит, что не знает: игра ещё не вышла :)

@make_game
Лучший текст о том, почему в играх всё так долго: «The Door Problem» Лиз Ингланд. Тысяча двести слов про одни только двери.

Начинается с вопроса, который кажется пустяковым: какие двери в игре открываются, а какие нарисованы для вида. Дальше вопросы множатся. Как игрок отличит одну от другой — цветом, ручкой, мусором перед проходом? Дверь заперта навсегда или откроется по сюжету? Чем открывается: подходом, кнопкой, ключом, взломом, головоломкой? Могут ли из неё выходить враги и запирается ли она за ними?

Потом добавляется кооператив: когда дверь открывается, если игроков двое, и не запрёт ли один другого снаружи. На больших уровнях подключается подгрузка: оставшийся за дверью игрок может оказаться в выгружаемом куске карты. И размер: дверь должна пропускать игрока, союзников, врагов и крупного мини-босса.

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

Полезно показывать всем, кто спрашивает, почему простая фича не делается за день.

@make_game
3
В приключенческих играх Sierra можно застрять навсегда: забыл крем от загара в Лос-Анджелесе, сел на лайнер — и через несколько игровых дней умираешь на плоту, вернуться нельзя. Игра продолжает принимать ввод, просто выиграть уже невозможно. LucasArts таких ловушек не делала принципиально.

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

Ничего про конкретную игру внутри не зашито: стартовая комната, комната победы и сигнал смерти выводятся из кода самой игры. Проверено на четырёх играх одним и тем же кодом: Leisure Suit Larry 2 и King's Quest IV на SCI0 1988 года, King's Quest VI и Laura Bow 2 на SCI1.1 1992 года.

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

@make_game
4
Геймдев перегрет. Куда идти 3D-моделлеру?

На рынке сотни Junior и Middle 3D-артистов, дерущихся за тестовые в студиях. А рядом есть сфера АГР (архитектурно-градостроительные решения), где заказчики готовы платить десятки тысяч рублей за одну модель, потому что делать по ГОСТам просто некому.

Как начать зарабатывать на АГР моделях для застройщиков — разбираем на бесплатном вебинаре от Академии Playestate.

👉 Линк на регистрацию
Интерактивность в glTF до сих пор жила вне файла: геометрия, материалы и анимации едут в ассете, а поведение каждый движок реализует у себя заново.

Khronos отправил на ратификацию расширение KHR_interactivity для glTF 2.0. Оно кладёт поведение прямо внутрь ассета в виде графов, переносимых между платформами. Babylon.js уже проигрывает такие файлы, Needle Tools помогли сделать экспортёр, который выгружает интерактив прямо из Unity Visual Scripting, у Magic Leap готов рантайм, а Android XR обещает воспроизведение через Jetpack XR SDK.

Рядом до статуса release candidate дошло расширение для гауссовых сплатов — само оно описывает несжатое представление, готовое к отправке на видеокарту; сжатие и анимация сплатов пока живут отдельными предложениями. В превью glTF 2.1 — сцены из нескольких ассетов и потоковая загрузка с полной совместимостью с 2.0.

Оттуда же цифра из опроса Khronos про шейдеры, больше 400 разработчиков: главной болью назвали отладку и профилирование шейдеров, 53 процента.

@make_game
За первые две недели страницу How Many Dudes? в Steam добавили в желаемое 422 раза. По ранним меркам игру можно было закрывать — а к релизу вишлистов набралось 308 тысяч, и за три недели после выхода продалось 242 тысячи копий.

Крис Зуковски разобрал, что именно сработало. Два удачных YouTube Shorts принесли 769 вишлистов: приятно, но алгоритм Steam от этого не проснулся.

Проснулся он от демо. Его выложили 16 декабря, и оно попало в раздел New & Trending Free на зимней распродаже. Между Рождеством и Новым годом почти никто ничего не выпускает, вытеснять с витрины некому: игра провисела там не меньше 24 дней и собрала 36 946 вишлистов.

Делали её семь человек ровно год — после пятилетней разработки Crashlands 2.

@make_game
Мыши с частотой опроса выше килогерца роняли частоту кадров в играх на Godot под Windows, и на 8 кГц с захваченным курсором она падала ниже одного FPS. Юго Локурсьо разобрал причину и починку.

Windows шлёт приложению и обычные события WM_MOUSEMOVE, и сырой ввод WM_INPUT одновременно, даже когда курсор захвачен. Отказаться от обычных нельзя — сломается перетаскивание окна за заголовок. Поэтому сырой ввод теперь читается пачками и не рассылается сразу, а обычные события движения обрабатываются не чаще одного раза за кадр.

На Ryzen 9 9950X3D и RTX 5090 захваченная мышь на 8 кГц без вертикальной синхронизации дала 1703 FPS вместо «меньше одного». На картинке другой замер, с видимым курсором на 4 кГц: 1% low вырос в 45,8 раза.

Фикс уже в 4.7.2, в 4.7.1 его нет. Linux на Wayland и X11, как пишет автор, эта проблема обычно не задевает.

@make_game
🔥1
WebGPU в Unity перестал быть экспериментальным: начиная с 6000.6 это полноценный графический бэкенд с обычной поддержкой, объявила команда Web Graphics.

По умолчанию он всё равно выключен. Включается вручную: снять Auto Graphics API в настройках плеера, добавить WebGPU в список и поднять наверх, оставив ниже WebGL 2 как запасной вариант. Уберёте WebGL 2 — проект просто не запустится там, где WebGPU нет.

Ради чего это: вычислительные шейдеры в браузере, а с ними GPU Resident Drawing, отсечение невидимого на GPU, апскейлер STP, VFX Graph на миллионы частиц, Adaptive Probe Volumes и скиннинг на GPU. На WebGL всё это было недоступно.

Ловушка при выкладке: WebGPU браузер отдаёт только в защищённом контексте, так что сборка по обычному HTTP или открытая файлом молча откатится на WebGL 2.

@make_game
1
Epic выложила хотфикс 5.8.2 к Unreal Engine 25 августа. Новых возможностей в нём почти нет, зато закрыт длинный список падений редактора: Sequencer роняли завершение работы, вкладка со ссылками на уничтоженный объект, привязка трека к актору вне уровня, конвертация привязки в spawnable-актора и перекомпиляция блюпринта во время отслеживания свойств. Отдельно исправлены падения при сборке Nanite Assemblies с Keep Triangle Percent меньше ста и недетерминированность такой сборки.

Самое заметное по числам — в транскодировании видео для Tiled Mipmap Video Player. Подготовка кадра резервировала около 20 ГБ видеопамяти на один кадр 16K вместо нужных 1,4 ГБ, память кончалась и подвешивала видеокарту. Теперь транскодер смотрит, сколько памяти свободно на старте задачи, и ограничивает число одновременно обрабатываемых кадров; долю запаса можно подкрутить настройками TmvMedia.Transcode.MediaPlayer.MemoryBudgetFraction и TmvMedia.Transcode.FileSequence.MemoryBudgetFraction.

Из практического: целевой Android SDK поднят до API 36, в сетевой физике починили передачу TickOffset на физический поток, когда сервер не прислал ни одного реплицированного состояния, а PCG избавился от гонки при рассылке небезопасных делегатов вне игрового потока.

Тем, кто собирает на маке, стоит подождать: известная проблема UE-377426 ломает компиляцию на Xcode 26.4 и новее, Epic рекомендует оставаться на 26.1.

@make_game
1
Рейкаст пролетает сквозь коллайдер, которого явно касается. Такой баг ловили те, кто включил инкрементальный статический broadphase в Unity Physics: у mesh collider на статическом теле не пересчитывались вложенные AABB, и запросы вроде рейкастов переставали его видеть. Рядом жила вторая версия той же беды — подмена ссылки на BlobAsset у PhysicsCollider на месте не подхватывалась, и запросы возвращали неверные данные.

Обе починили в 6000.5.10f1, вышедшей 26 августа. Если сцена собирает коллайдеры на лету, а трассировка выстрелов и проверки видимости иногда врут, обновление снимает вопрос.

В том же патче: атлас detail-текстур теперь общий для тайлов ландшафта с одинаковыми неинстансированными прототипами, и на многотайловых ландшафтах это заметно экономит память. Плеер больше не зависает и не портит кучу при выходе, если загружен AssetBundle и включена диагностика сборки. Запекание occlusion culling на больших сценах перестало ронять редактор.

Патч-релиз, ставить который стоит по совпадению симптомов, а не просто так :)

@make_game
1
Trail3D и группы узлов в шейдерном графе: что нового в Godot 4.8 dev 4

Godot выложила четвёртый dev-снапшот 4.8 — 224 правки от 86 контрибьюторов.

Главное для 3D — узел Trail3D: следы за мечом, ракетой или машиной больше не нужно собирать из меша руками, считая UV и геометрию.

В VisualShader появились группы узлов: повторяющийся кусок графа сворачивается в один блок и дальше используется как обычный узел. На скриншоте три одинаковых «пропеллера» и свёрнутая группа рядом.

В рендере — дешёвая аппроксимация multi-bounce ambient occlusion, сцены перестают выглядеть перезатемнёнными. Для Android завезли AndroidSDKManager, он сам скачивает и настраивает Android SDK и Java.

Это pre-release: перед тем как открывать им проект, сделайте резервную копию или проверьте, что всё закоммичено.

@make_game
2
Ранние ИИ-ассеты уехали в публичный пролог, и студии пришлось извиняться

Патрис Дезиле, сооснователь Assassin's Creed, ушедший из Ubisoft, показал на летнем фестивале новую игру 1666: Amsterdam. Получасовой пролог выложили бесплатно в Steam и Epic Games Store, и игроки за пару дней нашли в нём портреты и часть ключевого арта, похожие на сгенерированные.

Студия Panache Digital Games признала: в пролог попали ранние версии ассетов, сделанные с помощью генеративных моделей, включая внутриигровые портреты и внешние маркетинговые материалы. Их заменят нарисованными вручную в ближайшем обновлении; в раннем доступе и в полной версии сгенерированных ассетов не будет. Художников в студии больше десятка.

Рейтинг пролога в Steam — «смешанные». В отзывах пишут прямо: «убираю из желаемого и игнорирую компанию».

Практический вывод для всех, кто сейчас делает игру. Черновой ассет, сгенерированный на скорость ради прототипа, живёт в проекте дольше, чем кажется, и уезжает в билд вместе со всем остальным — вместе с промоматериалами, которые собирают из тех же папок. Заведите для таких файлов отдельный флаг в трекере ассетов и проверку перед сборкой демо: дешевле, чем публичное извинение и «смешанные» отзывы на странице, которую вы копили год.

Разбор на IGN.

@make_game
👌32