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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
Godot против движка, о котором вы, скорее всего, не слышали

Limn Engine открытый, бесплатный, дружелюбный к новичку и умеет 2D. Ровно как Godot, и на этом сходство заканчивается.

Сравнение построено вокруг того, чем они на самом деле различаются, и автор не назначает победителя. Godot известен и оброс экосистемой, Limn моложе и компактнее, и второе не автоматически хуже.

Полезно, если присматриваетесь ко второму движку под небольшой проект и не хотите тащить туда тяжёлый инструмент просто потому, что он под рукой.
11👏1
Расставить деревья случайно, но чтобы не налезали друг на друга: алгоритм Бридсона и две его оптимизации

Задача из любого процедурного леса, россыпи камней или системы частиц: точки должны быть случайными, но не ближе заданного радиуса. Наивный вариант, кидать точки и отбрасывать близкие, быстро упирается в почти стопроцентный процент отказов. Джастин Стайнман разбирает одностраничный алгоритм Роберта Бридсона 2007 года, у которого почти тысяча цитирований: сетка с ячейкой r / sqrt(d), где в каждой ячейке не больше одной точки, активный список и до 30 попыток на кольце от r до 2r вокруг каждой точки.

Дальше две простые доработки. Для 2D: точка помнит родителя и не тратит попытки на сектор кольца, где заведомо слишком близко к нему. Вторая работает и в 3D. Есть объяснение, как равномерно сэмплировать кольцо и почему 2r * x^(1/d) на случайном единичном векторе при x, равномерном на отрезке от 1/2^d до 1, даёт правильное распределение, и пример на GPU. Метод старый, разбор свежий, применять можно в любом движке.

@make_game
2👍1
Трое выходцев из Epic делают движок, который можно дописывать кодом, а не скриптами

Unity и Unreal сделали примерно 70% релизов на Steam в 2025 году, и место для нового движка звучит как утопия. Арьян Бруссе, Сьорд Де Йонг и Михал Валиент, за плечами которых Epic Games, Guerrilla и Apple, считают иначе: возможность появилась только сейчас.

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

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

Проверить обещание пока нельзя, но заявка редкая: последние годы новые движки заходили через удобство, а не через открытость внутренностей.
🤔7😁1😢1
Движок на C++20 с Vulkan, ECS и обработкой событий без блокировок

Аргументация автора против готовых движков конкретная: пустой стартовый проект в современном движке компилируется в сотни мегабайт бинарных зависимостей, а объектная иерархия вида Actor, Pawn, Character разбрасывает данные сущностей по куче и стабильно промахивается мимо кешей L1 и L2.

Eisen Engine отвечает на это архитектурой: явные абстракции рендера над Vulkan и OpenGL, система сущностей и компонентов с выравниванием под кеш-линию, диспетчеризация событий без блокировок и тик-цикл, рассчитанный на ИИ-нагрузку.

Разбор интересен как чертёж: видно, какие решения принимаются, когда за спиной нет чужого рантайма.
3👎1
Физика, стеклянные деформации и процедурный звук в одном эксперименте на WebGPU

Франк Райтбергер с появлением WebGPURenderer и TSL сознательно перевёл свои эксперименты на новый стек, чтобы публиковать их уже на современной технологии. «Садовая аномалия» один из них.

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

Компактный образец того, на что уже сегодня годится WebGPU в связке с TSL, без разрастания в полноценный проект.
👍31🤔1💋1
Forwarded from Zen of Python
EVE Online начала переезд на Python 3 после двух десятилетий на второй ветке

Под каждым прыжком через гейт, каждым ордером на рынке и каждым флитфайтом в EVE лежит очень много Python. Он держит New Eden больше двадцати лет, и теперь CCP объявила о начале перехода на третью ветку.

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

Это редкий публичный кейс переезда живого продакшена такого возраста. Обещают в итоге более быстрый поиск багов, место под новые фичи и общее ускорение, но дорога, по их же словам, длинная.
💊1
Unity расспросила инди-разработчицу, как она на самом деле пользуется Copilot

Своих ИИ-инструментов у Unity теперь хватает: ассистент прямо в редакторе и интеграции с привычным инструментарием вышли в бету. Тем интереснее, что компания отдельно поговорила про чужой инструмент.

Собеседница выбрана не случайно: Стейси Хаффнер была principal developer advocate в Microsoft, ведёт собственную инди-студию и больше десяти лет делает игры, а её опыт покрывает .NET, Xbox и Unity. То есть это практика, а не маркетинговая подводка к бете.

В разговоре пять приёмов, которыми она встраивает Copilot в свой процесс разработки игр. Примерить их стоит, если Copilot у вас уже открыт в проекте, но дальше автодополнения дело не идёт.
👎1
Точек от MediaPipe мало, чтобы натянуть шейдер на лицо игрока: нужна топология и проекция

Для аватара или AR-маски трекер отдаёт 468 точек в кадре, и на этом всё: ни граней, ни UV-развёртки, рендерить нечего.

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

