Crave For Games


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

Заметки отсортированы в порядке подготовки материала (а не в порядке публикации!), поэтому за обновлениями лучше следить на страничке ВКонтакте.

Использование ScriptableObject класса в Unity

Полезный доклад про использование ScriptableObject класса в Unity.

Показать полностью...
Оптимизация производительности мобильных игр в Unity

Краткое содержание доклада с конференции Unite о приемах оптимизации производительности для мобильных игр.

Показать полностью...
Кастомизация рендеринга Unity для создания спец-эффектов

Краткое содержание доклада с конференции Unite о возможностях модификации графического пайплайна в Unity (на примере deferred рендеринга).

Показать полностью...
Оптимизации в игре Assassin's Creed Identity

Краткое содержание доклада от команды Ubisoft Blue Byte об их приемах оптимизации в процессе разработки изначально консольной игры на мобильные девайсы.

Показать полностью...
Оптимизация контента в Unity

Краткое содержание доклада с конференции Unite об оптимизации контента в Unity.

Показать полностью...
Оптимизации в игре Inside

Краткое содержание доклада от команды Playdead об использованных в игре Inside (разработана на Unity) приемах для повышения производительности, "непрерывного" геймплея, устранения лагов и об инструментах автоматического тестирования билдов.

Показать полностью...
Рендеринг в игре Inside

Краткое содержание доклада от команды Playdead об использованных в игре Inside (разработана на Unity) приемах для улучшения качества картинки и повышения производительности рендеринга.

Показать полностью...
Советы по оптимизации Unity-игр от JoyCraftGames

Слайды доклада с Google IO'14: slideshare.net/ale...[1]

Краткое содержание:

Показать полностью...
Рендеринг в DOOM'16

Детали реализации графики в DOOM. Изложенные идеи неприменимы к мобильной разработке, но тем не менее с ними было интересно ознакомиться. Комбинирование Forward и Deffered режимов рендеринга путем кластеризации camera view и использования мега-текстур - выглядит довольно непривычным после работы с Unity.

Graphics Study: adriancourreges.co...[1]

idTech 6: advances.realtimer...[2]

Показать полностью...
Доклад об оптимизациях рендеринга в игре Narcos

Георгий Нотяг рассказал на Unity User Group SPb 2016 о приемах оптимизации и разработки 3D контента и эффектов в недавно вышедшем мобильном проекте по мотивам сериала Narcos.

Показать полностью...
Билд a39

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

Показать полностью...
Билд a38

Давно не было обновлений, сейчас вкратце опишу события последних полутора месяцев и планы на будущее:

1. В начале августа

Показать полностью...
Билд a36

- Unity обновлена до версии 5.4.0f3

- Добавлена заготовка дисплея робота и анимация загрузки ОС робота

Показать полностью...
Билд a35

- Наиболее интересные уровни из "New Levels" перенесены в раздел "Story",

- Добавлено отображение статуса уровня (заблокирован/открыт/начат/пройден) и его сложности (рис. 1),

Показать полностью...
Билд a34

- Оптимизация алгоритма подготовки поля (больше нет подтормаживаний на старте и перед началом хода ИИ),

- Оптимизация используемой для кэша ИИ памяти,

Показать полностью...
Обновление сайта

Обновлен внешний вид сайта, теперь там можно найти как дневники разработки (craveforgames.com/...[1]), так и список всех полезных статей (craveforgames.com/...[2]). И у игры появилась простенькая страничка с информацией (craveforgames.com/...[3]).

Показать полностью...
Короткие видео о гейм-дизайне

Наткнулся на довольно информативную и лаконичную серию видео о фундаментальных понятиях гейм-дизайна:

3 Minutes Game Design: youtube.com/playli...[1]

Надеюсь, кому-нибудь будет полезна.

Показать полностью...
Работа с GameObject'ами и их компонентами в коде (Unity3d)

Как мне показалось, это очень важная статья, информацию из которой постоянно нужно иметь ввиду, работая в коде с GameObject'ами и компонентами:

blogs.unity3d.com/...[1]

Показать полностью...
Dithering в шейдерах (Unity3d, Cg)

Задача: Заменить полупрозрачные шейдеры на использование AlphaCutoff.

Как будем делать: Использовать Ordered Dithering и генерируемую решетку Байера.

