Search
Write a publication
Pull to refresh
4
0
Send message

В поисках вдохновения, или Как вытащить себя из Ж

Reading time5 min
Views33K
После выхода моей первой статьи «Не бойтесь пробовать, или Как я стала программистом в возрасте далеко за 18», в личку и комментариях на Хабре, а также в соцсетях стали приходить самые разные отзывы. Один из них запомнился больше всего:

«Спасибо за Вашу статью. Очень грамотно написано. Но хотелось бы улучшить ее и дать обратную связь: вы пишете в позитиве “все закончилось хорошо”. Но куда важнее другой аспект “Как выбираться из трясины?”. Вы в статье упомянули, что был перерыв и то ли жаба, то ли любовь к программированию и т.д. и т.п. И побежали объяснять радостно дальше! А ведь сколько судеб ломается именно в этот момент. У каждого он свой. И кто-то банально не знает, как из него выбраться. Именно “как выбраться из ж...?” куда важнее чем “всё ли хорошо закончилось?”»

Я пообещала автору отзыва написать на эту совсем непростую тему.

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


Читать дальше →

Автоверстка и стили в Unity: наш новый пайплайн и инструменты для UI

Reading time6 min
Views14K


Начну с главного: мы сделали удобный инструмент для верстки и изменили пайплайн работы. Теперь по порядку.

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

И мы поставили себе несколько целей:

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

Вот как это происходило.
Читать дальше →

Ограничения 8-битных игр и их точное воссоздание в Unity

Reading time14 min
Views29K
image

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

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


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

Палитры


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


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

Доступное объяснение алгоритма коллапса волновой функции

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


(Источник)

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


(Источник)

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

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

Выбор размера монитора: теория угловых размеров, обоснование и сравнение

Reading time7 min
Views261K


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

Надеюсь, мои изыскания кому-то также пригодятся, а также позволят сохранить зрение и нервы.
Читать дальше →

Решаем судоку с помощью Алгоритма X

Reading time6 min
Views32K

В этой статье рассмотрим "Алгоритм X" Кнута и его применение для решения судоку. Прелесть алгоритма в том, что судоку при этом решается быстро без программирования каких-то продвинутых техник решения.

Читать дальше →

Настройка Firefox в Linux

Reading time127 min
Views104K

Решил написать о настройке Firefox для Linux. В интернете похожие статьи тоже есть, но в основном они по старым версиям браузера. Радикальных отличий в настройке Firefox для Linux или для Windows нет, однако есть свои особенности.

Читать дальше →

На какие языки переводить свою игру в 2019

Reading time7 min
Views17K


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

Сразу ключевые тезисы:

  • План-минимум перевода: описание, ключевые слова + скриншоты.
  • Топ 10 языков для перевода игры (если она уже на английском): французский, итальянский, немецкий, европейский, испанский, упрощенный китайский, бразильский португальский, русский, японский, корейский, турецкий.
  • Наибольший трехлетний рост показали турецкий, малайзийский, хинди, упрощенный китайский, тайский и польский языки (по данным LocalizeDirect).
  • Перевод на языки FIGS+ZH+ZH+PT+RU – «новый черный» в локализации.
Читать дальше →

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

Reading time4 min
Views68K
Привет, Хабр! Представляю вашему вниманию перевод статьи «27 things I wish I knew when I started programming» автора Ken Mazaika.

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

Генерация подземелий и пещер для моей игры

Reading time4 min
Views26K

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

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


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

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

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


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

Поучительные эпизоды из сериала «Кремниевая долина» (1-й сезон)

Reading time7 min
Views34K
Сериал «Кремниевая долина» (Silicon Valley) является не только увлекательной комедией про стартапы и программистов. Он содержит массу полезных при развитии стартапа сведений, изложенных простым и доступным языком. Я всегда рекомендую обязательно посмотреть этот сериал всем начинающим стартаперам. Для тех, кто не считает нужным тратить время на просмотр сериалов, я подготовил небольшую выборку наиболее полезных эпизодов, которые обязательно стоит посмотреть. Возможно, прочитав эту статью, вы захотите посмотреть это шоу.
Читать дальше →

Как использовать диаграммы Вороного для управления ИИ

Reading time8 min
Views15K
image

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



Пространственные отношения


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

Такие отношения постоянно используются в видеоиграх и могут предоставлять очень полезную информацию ИИ, а также самому игроку.



У Вороного есть ответ


Диаграмма Вороного описывает пространственное отношение между близко расположенными точками или их их ближайшими соседями. Это множество соединённых многоугольников, полученных из точек или локаций. Каждая линия «области» Вороного находится посередине между двумя точками.
Читать дальше →

Курс Молодого Геймдизайнера 2: баланс прогрессии и динамики без математики

Reading time8 min
Views25K


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

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

Бонусом в конце — несколько ссылок по теме.
Читать дальше →

Оптимизация графики для веба: самое важное

Reading time54 min
Views98K
Автор электронной книги — Эдди Османи, один из руководителей разработки Google Chrome