Второй источник проблем: распознавание и рендер идут по разным часам. Трекер пишет результат в изменяемую ссылку, а рендер мутирует существующий BufferGeometry, и 468 позиций не проходят через реактивность каждый кадр. В движке приём тот же: обновлять буфер вершин, а не пересобирать меш.

Разбор на Codrops идёт по шагам, вместе с настройкой GPU-делегата.
👎2😇1
Заглавную тему DOOM сыграла схема из 555-х таймеров, в которой нет ни одной строчки кода

Когда в проекте играет зацикленный трек, за темп и высоту нот отвечает аудиодвижок. Автор собрал то же самое на россыпи микросхем, и разбор схемы на Hackaday читается как устройство трекера изнутри.

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

Полезно как схема мышления про процедурный звук: сетка времени, таблица нот, генератор тона. Чиптюн-саундтрек в вашем движке раскладывается на те же три части, и отлаживать его проще, когда видно, какая из них врёт.
7
Сцена в Three.js может обновляться сама, пока вы правите модель в Blender

Подвинули объект в Blender, экспортировали glTF, перезагрузили страницу, увидели не тот масштаб, и всё сначала. Сама правка занимает минуту, круг вокруг неё — пять.

На Codrops Andrew Woan разбирает, как эту рутину снимает связка ИИ-агента и Blender MCP: сервера, через который агент выполняет команды прямо в Blender.

Что уже работает:
• аддон с вкладкой экспорта, после которого сцена в Three.js перезагружается сама (кейс Merci-Michel);
• синхронизация поворота, масштаба и перемещения в обе стороны, так что править можно там, где удобнее;
• инстансы из аддона Geoscatter и модификатора Scatter on Surface (Blender 5.0+) доезжают до Three.js через MCP.

К статье приложены демка и исходники. Пайплайн держится на Blender и glTF, поэтому переносится на любой рантайм, который грузит ту же сцену.
🫡1
Порт движка ломается незаметно, но записанные демки ловят это бесплатно

Переносите движок на другой язык, и сложнее всего доказать, что геймплей остался прежним. Инженер перевёл doomgeneric на Rust утилитой c2rust: 73 095 строк за 23,2 секунды. Сам перевод занял секунды, дольше всего шла проверка.

Первый гейт — записи демок. Каждое игровое решение DOOM считает в фиксированной точке, поэтому одно расхождение рассинхронизирует воспроизведение: счётчик тиков перестаёт совпадать с записью.

Второй гейт: хеш каждого кадра, который движок отдаёт на экран. Из 11 113 кадров разошёлся один. Но контрольный прогон оригинального C-бинарника против самого себя дал то же расхождение на том же пикселе: DOOM читает один неинициализированный пиксель памяти, и перевод это повторил.

Отсюда приём: сначала прогоните эталон против эталона, иначе шум собственной сборки уедет в отчёт как чужой баг.
11
Пружинящую деформацию модели в Three.js собирают на костях, а не на симуляции мягкого тела

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

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

Париж вокруг собран не руками: город стримится из Cesium ion, это фотореалистичные 3D-тайлы Google. На стороне Three.js остаются анимация, столкновения и приземление.

Приём переносится на любую модель с костями: антенна, хвост, ветка. В статье остались расчёт траектории и стыковка геоданных с физикой.
В Unity 6.3 LTS 3D-модели рендерятся прямо в 2D-сцене со спрайтами

Обычно 3D-модель босса или вращающегося меча для 2D-игры запекают в спрайтовую анимацию покадрово. В 6.3 2D Renderer в Universal Render Pipeline рисует Mesh Renderer и Skinned Mesh Renderer в одной сцене со спрайтами: модель остаётся моделью.

Под 2D-физику завезли Box2D v3 с низкоуровневыми API: многопоточный расчёт, более предсказуемый результат от запуска к запуску и визуальная отладка коллайдеров в редакторе и рантайме.

А Shader Build Settings дают исключать и конвертировать ключевые слова шейдеров (по ним при сборке плодятся варианты) без единой строки кода, и Unity обещает заметно сократить время компиляции. Рядом Sprite Atlas Analyser: отчётом показывает, где атласы собраны неэффективно.

У 6.3 два года поддержки, и Unity советует начинать новые проекты на ней. Остальное собрано в разборе на GameFromScratch.
👎21🍾1
Движок на Vulkan с бинлесс-рендером и глобальным освещением пишет один человек, чтобы устроиться в геймдев

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

Spartan автор пишет в одиночку, и с 2021 года движок заметно оброс возможностями. Основной бэкенд Vulkan, DirectX 12 в работе, шейдеры общие на HLSL. Дизайн полностью бинлессный: материалы, источники света и сэмплеры лежат в общих массивах, и шейдер берёт их по индексу вместо пересвязывания дескрипторов на каждую отрисовку.

Сверху глобальное освещение в реальном времени на FidelityFX Brixelizer, экранные тени по методу Bend Studio из Days Gone, XeSS 2 и FSR 3 с динамическим разрешением, а на видеокартах AMD breadcrumbs, помогающие найти, на чём упал GPU. Остальное перечисляет обзор GameFromScratch.
3
Плоские нити не ловят свет, но в WebGPU их можно сделать объёмными

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

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