Показать полностью...
Билд a28

- Переработаны все анимации, связанные с объектами на поле и самого поля,

- Теперь не нужно ждать окончания анимаций для совершения следующего действия (как минимум, это очень ускоряет тестирование),

Показать полностью...
Билд a25

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

Показать полностью...
Оптимизация кэширования вычисленных данных при анализе игровой ситуации (Симметрия)

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

Как будем делать: доработки функции хэширования ситуаций.

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

Задача: оптимизировать использование памяти в алгоритмах ИИ и решателя уровней.

Как будем делать: доработки алгоритма мэнеджмента памяти в системе кэширования.

Показать полностью...
Билд a24

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

Показать полностью...
Билд а23

Давненько не было обновления билда на сайте, пришло время положить этому конец) за время тестов накопилось много нововведений:

Показать полностью...
Автоматическое тестирование графики (Unity3d)

Задача: собрать статистику по фреймрейту на разных устройствах при разных настройках графики.

Как будем делать: скрипт на замер FPS и отправка результатов на сервер.

Показать полностью...
Билд a20

В 20-ый альфа-билд добавлена важная для предстоящих тестов функциональность: настройки графики.

Теперь в окошке настроек есть надпись "Настройки графики..." по нажатии на нее меню разворачивается и предоставляется возможность покрутить практически все доступные настройки.

Показать полностью...
Уровни детализации шейдеров (Unity3d)

Задача: реализовать возможность гибкой настройки качества материалов.

Как будем делать: LOD в шейдерах.

Показать полностью...
Сборка тестовых билдов под iOS (Unity3d)

Последние несколько дней был занят подготовкой к предстоящим beta-тестам, начал с запуска StoneDrop на своем iPad mini. Здесь расскажу, какие трудности пришлось преодолеть. Пост будет полезен тем, кто еще не разбирался в этой теме, но чувствует, что придется :)

Показать полностью...
Билд а19

В 19-ый альфа билд вошли много мелких правок:

- обновлен основной шрифт,

- добавлена возможность затенять верхнюю часть игрового интерфейса (клик в верхней части экрана),

Показать полностью...
Небольшие итоги по шейдерам и использованные приемы.
Часть 3 - Пост-эффекты, рендеринг с использованием ShaderReplacement

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

Показать полностью...
Небольшие итоги по шейдерам и использованные приемы.
Часть 2 - Анимация, передача параметров в шейдер

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

Показать полностью...
Небольшие итоги по шейдерам и использованные приемы.
Часть 1 - Карты нормалей, Ambient Occlusion

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

Показать полностью...
Предпросчет уровней для ИИ (пошаговые игры)

Задача: ускорить работу идеального ИИ на относительно больших уровнях.

Как будем делать: предварительно просчитывать идеальную стратегию и сохранять некоторые данные, чтобы значительно облегчить работу ИИ; параллельно минимизируя потребление памяти.

Показать полностью...
Билд а17

Облагородил визуальную часть графического интерфейса в игровой сцене. Критика/фидбэк очень приветствуются!

Показать полностью...
Билд а16

- Доработал модель и материал для многоцветного камня (есть в последних двух уровнях обучения),

- Доработал материалы для колонн и каменных блоков,

Показать полностью...
Добавление карты нормалей в самописный шейдер (Unity3d)

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

Показать полностью...
Билд a15

- Сделал материалы для круглых, квадратных и острых камней (последние можно посмотреть в Custom Game если выбрать эти камни одному из игроков);

- Добавил возможность менять размер камней

Показать полностью...
Дополнение к алгоритму ИИ Философа (StoneDrop)

Когда описывал алгоритм ИИ с поиском в глубину (см. пост Искуственный интел...), забыл рассказать про одну важную и нетривиальную проблему, с которой столкнулся.

Суть проблемы в следующем:

Показать полностью...
Искуственный интеллект с поиском в глубину (Философ)

Описание алгоритма ИИ.

Показать полностью...
Анализатор уровней (StoneDrop). Часть 2 - Оптимизации

Начало в статье Анализатор уровней...

Показать полностью...
Анализатор уровней (StoneDrop). Часть 1

Задача: в автоматическом режиме оценивать важные параметры уровня, искать интересные уровни в автоматическом режиме.

