Dxt сжатие в играх
Память и текстуры
Если Вы уже занимались разработкой мобильных игр, то основное зло не в нехватке ресурсов CPU/GPU, а в нехватке памяти. Именно о памяти нужно думать в мобильной разработке в первую очередь. В Windows Phone 7 ограничение было в 100мб, в Window Phone 8 стало получше, но не сильно:
Тип лимита | Тип приложения | Телефоны с маленьким количеством памяти | 1- Гб телефоны | 2-Гб телефоны |
Default | XNA или native | 150 MB | 150 MB | 150 MB |
Default | XAML/.NET excluding XNA | 150 MB | 300 MB | 300 MB |
Higher | All app types | 180 MB | 380 MB | 570 MB |
И если Вы разрабатываете игру, в которой довольно большое количество спрайтов (уложенных, конечно же, в атласы) — то вы рано или поздно задумаетесь о количестве этих самых атласов и сжатии текстур.
Стандартный атлас, с которым работают все более или менее уважающие себя устройства — это 2048х2048 пикселей. Что в несжатом виде (32 bits per pixel) будет занимать аж 2*2*4 = 16 Мб памяти. Тогда на выручку приходят форматы сжатия текстур, в нашем случае это DXT сжатие.
Сжатые текстуры не только требуют значительно меньше памяти видеокарты, но и вообще отображаются быстрее, чем несжатые текстуры, за счет снижения требований к пропускной способности. Но некоторые качества изображения могут быть потеряны из-за сжатия. Тем не менее, снижение объема памяти позволяет увеличить разрешение текстур, которые будут использоваться, что действительно может дать существенный выигрыш в качестве.
Игра «LAND» для ДВК-3. Реинкарнация под Windows

В далеком 1988 году, будучи шестиклассником, я впервые познакомился с компьютером. Тем, кто не знает ─ это был ДВК-3М с интегрированным черно-белым дисплеем и двумя пятидюймовыми дисководами. Но сейчас не о нём. Мое первое знакомство состоялось с играми от ASP corp. ─ тройке ребят-программистов, которые специализовались на компьютерах семейства ДВК.
Какие-то предприимчивые люди установили в нашей школе пару ДВК-3М и закрепили тариф в 1 советский рубль за 1 игровой час. Мы экономили на обедах, а кое-кто клянчил деньги у родителей, чтобы поиграть после уроков в Звездный патруль, Тетрис, Зону, Cat, Garden, Sheriff и конечно же LAND! С тех пор я испытываю сентиментальные чувства ко всему связанному с теми играми и компьютерами, прямо как Джон Коннор к Терминатору первой модели.
Особенной популярностью пользовалась игра LAND. Это был такой себе вариант Lode Runner, но мы были в восторге! Прошло много лет, эти компьютеры безнадежно устарели и перестали встречаться в природе, но ностальгические чувства периодически давали о себе знать и появлялось желание вспомнить детство и поиграть.
Разработка (футбольных) игр с помощью MonoGame

Чтобы облегчить жизнь разработчикам игр, создаются разнообразные фреймоворки, не только для С и С++, но и для С# и даже JavaScript. Одним из таких фреймворков является Microsoft XNA, использующий технологию Microsoft DirectX и позволяющий создавать игры для Xbox 360, Windows, and Windows Phone. Microsoft XNA сейчас уже более не развивается, однако в то же время сообщество Open Source предложило другой вариант – MonoGame. Познакомимся с этим фреймворком поближе на примере простой футбольной (к чему бы это?) игры.
Подборка курсов по разработке игр от Microsoft

Разработка игр – одно из самых перспективных направлений в современном мире IT. Сегодня мы решили поделиться с вами подборкой самых востребованных, популярных и, что немаловажно, бесплатных курсов Microsoft, связанных с разработкой игр. Пять избранных курсов ждут вас под катом!
Создаем мобильную игру на Monogame, решая типичные проблемы начинающего разработчика
Собственные игровые движки: небольшое исследование

Пару недель назад я играл в A Plague Tale студии Asobo Studio (и прошёл её). Меня очень захватила эта игра, благодаря не только красивой графике, но и сюжету с локациями. Я решил немного изучить технологии, использовавшиеся при её разработке, и был удивлён, обнаружив, что игра создавалась на собственном движке относительно небольшой студии. Я знаю, что некоторые компании используют собственные движки, но очень сложно найти подробное маркетинговое исследование с подобной информацией. Поэтому я написал эту статью.
Сегодня многие компании выбирают для разработки игр такие движки, как Unreal или Unity (или, по крайней мере, так думают многие люди), потому что для разработки собственного движка AAA-уровня требуется множество ресурсов. Поэтому я решил составить список некоторых из самых популярных самописных движков с указанием размеров студий и значимых игр, выпущенных на этих движках.
Большинство представленных здесь движков разрабатывалось на протяжении многих лет, множества итераций и для множества видеоигр, эти движки имели несколько версий или даже полностью (частично) переписывались с нуля с последующей сменой названия. Кроме того, важно заметить, что большинство этих движков для реализации определённой функциональности (совместимость с платформами, физика, сеть, растительность, UI, рендеринг, звук...) использует всевозможное промежуточное ПО.
Как выбрать движок для создания игр на .NET (рассматриваем 7 кандидатов)
Вам нужно самостоятельно создавать все эти слои при создании игры, или есть способ лучше? Конечно, есть способ получше. Экосистема .NET предлагает множество вариантов для тех, кто хочет создавать игры, но не хочет создавать все с нуля. В предыдущей публикации я продемонстрировал разнообразный ландшафт разработки игр для .NET. В этом посте я рассмотрю некоторые из существующих игровых движков .NET и помогу вам выбрать, какой игровой движок подходит вам.

