Crave For Games


Список статей, которые могут оказаться полезны при разработке игры на Unity3d. Большинство из них - результат работы над игрой 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

видео 1

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

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

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

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

видео 1

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

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

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

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

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

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

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

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

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

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

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

видео 1

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

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

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

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

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

Как будем делать: паттерн программирования 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 диаграмме, но в то же время отобразить потоки данных (кто откуда загружает информацию и куда передает).

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