Как будем делать: Windows Forms приложение с моделью из игры, алгоритм минимакса с поиском в глубину, оптимизации.

Показать полностью...
Билд a13

- Добавил несколько рассчитанных с помощью LevelSolver игровых уровней в разделе Story (теперь они все кроме первого представляют некоторую сложность, правила уровня можно посмотреть, нажав кнопку меню), по ним очень приветствуется обратная связь (насколько сложные/легкие/интересные);

Показать полностью...
Статья о сборке билда под WebGL (Unity3d)

Еще немного полезной информации о сборке проекта под WebGL:

habrahabr.ru/post/...[1]

Показать полностью...
Прогресс

- Добавил многоцветные камни (могут участвовать в составлении линий всех игроков) и два последних обучающих уровня с ними,

- переработал систему отображения связей между камнями

Показать полностью...
Timelapse DevLog

Решил запиcывать на видео рабочий процесс. Для себя вижу в этом пользу, поскольку когда включен процесс записи, желание отвлечься на что-либо сильно уменьшается и мозг сам ищет наикратчайшие пути доделать задачу до конца.

Показать полностью...
Ошибка Out Of Memory (Cannot enlarge memory arrays) в WebGL билде

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

Показать полностью...
Прогресс

За последнее время было проделано много работы. Eсли опустить оптимизацию, возню с решателем и доработку модели, то останутся следующие осязаемые изменения:

- Немного доработал меню и локализацию,

Показать полностью...
Прогресс

Начал экспериментировать с формами камней для игры, сделал несколько набросков геометрии (рис. 1), интересна обратная связь. Сейчас на craveforgames.com/...[1] для игры можно выбрать одну из шести форм камней

Показать полностью...
Жадный искуственный интеллект (Ева)

Описание алгоритма ИИ.

Показать полностью...
Аттрибут Conditional (C#)

Задача: исключать из релизной сборки проекта вызовы отладочных методов и вычисление отладочных переменных.

Как будем делать: аттрибут Conditional.

Показать полностью...
Недостатки объектно-ориентированного программирования

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

видео 1

Показать полностью...
Прогресс

Переработал алгоритм размышлений для ИИ: теперь он смотрит на один ход вперед, а также, к его действиям добавилась некоторая неопределенность (то есть разнообразие :)). В целом, сложность немного повысилась (из 1000 игр новый алгоритм выигрывает у старого в 764 случаях).

Показать полностью...
Запуск модели вне Unity. Турниры между ИИ игроками

Задача: проведение турниров между ИИ для сравнения их сложности.

Как будем делать: отдельный проект в VisualStudio (VS) с моделью из игры.

Показать полностью...
Освещение в играх

видео 1

Неплохой обзор основных современных методов real-time освещения с краткими пояснениями, плюсами и минусами.

Показать полностью...
Прогресс

Добавил набросок антагониста для визуализации ИИ.

Конечно, пока что без модели, и параметры скорости визуализации не идеальны и нет возможности ее отключить, но уже чуть ближе к тому, что хочется видеть в финальной версии :)

Показать полностью...
Прогресс

Добавил набросок меню для пользовательской игры (рис. 1): теперь возможно настроить параметры игры и игроков, выбрать доску.

Показать полностью...
Прогресс

Закончил работу над отражениями в водной поверхности:

видео 1

Показать полностью...
Спецэффекты на основе буферов глубины и нормалей

Презетнация (pdf): beta.unity3d.com/t...[1]

Несколько примеров реализации шейдеров, работающих с Depth и Normals буферами.

Показать полностью...
Язык программирования для игр

Пейлист: goo.gl/XCJ8Ma[1]

Интересная серия видео от Jonathan Blow (создатель Braid и The Witness) с идеями и прототипом нового языка для программирования игр

Показать полностью...
Прогресс

Наконец-то окончены терзания по поводу названия своей "студии" разработки игр. Остановился на имени CraveForGames, обзавелся доменом и перенес сайт с WebGL билдом туда.

Показать полностью...
Шейдер водной поверхности (Unity3d)

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

Показать полностью...
Прогресс

На полпути к красивой воде :) реализовал фрагментный шейдер, который в FixedUpdate производит вычисления для движения водной поверхности

Показать полностью...
Дизайн UI и туториала

