• Создание шейдеров

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

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


    Сцена из Minecraft, до и после добавления нескольких шейдеров.

    Задача этого туториала


    Иногда программирование шейдеров представляется загадочной чёрной магией и его часто понимают неправильно. Существует множество примеров кода, демонстрирующих создание невероятных эффектов, но в которых практически нет объяснений. В своём руководстве я хочу восполнить этот пробел. Я сосредоточусь в основном на базовых принципах создания и понимания кода шейдеров, чтобы вы смогли с лёгкостью настраивать, сочетать или писать свои собственные шейдеры с нуля!
    Читать дальше →
  • Библиотека быстрого поиска путей на графе

      Привет, Друзья!


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


      Пример использования на огромном графе:



      Поиграться с демо можно здесь


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


      Описание разных вариантов A* уже не раз встречалось на хабре. Мне очень понравилось вот это, потому повторяться в этой статье я не буду. Под катом расскажу подробнее почему библиотека работает быстро и о том, как было сделано демо.

      Читать дальше →
    • Системы Линденмайера

      • Перевод

      Естественные паттерны


      Системы Линденмайера придумал венгерский биолог Аристид Линденмайер, изучая рост водорослей. Он разработал L-системы как способ описания процесса роста водорослей и простых растений. Результатом стал своего рода язык, на котором можно было выразить свойства рекурсивности и самоподобия роста организма. И в самом деле, L-системы можно использовать для генерирования естественных паттернов; кроме того, хорошо известные математические паттерны тоже можно записать в виде L-системы. В этой статье я расскажу о различных типах L-систем и продемонстрирую их с помощью отрисовки «черепашьей графикой» двухмерных и трёхмерных систем Линденмейера.
      Читать дальше →
      • +39
      • 8,7k
      • 3
    • Создание когнитивных связей у игроков

      image

      Вступление


      Статья повествует о создании когнитивных связей в головах игроков логической игры
      «Maze Lord». Или как перевели её различные сайты — Повелитель Подземелий. Это пошаговая логическая игра с элементами менеджмента ресурсов в roguelike сеттинге.
      Читать дальше →
    • Чему инди-разработчики могут научиться у инди-писателей

      • Перевод
      image

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

      Но представьте рынок, на котором такие рекомендации неприменимы. На нём нет таких вещей, как Steam Launch Visibility Round или рекомендации в App Store. Что, если нет прессы, с радостью пишущей обзоры? И что, если вместо 7667 игр, выпущенных в Steam в 2017 году, в тот же год выпущено больше 100 000 новых книг? А общее количество книг на рынке превышает 4 000 000 наименований?
      Читать дальше →
    • Супер-полное руководство по публикации в Microsoft Store

      • Tutorial
      Привет, хабр! У меня часто случаются подобные ситуации: занимаюсь чем-нибудь сложным и в какой-то момент вылезает ошибка. Начинаю искать проблему в, соответственно, замороченных вещах, часто делая то, что не надо. И так проблемы нарастают. А в конце оказывается, что неполадка была в чем-то простейшем, например, программу запускать нужно было от имени администратора. Я один такой? В любом случае, ниже мы делимся супер-полным руководством по публикации приложения в Microsoft Store на примере игры. Заглядывайте под кат, чтобы сохранять свое время!

      Читать дальше →
      • +19
      • 3,1k
      • 4
    • Дизайн игр: не сбивайте игрока с толку

      • Перевод
      image

      Игровой процесс может быть очень сложной задачей. Некоторые игры, например, «Змеи и лестницы», достаточно прямолинейны, однако такие игры, как SpaceChem и Factorio могут быть невероятно сложной проверкой работы мозга.

      Каждой игре, от простой до сложной, очень важно объяснить игроку, как в неё играть. Неважно, бросает ли он кубики или решает сложные математические уравнения — главное, чтобы игрок понимал, как работает игра.

      Но создатели некоторых игр делают их сложными без необходимости. В большинстве игр существует чёткий набор правил, а любые возможные действия игрока приводят к ожидаемым результатам, но некоторые игры иногда становятся запутанными. Давайте рассмотрим одни из самых частых ловушек для разработчиков и подумаем над тем, как их избежать.
      Читать дальше →
    • Мультиплеер в быстрых играх (Часть IV: Хэдшот! Путешествуем во времени)

      • Перевод

      1. Части I, II (синглплеер с авторитарным сервером)
      2. Часть III (Появление врага)
      3. Часть IV (Хэдшот!)

      Как повесить идеальный хэдшот если у тебя пинг 2 секунды? Вы узнаете в этой статье.

      Текущий алгоритм работы мультиплеера


      • Сервер получает команды с клиентов и времена их отправления
      • Сервер обновляет состояние мира
      • Сервер с некоторой частотой отправляет свое состояние всем клиентам
      • Клиент отправляет команды и локально воспроизводит их результат
      • Клиент получает обновленные состояния мира и:
        • Применяет состояние от сервера
        • Заново применяет все свои команды, которые сервер не успел применить.
        • Интерполирует предыдущие состояния других игроков
      • С точки зрения игрока, есть два серьезных последствия:
        • Игрок видит себя в настоящем
        • Игрок видит других в прошлом.

      Обычно это отлично работает, но это становится большой проблемой для событий, которым нужна высокая пространственно-временная точность. Например если хочется разнести врагу башку!
      Читать дальше →
    • Мультиплеер в быстрых играх (части I, II)



      1. Части I, II (синглплеер с авторитарным сервером)
      2. Часть III (Появление врага)
      3. Часть IV (Хэдшот!)


      Предлагаю вашему вниманию перевод статьи Fast-Paced Multiplayer (Part I): Introduction.

      Разработка игры — само по себе непростое занятие. Но мультиплеерные игры создают совершенно новые проблемы, требующие разрешения. Забавно, что у наших проблем всего две причины: человеческая натура и законы физики. Законы физики привнесут проблемы из области теории относительности, а человеческая натура не даст нам доверять сообщениям с клиента.
      Читать дальше →
    • Эффективный расчёт области видимости и линии взгляда в играх

      • Перевод
      image

      В стратегических играх обычно требуется знать область видимости NPC, чтобы игрок мог продумывать стратегию и делать следующий ход. Мы рассмотрим математику и реализацию рациональной модели, не просаживающей скорость игры при большом количестве NPC на карте. Если вы хотите увидеть готовое интерактивное демо модели, перейдите сюда и играйте прямо в браузере! Вот скриншот демонстрации:

      image

      Имея параметры видимости наблюдателя (направление взгляда, расстояние видимости и угол поля зрения), нам нужно найти видимую для него область, т.е. определить область видимости (field of view, FoV). Если препятствия отсутствуют, это будет сектор круга, состоящий из двух граней (радиусов) и соединяющей их дуги (см. Рис. 1). Кроме того, имея заданную точку мира, мы должны быстро определить, видима ли она для наблюдателя, т.е. необходимо обрабатывать запросы линии взгляда (line of sight, LOS) для заданной точки. Обе эти операции можно выполнить достаточно эффективно для использования при рендеринге в реальном времени.
      Читать дальше →