Для эффектов в three.js граница практичная: meshline подходит экранным штрихам, а для нитей, которые должны ощущаться частью освещённой сцены, нужны трубки.
3💔1
Листву в path tracing больше не надо прореживать ради фреймтайма

Каждое дерево, которое качается на ветру, заставляет пересобирать структуру ускорения лучей, поэтому в трассируемых сценах растительность режут первой. На GDC 2026 в RTX Mega Geometry показали систему листвы на секционированных структурах ускорения: они разбиты на части, которые обновляются независимо, и анимация задевает не всю сцену. Листва целиком остаётся в трассировке пути, а CD PROJEKT RED планирует применить это в «Ведьмаке 4».

Что ещё приехало из анонсов NVIDIA:
• ReSTIR PT в RTX Dynamic Illumination: точные зеркальные отражения;
• Linear Swept Sphere в RTX-ветке Unreal Engine 5.7: волосы трассируются попрядно;
• Advanced Shader Delivery: скомпилированные шейдеры приезжают вместе с загрузкой игры, и стоттеров на компиляции в рантайме больше нет.

Ветка UE 5.7 вышла в марте, остальные SDK лежат в RTX Kit.
Если вы несли мобильную игру в Supersonic, издатель у вас поменялся

Unity продала издательский бизнес Supersonic студии Tripledot Studios за $40 млн, о сделке объявили в начале августа. Вместе с бизнесом переходят продуктовая команда, SDK и технология автоматической закупки пользователей: то, чем издатель разгоняет игру после софт-лонча. Supersonic будет работать рядом с Lion Studios, собственным издателем Tripledot.

Аргумент покупателя: ИИ сделал игры быстрее и дешевле в производстве, но не сделал проще их запуск. Узкое место переехало из сборки в вывод на рынок, и $40 млн Tripledot платит именно за эту часть цепочки, объясняет сооснователь компании Лиор Шифф.

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

В браузерном эксперименте на Three.js каждая карточка — плоская сетка. Скругления, фаска и преломление рассчитываются в материале, который смещает выборку из видеотекстуры: изображение будто проходит через стекло. Сцена на WebGPU обходится без освещения, постобработки и промежуточных буферов.

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

В разборе Codrops есть код на TSL, языке шейдеров Three.js, расчёт нормалей из карты высот и настройка числа выборок под мощные и мобильные графические процессоры. Приём можно примерить к меню выбора уровней и галереям с десятками анимированных элементов.
👍1
Первый кадр на WebGPU пришлось ждать почти 20 секунд

В веб-проекте Cerebrium одна область рендеринга содержала несколько окружений со своими материалами, частицами, светом и постобработкой. Перед стартом Three.js обходил графы узлов на TSL, языке описания шейдеров Three.js, собирал из них шейдеры и компилировал графические конвейеры. На эталонной машине эта подготовка занимала почти 20 секунд, хотя после запуска производительность рендеринга проблемой не была.

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

В разборе Codrops есть весь путь выбора между WebGPU и WebGL, устройство нескольких окружений в одном холсте и объяснение, почему более чистой архитектуры оказалось недостаточно.
Прокрутка может переключать 3D-сцены без разрыва рендера

Shader Development Studio собрала почти весь сайт внутри HTML-холста. Three.js рендерит 3D-сцены, React Three Fiber описывает их компонентами, а язык материалов TSL компилируется и для WebGPU, и для WebGL. Так студия сохраняет совместимость со старым графическим API, не отказываясь от нового.

Интерфейс тоже рисуется внутри Three.js через изменённый @pmndrs/uikit, поэтому проходит через ту же постобработку, что и сцены. Плавную прокрутку ведёт доработанная библиотека Lenis: она фиксирует переходы между главным экраном и разделом работ.

Для геймдева здесь узнаваемая архитектура: меню, 3D и эффекты собраны в одном графическом конвейере. В разборе Codrops осталось устройство выборочного рендеринга и переходов между сценами.
1
Настройте синусоиду тремя параметрами

Если движение объекта уже задано синусоидой, размах меняет коэффициент A. При A=2 значение становится вдвое больше в обоих направлениях.

За скорость повторения отвечает w в sin(wx). Базовый период равен 2π; при w=2 он сокращается до π, поэтому цикл проходит вдвое быстрее. Для нужного периода p используйте w=2π/p.

Фаза θ задаёт точку начала цикла, не меняя размах или частоту. В примере sin(x+π/2) синусоида сразу оказывается на положительном пике и сдвигается влево на π/2; отрицательная θ сдвигает её вправо.

В разборе Eli Bendersky параметры можно покрутить в интерактивной демонстрации. Если синусоида уже задаёт колебание объекта, камеры или числового параметра шейдера, меняйте A, w и θ по отдельности: так видно, что отвечает за размах, темп и стартовую точку.
2💔2