tl;dr


Cжатие изображений всегда должно быть автоматизировано


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

Большинство CDN (например, Akamai) и сторонних решений вроде Cloudinary, imgix, Fastly Image Optimizer, Instart Logic SmartVision и ImageOptim API предлагают комплексные автоматизированные решения для оптимизации изображений.

На чтение статей и настройку конфигурации вы потратите время, которое дороже оплаты их услуг (у Cloudinary есть бесплатный тариф). Но если всё-таки не хотите отдавать работу на аутсорсинг по соображениям стоимости или из-за дополнительной latency, то выбирайте приведённые выше варианты с открытым исходным кодом. Проекты Imageflow или Thumbor предлагают альтернативу на собственном хостинге.
Читать дальше →

7 полезных сайтов и приложений для изучения английского

Reading time3 min
Views31K


Интересный факт – 20% населения планеты хотя бы на каком-то уровне говорит на английском языке, а его носителями являются всего 5% населения. При этом, этот язык – пожалуй, главный в интернете. По статистике, на нем написано 55,5% всего размещенного онлайн-контента.

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

Создание игры Tower Defense в Unity: башни и стрельба по врагам

Reading time17 min
Views12K
[Первая и вторая части туториала]

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

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

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


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

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


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

Погружение в Move — язык программирования блокчейна Libra от Facebook

Reading time10 min
Views10K
Далее мы рассмотрим в деталях основные характеристики языка Move и в чем его ключевые различия с другим, уже популярным языком для смарт-контрактов — Solidity (на платформе Ethereum). Материал основан на изучении доступного он-лайн 26-страничного whitepaper-а.

Введение


Move — это исполняемый язык байт-кода, который используется для выполнения пользовательских транзакций и смарт-контрактов. Обратите внимание на два момента:

  1. В то время как Move является языком байт-кода, который может напрямую выполняться на виртуальной машине Move, Solidity (язык смарт-контрактов в Ethereum) — язык более высокого уровня, который сначала компилируется в байт-код перед выполнением в EVM (Ethereum Virtual Machine).
  2. Move можно использовать не только для реализации смарт-контрактов, но и для пользовательских транзакций (подробнее об этом будет дальше), в то время как Solidity — это язык только для смарт-контрактов.
Читать дальше →

Чему можно научиться у дизайна гиперказуальных игр

Reading time11 min
Views10K
image

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

Не могу сказать, что являются специалистом по гиперказуальным играм. Я простой потребитель, который больше не получает удовольствия от игр как потребитель благодаря моей профдеформации — я аналитический гейм-дизайнер. В последнее время я играл во множество гиперказуальных игр на мобильной платформе (и анализировал их), поэтому решил вкратце написать об их привлекательности и о том, чему у них могут поучиться гейм-дизайнеры. Повторюсь, это не готовое руководство по созданию гиперказуалок, а краткий обзор различных гейм-дизайнерских решений и систем, помогающих гиперказуальным играм быть увлекательными.
Читать дальше →

Ещё лучшая ZIP-бомба

Reading time25 min
Views138K
В статье показано, как создать нерекурсивную zip-бомбу, которая обеспечивает высокую степень сжатия путём перекрытия файлов внутри zip-контейнера. «Нерекурсивная» означает, что она не зависит от рекурсивной распаковки декомпрессорами файлов, вложенных в zip-архивы: здесь всего один раунд. Выходной размер увеличивается квадратично от входного, достигая степени сжатия более 28 миллионов (10 МБ → 281 ТБ) в пределах формата zip. Ещё большее расширение возможно с помощью 64-разрядных расширений. Конструкция использует только наиболее распространённый алгоритм сжатия DEFLATE и совместима с большинством парсеров zip.

  • zbsm.zip 42 kB → 5.5 GB
  • zblg.zip 10 MB → 281 TB
  • zbxl.zip 46 MB → 4.5 PB (Zip64, менее совместима с парсерами)

Исходный код:
git clone https://www.bamsoftware.com/git/zipbomb.git
zipbomb-20190702.zip

Данные и исходники иллюстраций:
git clone https://www.bamsoftware.com/git/zipbomb-paper.git
Читать дальше →

Unity3D + Google Services: мультиплеер для вашего проекта на Android и iOS

Reading time7 min
Views53K

В этой статье я хочу рассказать об использовании игровых сервисов Google в вашем приложении на Unity. На написание данного материала меня сподвигло достаточно большое количество проблем, встретившихся во время разработки нашего приложения, а также отсутствие каких-либо материалов на русском языке по этой теме. Да и собственно, на английском тоже. Описание использующегося плагина на гитхабе очень краткое и не дает ответа на возможные проблемы с работой сервисов. Думаю, здесь не стоит пояснять, что мультиплеер и рейтинги игроков зачастую повышают интерес пользователей, а следовательно и вашу возможную прибыль. А благодаря данной статье начинающие разработчики смогут начать использовать данные преимущества.
Читать дальше →

Information

Rating
Does not participate
Registered
Activity