• Реалистичная каустика отражений

    • Translation

    Большинство технических художников на каком-то этапе карьеры пытается создать правдоподобные отражения каустики. Если вы разработчик игр, то одна из основных причин чтения Twitter заключается в бесконечном потоке вдохновения, которое из него можно почерпать. Несколько дней назад Флориан Гельценлихтер (kolyaTQ в twitter) опубликовал GIF эффекта каустики, созданного в Unity при помощи шейдеров. Пост (представлен ниже) быстро набрал 1,5 тысячи лайков, что показывает искренний интерес к подобного типа контенту.


    Хотя меня обычно больше привлекают более длинные и технически сложные серии статей (например, про объёмное атмосферное рассеяние света [перевод на Хабре] и инверсную кинематику [первая и вторая части перевода на Хабре]), я не смог удержаться перед искушением написать короткий и милый туториал об эффектах Флориана.

    В конце этой статьи есть ссылка на скачивание пакета Unity и всех необходимых ассетов.
    Читать дальше →
    • +33
    • 3.5k
    • 5
  • Правильная передача цветов ретроконсолей в эмуляторах

    • Translation


    Почти все игровые ретроконсоли генерируют цвета в каком-нибудь из вариантов RGB-кодирования.

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

    Самым распространённым сегодня видом дисплеев являются ЖК-панели (LCD). Они известны тем, что имеют очень плохие уровни чёрного. Различия между TN, PVA и IPS не слишком на это влияют.

    Отдельные фанаты играют на ЭЛТ-мониторах, и всё большую популярность набирают OLED-экраны, особенно на телефонах и планшетах. Но в этой статье мы в основном будем рассматривать ЖК-экраны, хотя данная методика важна для дисплеев любого типа.

    Точность цвета


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

    Например, Sega Genesis кодирует 9-битные цвета, что даёт по 3 бита на канал.

    Самым наивным решением было бы поместить 3 бита в самые старшие 3 бита вывода, а младшие 5 бит оставить пустыми, но при этом белый цвет становится немного серым.
    Читать дальше →
  • Создание игры Tower Defense в Unity: сценарии и волны врагов

    • Translation
    [Первая, вторая, третья и четвёртая части туториала]

    • Поддержка врагов малого, среднего и крупного размеров.
    • Создание игровых сценариев со множественными волнами врагов.
    • Разделение конфигурации ассетов и геймплейного состояния.
    • Запуск, пауза, победа, поражение и ускорение игры.
    • Создание бесконечно повторяющихся сценариев.

    Это пятая часть серии туториалов, посвящённых созданию простой игры в жанре tower defense. В ней мы научимся создавать геймплейные сценарии, порождающие волны разнообразных врагов.

    Туториал создавался в Unity 2018.4.6f1.


    Становится довольно уютно.
    Читать дальше →
    • +20
    • 3.7k
    • 1
  • Cоздание визуальных компонентов в Unity UI. Система частиц

    • Tutorial
    Привет! Эта статья о создании собственных визуальных компонентов в UI на примере компонента для визуализации системы частиц в Canvas’e.

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

    image

    Читать дальше →
    • +18
    • 3.7k
    • 6
  • Проектируем космическую ракету с нуля. Часть 1 — Задача двух тел

    • Tutorial

    Содержание



    Часть 2 — Полу-решение задачи двух тел
    Часть 3 — Ужепочти-решение задачи двух тел
    Часть 4 — Второй закон Кеплера

    Привет всем! Сегодня я начну серию статей-лекций посвященных теме проектирования беспилотных летательных аппаратов космического назначения (ракет) =). Да-да, — вы не ослышались, самых настоящих ракет, будем их учиться проектировать по-настоящему, как это (наверное) делают в каком-нибудь КБ . Сам я заканчивал универ именно по этой специальности, потому некоторые знания имеются. Но сам еще ни дня в КБ (к сожалению) не проработал. По причине соответственного расположения звезд на небосводе. В общем звезды так сошлись, судьба такая у меня. Хотя мог бы уже пол года работать в КБ Южном, зимой почти устроился, осталось лишь медкомиссию пройти и сдать документы на проверку в СБУ для получения допуска секретности. Но пошло опять что-то не так. До этого уже шло очень много раз, потому наверное что-то накопленное выстрелило, и я решил: в пе*ду да ну его.

    А, кстати, месяц назад послал резюме в SpaceX на mechanical engineer, но мне через два дня вежливо отказали, потому что закон ITAR. Ну попытка не пытка, а я действительно просто хотел поехать чем-нибудь помочь, и никакой я не спецагент. Ну да ладно, начну пожалуй по теме, а то развел тут историю своей жизни излагать (просто чем-то нужно было заполнить начало, думал-думал — написал как есть).
    Читать дальше →
  • Ограничения 8-битных игр и их точное воссоздание в Unity

    • Translation
    image

    Ретро-игры с простыми механиками и пиксельной графикой способны пробуждать тёплые воспоминания у опытных игроков, и в то же время вполне доступны для более юной аудитории. Сегодня многие игры называются «ретро», но для создания ностальгического стиля требуются усилия и планирование. Именно поэтому мы пригласили ребят из Mega Cat Studios помочь нам в обсуждении этой темы. В этом посте мы рассмотрим всё необходимое для создания аутентичной графики в стиле игр для NES, в том числе важные параметры Unity, графические структуры и цветовые палитры.

    Создание аутентичного арта в стиле NES


    Для начала мы рассмотрим основы создания графики для игр, соответствующих ограничениям классической Nintendo Entertainment System. Это поколение консолей накладывает серьёзные ограничения на художников, стремящихся воспроизвести его аутентичную графику. Это ограничения на используемые палитры и на размер и количество объектов на экране. Кроме того, важно учитывать, что разрешение этой консоли составляет 256×240 пикселей.

    Палитры


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


    Эти цвета невозможно менять, потому что они являются частью самой консоли. Во всех играх NES используются сочетания этих цветов, из которых составляются изображения.
    Читать дальше →
  • Создание игры Match-3 в Unity

    • Translation
    image

    Несколько лет назад на SeishunCon я заново открыл для себя игры match-3. Я играл в Dr. Mario детстве, но такие более соревновательные игры, как Magical Drop, Bust-A-Move и Tokimeki Memorial Taisen Puzzle-Dama, сильно отличаются от неё.

    image
    Dr. Mario

    В результате я осознал, как много нейтральных решений связано с созданием игры match-3.

    На следующем джеме Ludum Dare я решил поэкспериментировать, но сначала за неделю до этого для разогрева попробовал разработать алгоритм «Тетриса», обнаруживающий и удаляющий линии. Мне очень помог этот туториал Unity Plus. [Прим. пер.: у меня ссылка не открывается. Если вы знаете, как решить проблему, напишите мне, я дополню статью.] Разумеется, алгоритм «Тетриса» для поиска заполненных рядов гораздо проще, чем алгоритм, выискивающий разнообразные сочетания совпадающих тайлов.

    Если вы хотите изучить эти примеры кода в контексте, то зайдите в мой репозиторий Ludum Dare 30. (Для бесстыдной саморекламы я снова использовал эту логику для игры Shifty Shapes.)

    Два мира



    Magical Drop 3 (источник: Kazuya_UK)

    Самая мудрёная часть создания игры-головоломки в Unity заключается в том, что игра не живёт в пространстве мира. Во всяком случае, живёт не полностью.

    В этом её отличие от других жанров. Платформеры, например, почти полностью живут в игровом мире Unity. Transform игрока сообщает о его положении. Коллайдеры (или, в некоторых случаях, raycast) говорят, находится ли игрок на земле, ударяется ли об потолок или столкнулся с врагом. Даже если вы не используете внутриигровую физику, то всё равно, скорее всего, добавляете силу или указываете скорость Rigidbody, чтобы обеспечить распознавание столкновений без затрат.
    Читать дальше →
    • +19
    • 30.6k
    • 3
  • Как генерируются подземелья в Enter The Gungeon

    • Translation
    В последнее время я много играл в Enter The Gungeon. Это потрясающая, ужасно сложная игра в жанре bullet hell, сильно напомнившая мне Binding of Isaac. Но чем больше я играл в неё, тем больше осознавал малозаметную гениальность дизайна подземелий.


    Существует много процедурных генераторов, создающих логичные схемы уровней, обеспечивающие правильный темп игры и вознаграждение игроков, и есть другие генераторы, создающие уровни с петлями и компактные схемы. Но редко можно встретить в одной игре оба типа. Единственная известная мне игра, в которой была попытка реализации подобного — это Unexplored.

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

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

      Хочу предложить вашему вниманию свой поход, который применяю при разработке игровых приложений в ландшафтной ориентации.
      Читать дальше →
    • Тюнинг производительности запросов в PostgreSQL

      Настройка производительности базы данных — разработчики обычно либо любят это, либо ненавидят. Я получаю удовольствие от этого и хочу поделиться некоторыми методами, которые я использовал в последнее время для настройки плохо выполняющихся запросов в PostgreSQL. Мои методы не является исчерпывающими, скорее учебником для тех, кто просто тащится от тюнинга.

      Поиск медленных запросов


      Первый очевидный способ начать тюнинг — это найти конкретные операторы, которые работают плохо.

      pg_stats_statements


      Модуль pg_stats_statements — отличное место для начала. Он просто отслеживает статистику выполнения операторов SQL и может быть простым способом поиска неэффективных запросов.

      Как только вы установили этот модуль, системное представление с именем pg_stat_statements будет доступно со всеми своими свойствами. Как только у него будет возможность собрать достаточный объем данных, ищите запросы, которые имеют относительно высокое значение total_time. Сначала сфокусируйтесь на этих операторах.

      SELECT *
      FROM
        pg_stat_statements
      ORDER BY
        total_time DESC;

      user_id dbid queryid query calls total_time
      16384 16385 2948 SELECT address_1 FROM addresses a INNER JOIN people p ON a.person_id = p.id WHERE a.state = @state_abbrev; 39483 15224.670
      16384 16385 924 SELECT person_id FROM people WHERE name = name; 26483 12225.670
      16384 16385 395 SELECT _ FROM orders WHERE EXISTS (select _ from products where is_featured = true) 18583 224.67

      Читать дальше →
      • +22
      • 7.7k
      • 6
    • Создание игры Tower Defense в Unity: баллистика

      • Translation
      [Первая, вторая и третья части туториала]

      • Поддержка разных типов башен.
      • Создание башни-мортиры.
      • Вычисление параболических траекторий.
      • Запуск взрывающихся снарядов.

      Это четвёртая часть туториала, посвящённого созданию простой игры в жанре tower defense. В ней мы добавим башни-мортиры, стреляющие детонирующими при столкновении снарядами.

      Туториал создавался в Unity 2018.4.4f1.


      Враги подвергаются бомбардировке.
      Читать дальше →
      • +23
      • 5.1k
      • 3
    • Доступное объяснение алгоритма коллапса волновой функции

      • Translation
      Алгоритм коллапса волновой функции (Wavefunction Collapse Algorithm) учит компьютер импровизировать. На входе он получает архетипичные данные и создаёт процедурно генерируемые данные, похожие на исходные.


      (Источник)

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


      (Источник)

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

      Большинство реализаций и объяснений коллапса волновой функции — это полная, оптимизированная по скорости версия алгоритма. Разумеется, все они важны и необходимы, но в них сложно разобраться с нуля. В этом посте я буду объяснять всё понятным я простым языком, сосредоточившись на версии Wavefunction с ограничениями, которую я назвал Even Simpler Tiled Model. Кроме того, я выложил пример реализации ESTM на Github. Код в нём неэффективный и медленный, но очень хорошо читаемый и подробно прокомментирован. Как только вы разберётесь в технологии, лежащей в основе ESTM, то станете ближе к пониманию более сложных версий алгоритма. Если хотите понять алгоритм коллапса волновой функции, то эта статья будет хорошим началом.
      Читать дальше →
    • Генерация подземелий и пещер для моей игры

      • Translation

      На этой неделе я начал работать над новой темой: генерацией подземелий и пещер. Я использовал разбиение пространства для генерации комнат, алгоритмы генерации лабиринтов для генерации коридоров и клеточные автоматы для придания пещерам более естествненного внешнего вида.

      Разбиение пространства


      Существует множество способов генерации комнат для подземелья (случайное размещение, генерация на основе агентов, с использованием separation steering behavior или физического движка, и т.д.). Но мой любимый метод — это разбиение пространства, потому что оно легко контролируется и расширяется.

      Способов разбиения пространства тоже очень много: разделение на сетки, двоичное разбиение пространства, разбиение пространства деревом квадрантов, диаграммы Вороного и т.д. Я решил использовать двоичное разбиение пространства, потому что оно хорошо подходит для генерации прямоугольных комнат. Этот метод получил популярность благодаря статье на RogueBasin.

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


      Такого поведения можно избежать несколькими способами. Один из них — ограничить позицию разделения двумя соотношениями длин сторон, например, в интервале от 30% до 70% или от 40% до 60%. Другой способ — использовать вместо равномерного распределения нормальное или биномиальное, благодаря этому повысится вероятность разделения по центру стороны, а не по краям. Эти способы устраняют проблему, но сложно понять, как конкретно параметры влияют на окончательный результат.
      Читать дальше →
    • Создание игры Tower Defense в Unity: башни и стрельба по врагам

      • Translation
      • Tutorial
      [Первая и вторая части туториала]

      • Размещаем на поле башни.
      • Целимся во врагов при помощи физики.
      • Отслеживаем их, пока это возможно.
      • Стреляем в них лазерным лучом.

      Это третья часть серии туториалов о создании простой игры жанра tower defense. В ней рассмотрено создание башен, прицеливание и стрельба во врагов.

      Туториал создавался в Unity 2018.3.0f2.


      Зададим врагам жару.

      Создание башни


      Стены только замедляют врагов, увеличивая длину пути, который им нужно пройти. Но цель игры — уничтожить врагов, прежде чем они доберутся до конечной точки. Эта задача решается размещением на поле башен, которые будут по ним стрелять.
      Читать дальше →
      • +19
      • 4.5k
      • 1
    • Курс Молодого Геймдизайнера: как считать баланс персонажей и снаряжения без математики



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

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

        Статья будет полезна тем, кому надо заняться балансом, но не знает с чего начать, а также начинающим геймдизайнерам, которые будут выбирать специализацию. Ну и всем, кто просто интересуется, чем занимаются ГД, когда не придумывают новые виды лутбоксов.
        Читать дальше →
      • Памятка пользователям ssh

          abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

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

          Оглавление:
          • управление ключами
          • копирование файлов через ssh
          • Проброс потоков ввода/вывода
          • Монтирование удалённой FS через ssh
          • Удалённое исполнение кода
          • Алиасы и опции для подключений в .ssh/config
          • Опции по-умолчанию
          • Проброс X-сервера
          • ssh в качестве socks-proxy
          • Проброс портов — прямой и обратный
          • Реверс-сокс-прокси
          • туннелирование L2/L3 трафика
          • Проброс агента авторизации
          • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)
          Читать дальше →
        • Создание ритм-игры в Unity

          • Translation
          image

          Введение


          Итак, вы хотите или пытались создать ритм-игру, но игровые элементы и музыка быстро рассинхронизировались, и теперь вы не знаете, что делать. Эта статья вам в этом поможет. Я играл в ритм-игры со старшей школы и часто зависал на DDR в местном зале аркадных автоматов. Сегодня я всегда ищу новые игры этого жанра, и такие проекты, как Crypt of the Necrodancer или Bit.Trip.Runner, показывают, что в этом жанре можно сделать ещё многое. Я немного работал над прототипами ритм-игр в Unity, и в результате потратил месяц на создание короткой ритм-игры/головоломки Atomic Beats. В этой статье я расскажу о самых полезных техниках создания кода, которым я научился при создании этих игр. Информацию о них я не смог нигде больше найти, или она была изложена не так подробно.

          Во-первых, я должен выразить огромную признательность Ю Чао за пост Music Syncing in Rhythm Games [перевод на Хабре]. Ю рассмотрел основы синхронизации таймингов аудио с игровым движком в Unity и выложил исходный код своей игры Boots-Cut, что очень помогло мне в создании своего проекта. Вы можете изучить его пост, если хотите узнать краткое введение в синхронизацию музыки в Unity, но я рассмотрю эту тему подробнее и обширнее. В моём коде активно используется и информация из статьи, и код Boots-Cut.
          Читать дальше →
        • Создание игры Tower Defense в Unity: враги

          • Translation
          [Первая часть: тайлы и поиск пути]

          • Размещение точек создания врагов.
          • Появление врагов и их движение по полю.
          • Создание плавного движения с постоянной скоростью.
          • Изменение размера, скорости и размещения врагов.

          Это вторая часть туториала, посвящённого простой игре в жанре tower defense. В ней рассматривается процесс создания врагов и их движения к ближайшей конечной точке.

          Данный туториал выполнен в Unity 2018.3.0f2.


          Враги на пути к конечной точке.
          Читать дальше →
          • +26
          • 4.9k
          • 1
        • Что в пикселе тебе моем: создание нанопикселей с помощью плазмонных метаповерхностей



            Взгляните на экран. Что вы видите? Страницу веб-сайта с текстом и картинками, верно? Но, а если копнуть глубже? Все эти разные по смысловой нагрузке и способу подачи элементы состоят из цифровых визуальных «атомов», называемых пикселями. Чем больше пикселей — тем лучше, за исключением некоторых инди-игр. Пиксели, как и любой «атом» во Вселенной, обладает своими определенными свойствами и ограничениями. По крайней мере так было раньше. Сегодня мы познакомимся с исследованием, в котором описывается метод создания нового типа пикселей, в сотни раз меньше и лучше нынешних. Как именно ученым это удалось, какими удивительными характеристиками обладают новые пиксели и смогли бы такие пиксели помочь нам разобрать происходящее во тьме третьей серии восьмого сезона «Игры престолов»? Ответы будем искать в докладе исследовательской группы. Поехали.
            Читать дальше →
          • В этой статье слишком много воды

              «Мы начинаем разработку новой игры, и нам нужна классная вода. Такую сможешь?»


              , — cпросили меня. «Да не вопрос! Конечно, смогу», — ответил я, но голос предательски задрожал. «А, еще и на Unity?», — и мне стало понятно, что впереди очень много работы.
              Читать дальше →