Playing with null: Checking MonoGame with the PVS-Studio analyzer

The PVS-Studio analyzer often checks code of libraries, frameworks, and engines for game development. Today we check another project — MonoGame, a low-level gamedev framework written in C#.
Игра с null: проверка MonoGame статическим анализатором PVS-Studio

Анализатор PVS-Studio уже не раз был использован для анализа кода библиотек, фреймворков и движков для разработки игр. Пришло время добавить к их списку MonoGame – низкоуровневый gamedev-фреймворк, написанный на языке C#.
Как написать игру на Monogame, не привлекая внимания санитаров. Часть 0, вступительная

Данной статьей я открываю серию дневников разработки уже третьей реинкарнации моей будущей игры KARC. Первая версия дошла до минимально играбельного вида и выложена в открытый доступ. Однако, мне не понравилось, как я спроектировал структуру приложения. Поэтому, ошибочно полагая, что я понял, как правильно спроектировать архитектуру приложения, я сделал с нуля вторую версию. В ней мне удалось прогрузить сцену с машинкой игрока, которая реагирует на клавиатуру. Однако, развивать эту версию дальше я не посчитал целесообразным, потому что, увлекшись, накрутил слишком много всего и, самое главное, неправильно. В результате в коде стало очень трудно ориентироваться. Так бы и остался проект в заморозке на неопределенный срок, как и моя мечта делать игры, если бы я в очередной раз не решил попытаться понять архитектурные паттерны, в частности, MVP, и у меня это, внезапно не получилось бы. И так мне MVP понравился, что я понял, как хочу переписать архитектуру KARC. В этот раз я решил фиксировать все свои шаги на бумаге, а потом выложить в широкий доступ. Дело в том, что я делаю игру на фреймворке Monogame, но в сети я не нашел внятного руководства, как сделать на нем что-нибудь законченное. Есть много роликов и статей о том, как сделать какие-то отдельные элементы (например, какой метод подгружает спрайт, но не как лучше это осуществить, если их у вас много и под каждый игровой объект их несколько) или мелкие игры, которые тянут в лучшем случае на технодемку, но не создать какую-либо законченную игру целиком (кое-что на самом деле нашел, и ссылки в последующих статьях будут, но в целом мне не понравилось). Поэтому, возможно, описание моего пути кому-нибудь пригодится.
Как написать игру на Monogame, не привлекая внимания санитаров. Часть 1, обмазываемся абстракциями
В прошлый раз мы разобрали структуру проекта Monogame. Сегодня мы начнем писать структуру проекта и даже создадим белый квадрат, движением которого сможем управлять.
Как написать игру на Monogame, не привлекая внимания санитаров. Часть 2, натягиваем спрайты на глобус

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

В третьей части данного дневника мы из созданной ранее заготовки начнем собирать наш мир. Будет сделана генерация карты, а также проведен необходимый рефакторинг кода.
StbSharp: история ненужного проекта
В этой статье я бы хотел рассказать о своем хобби проекте под названием StbSharp.
Итак, в 2016 году мне пришла в голову весьма банальная идея - сделать собственный игровой кросс-платформенный движок на C#. И я озаботился поиском кросс-платформенной же библиотеки для загрузки картинок. Внезапно выяснилось, что подходящей просто не существовало. Было множество платформо-зависимых решений(напр. System.Drawing). А так же имелась SixLabors.ImageSharp. Но она была в состоянии ранней альфы. Мне же хотелось работать с решением, проверенным временем. Так я пришёл к идее портировать stb_image.h (очень популярной в геймдеве single-header библиотеки для загрузки картинок) на C#.
"А разве не легче было написать биндинги для нативной библиотеки? Хоть для той же stb_image?",- задаст справедливый вопрос читатель. Да, легче. И правильнее. О чём, собственно, и говорит заголовок этой статьи. Конечно, использование биндингов доставляет некоторые неудобства в плане того, что необходимо доставить соответствующий нативный бинарник на устройство конечного пользователя. Однако эти неудобства с лихвой окупаются достоинствами. А именно лучшим перформансом и портируемостью.
Однако, проект показался мне столь интересным, что я проигнорировал эти справедливые возражения.
Как написать игру на Monogame, не привлекая внимания санитаров. Часть 4, решаем основной вопрос философии

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