Voxel.js
Voxel.js — великовозрастный, но так и не взлетевший хипстер-проект из эпохи раннего Node.js-хайпа, ставивший своей целью переписать Minecraft на JavaScript. Позиционировался как модульный, открытый и свободный конструктор для создания воксельных игр прямо в браузере. На деле же оказался эпическим долгостроем, набором костылей и доказательством того, что переписывать популярные вещи на жаваскрипте — путь в никуда, устланный сотнями npm install. Проект наглядно продемонстрировал, чем обычно заканчивается затея, когда за разработку игр берутся суровые веб-девелоперы, свято верующие в UNIX-way и считающие, что игра — это просто набор мелких модулей.
Суть[править]
В начале 2010-х, когда лучи славы Нотча пробивались даже сквозь самые толстые смузи и узкие джинсы, в богемной тусовке Окленда, штат Калифорния, обитали два видных деятеля ноды — Max Ogden и Substack. Эти светочи асинхронной мысли, по их собственному признанию, были типичными non-game developers и имели примерно «zero experience programming games». Однако, вместо того чтобы тихо-мирно пилить свои чат-боты и стримить видео с котиками, они решили, что пора нести свет веб-технологий в тёмное царство геймдева. Их взор пал на Minecraft — явление планетарного масштаба, написанное на страшной, энтерпрайзной и совсем не модной Java.
Мы оба видим столько потрясающих вещей, которые можно сделать с воксельными играми, и которые Minecraft совсем не делает, и не собираемся никоим образом портировать Minecraft на JS. Вместо этого мы просто хотим упростить создание вашей собственной игры в том же стиле.
— Max Ogden, пророк воксельного джихада
Идея была простой, как callback-hell: взять WebGL, приправить его серверным JS, распилить всё на атомарные npm-пакеты и дать миру возможность создавать свои кубические вселенные прямо в браузере. Больше никаких лаунчеров, никаких гигабайтных клиентов, никакой JVM! Только ты, браузер и сотни зависимостей в package.json. Проект был назван voxel.js и гордо водружён на алтарь GitHub, готовый принять дары в виде пулл-реквестов от таких же энтузиастов.
Главной фишкой, мантрой и одновременно проклятием проекта стала его гипермодульность. Вместо того чтобы сделать цельный игровой движок, авторы, верные заветам UNIX-философии, решили, что всё должно быть маленьким, независимым и делать только одну вещь. Хочешь, чтобы твой персонаж ходил? npm install voxel-player. Хочешь летать? npm install voxel-fly. Хочешь прыгать? Ставь voxel-jump. Нужен инвентарь? voxel-inventory. Прицел на экране? voxel-crosshair. Возможность ломать блоки? npm install voxel-mine. Список можно продолжать до бесконечности. Каждая, даже самая тривиальная фича, представляла собой отдельный репозиторий на Гитхабе, со своими багами, зависимостями и автором, который мог в любой момент забить на своё творение. В итоге, чтобы собрать что-то играбельное, нужно было превратиться в npm-сомелье, дегустирующего десятки пакетов с невнятными README и несовместимыми версиями.
Золотой век хайпа (2012-2014)[править]
Поначалу идея выстрелила. Сама мысль о «Майнкрафте в браузере» будоражила умы гик-сообщества. Технологические евангелисты и новостные сайты вроде Engadget и VentureBeat трубили о новой революции. Это же открытый исходный код! Это JavaScript, язык будущего! Это можно будет запустить на чём угодно, от ПК до Raspberry Pi! И действительно, первые демки выглядели впечатляюще для своего времени. Можно было зайти по ссылке и увидеть процедурно сгенерированный ландшафт из кубиков, по которому можно было бегать и летать. Это было свежо, модно и молодёжно.
Сообщество нодеров-хипстеров встретило проект с восторгом. Начался карнавал безумных модулей. Один адепт прикрутил к движку эмулятор контроллера для AR.Drone, позволяя летать над воксельным миром с помощью того же кода, что и для настоящего квадрокоптера. Другой сделал генератор, который превращал реальные карты Сан-Франциско в уродливый, но технологичный кубический мир. Появились модули для портальных пушек, для показа имени блока под курсором (voxel-voila!), для спринта по двойному нажатию 'W' (voxel-sprint), и даже специальный блок-костыль voxel-skyhook, который можно было ставить в воздухе, потому что законы физики — это для проприетарных движков.
Вершиной этого абсурда стал модуль voxel-clientmc. Его создатель, видимо, осознав тщетность попыток догнать и перегнать оригинал, решил просто... подключиться к нему. Модуль использовал прокси, чтобы транслировать протокол Minecraft-сервера в WebSocket и позволить поделию на voxel.js притвориться настоящим клиентом. Конечно, это был лишь жалкий proof-of-concept, способный едва-едва рендерить мир, но сам факт его существования идеально описывал всю суть проекта: вместо того чтобы создать убийцу Minecraft, они создали его убогого веб-клиента.
Позднее в 2013-м прогресс voxel.js как бы замедлился...
— deathcap, летописец упадка
Авторы и сами подливали масла в огонь, излучая оптимизм, граничащий с наивностью. В своих выступлениях и статьях они признавались, что почти ничего не понимают в геймдеве, но верили, что коллективный разум опенсорса всё исправит. Фраза «if you find bugs it is because we don't really know what we are doing» («если найдёте баги, то это потому, что мы не особо в курсе, что делаем») даже попала в заголовки. И это работало! На какое-то время voxel.js стал самой модной песочницей для JavaScript-программистов, уставших от jQuery-каруселей и AJAX-форм.
Конец немного предсказуем[править]
А потом хайп прошёл. Оказалось, что игра — это не только рендеринг кубов и ходьба по ним. Нужен был контент, геймплей, враги, крафтинг, физика, мультиплеер. А каждый из этих пунктов требовал не просто очередного npm install, а скоординированной работы, единого видения и, о ужас, централизованного управления. Философия маленьких модулей, которая так хорошо работала для утилит командной строки, в геймдеве дала сбой.
Представьте, что вы собрали игру из 50 модулей. Внезапно автор voxel-engine обновляет API. Половина модулей отваливается. Их авторы уже нашли новую модную технологию и забили на свои репозитории. Вы сидите посреди руин из несовместимых зависимостей, и единственный выход — форкать всё подряд и поддерживать самому.
Браузерный JavaScript — не самое лучшее место для высокопроизводительных вычислений. Как язвили комментаторы на Hacker News по поводу схожих проектов, рендерить мир из тысяч независимых DOM-элементов или даже WebGL-объектов — это верный способ «убить браузер». Любая сложная сцена с большим количеством чанков, динамическим освещением и физикой превращала игру в слайд-шоу даже на мощных машинах, не говоря уже о смартфонах.
Самый главный вопрос, который так и повис в воздухе. За всё время существования проекта так и не появилось ни одной законченной, полноценной игры. Только бесчисленные демки, техно-песочницы и «метавселенные», которые были интересны лишь самим разработчикам. Один из ведущих контрибьюторов, deathcap, годами пилил свой проект voxelmetaverse, который должен был стать витриной возможностей движка. В ретроспективе он честно признался: «...it wasn't reaching where I wanted it to be and alas, real life took over, and the project became inactive» («...оно не достигало того уровня, которого я хотел, да и, увы, реальная жизнь взяла своё, и проект заглох»).
К 2015-2016 годам коммиты в основных репозиториях стали редкими, а затем и вовсе прекратились. Сообщество разбежалось по другим, более перспективным проектам. Попытка перезапуска под названием voxeljs-next, призванная обновить кодовую базу до современных стандартов ES6 и Three.js, также тихо скончалась, не оставив после себя ничего, кроме ещё одного заброшенного репозитория.
Наследие[править]
Проект так и не смог «убить» Minecraft, не создал ни одного коммерческого продукта и не произвёл революции. Он остался в истории как кружок по интересам для веб-программистов, которые на пару лет вообразили себя игровыми разработчиками. И, возможно, в этом и заключается его главная ирония: самое популярное, что было создано с помощью voxel.js, — это статьи и доклады о самом voxel.js.
См. также[править]
- Minecraft — недостижимый идеал.
- Node.js — секта, породившая это чудовище.
- Хипстеры — целевая аудитория.
- Велосипед — основной метод разработки.
- Серебряная пуля — то, чем проект так и не стал.