Неплохая презентация от Apple, в которой они собрали основные советы по проектированию UI и туториалов, чтобы они были интуитивными для пользователя iOS. Почти все советы применимы и к Android.

видео 1

Показать полностью...
Сохранение данных в WebGL билде (Unity)

Задача: сохранять данные в файлах (а не в PlayerPrefs) в WebGL билде

Как будем делать: JS костыль, исходный код приложен.

Показать полностью...
Прогресс

Реализовал автосохранение последней игры и возможность ее загрузки при старте. Пока что настройки выставлены так, что всегда загружается последняя недоигранная игра и нет возможности сделать рестарт всей игры, но это изменится с появлением GUI (UPD июнь 2016: автосохранение и автозагрузка пока что отключены, GUI готово)

Показать полностью...
Немного конспектов

На всякий случай выложу ссылки на свои старые, но не потерявшие актуальность в сфере игростроя конспекты:

Показать полностью...
Запись игры, отмена хода

Задача: реализовать сохранение реплеев игры и их воспроизведение. реализовать возможность отменять ходы.

Как будем делать: паттерн программирования Command.

Показать полностью...
Многопоточность (Unity, C#)

Задача: реализовать выполнение интенсивных вычислений в фоновом режиме, незаметно для игрока, в Unity проекте на платформах iOS, Android, Standalone, WebGL.

Как будем делать: самописный класс на основе BackgroundWorker и Coroutine, исходный код приложен.

Показать полностью...
Уроки C#

Наткнулся на отличные уроки по программированию на C# (на русском)

goo.gl/wvyHHr[1]

вполне могут заполнить основные пробелы в знаниях.

Показать полностью...
Конечный автомат игровых состояний

Для контроля за ходом игры используется конечный автомат состояний (стейт-машина, примеры можно посмотреть в статье gamedevelopment.tu...[1]).

Показать полностью...
Прогресс

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

Показать полностью...
Прогресс

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

Показать полностью...
Создание сайта

Более или менее ознакомился с процессом создания сайта.

Текущий билд игры можно посмотреть на craveforgames.com/...[1] (UPD февр 2016)

Процедура создания сайта примерно следующая:

Показать полностью...
ECS vs. MVC

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

Показать полностью...
Прогресс

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

Показать полностью...
Компонентная система объектов

Наткнулся на великолепную лекцию с примерами о том, как пользоваться компонентной системой объектов (ECS, которая взята за основу в Unity3d, Unreal Engine и вероятно, во многих других движках), чтобы по-максимому извлечь выгоду из такого подхода к организации объектов:

Показать полностью...
Сериализация (Unity3d, C#)

Все данные кроме локализации проекта хранятся в виде сериализованных объектов, содержащих всю информацию о том или ином аспекте игры (состяние игрока, игровой прогресс, уровни из одиночной компании, созданные в редакторе уровни и игровые доски, …).

Показать полностью...
Импорт из гугл-таблиц в Unity3d

Импорт конфигурационных данных происходит только в редакторе Unity. В процессе импорта используется библиотека GData.dll и написанный класс с удобными методами авторизации и импорта из таблиц (доступны в прилагаемом unity-пакете).

Показать полностью...
Конфигурационные файлы. Схема

Порядок работы с конфигурационными данными в проекте: все настройки производятся в Google таблицах в заранее определенном формате (отдельные вкладки одной таблицы для разных данных: локализация, уровни, параметры игрока, игровые доски).

Показать полностью...
Архитектура приложения

На рис. 1 изображен набросок архитектуры приложения. Попробовал сделать его максимально близко к UML диаграмме, но в то же время отобразить потоки данных (кто откуда загружает информацию и куда передает).

Показать полностью...
Дневник разработки

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

Показать полностью...
Концепт

Механика игры:

- основа - игра в трехмерные крестики-нолики (есть такие с кубическим полем 4х4х4 из вертикальных палок, на которые насаживаются фишки игроков)

Показать полностью...
Начало

Обо мне: живу в Санкт-Петербурге, в 2015г получил степерь магистра на физическом факультете СПбГУ, кафедра вычислительной физики. Полтора года работал программистом в крупной и успешной компании, разрабатывающей игры-фермы для мобильных устройств и facebook.

Показать полностью...