1. Крок 1. Дотискаємо ТЗ до конкретики
Портал розібрано, карта є — і Тьома зі спокійною совістю повертається до мрії. На руках у нього чесне ТЗ від Льохи — пʼять пунктів: вигляд від першої особи, переміщення, поставити блок, прибрати блок, невеликий замкнений світ. Але перш ніж віддати це Сашкові, Льоха дотискає постановку ще на крок — до речей, які агенту справді потрібні, щоб не вгадувати.
— Пʼять пунктів — це кістяк, — каже Льоха. — Але давай додамо, чим саме керувати і в чому це живе, інакше Сашко знову почне перепитувати. Миша — огляд, WASD — ходьба. Лівий клік — зламати блок, правий — поставити. Світ — плоский майданчик із кубів, скажімо, двадцять на двадцять, і стінка по периметру, щоб не звалитися в порожнечу. І нехай це буде один index.html: відкриваєш подвійним клацанням — як усі твої іграшки.
Тьома збирає фінальне ТЗ — уже сам, Льоха тільки править формулювання:
Збери браузерний voxel-світ в одному index.html.
- вигляд від першої особи; миша — огляд, WASD — ходьба;
- світ: плоский майданчик 20×20 із кубів, по краю — стінка;
- лівий клік — зламати блок, на який дивлюся; правий клік — поставити;
- відкривається подвійним клацанням по файлу, без встановлення.
2. Крок 2. Сашко шукає готову бібліотеку
Тьома вже тягнеться натиснути Enter, але Сашко відповідає не кодом, а запитанням-пропозицією:
— Тривимірний світ з нуля в браузері — це тисячі рядків мороки з графікою. Але є готова бібліотека для 3D — three.js. Вона бере на себе всю важку частину: сцену, камеру, відмальовування кубів. Підключимо її і зберемо поверх неї світ — швидко й надійно. Ок?
Тьома посміхається — знайома історія. Рівно так само, як учора із шахами: не писати правила гри вручну, а взяти готову chess.js, де все вже придумано. Тут те саме, тільки для 3D.
— О, я це вже проходив, — каже він уголос. — Не вигадувати велосипед, а взяти готове колесо. Давай через цю твою three.js.
Йому навіть не потрібно розбиратися, що там усередині бібліотеки. Головне він засвоїв ще вчора: якщо задача типова, майже напевно хтось уже написав під неї бібліотеку, і агент її знайде. Твоя справа — не писати рушій, а попросити агента взяти правильне готове рішення.
3. Крок 3. Агент збирає світ по кроках
Сашко не вивалює все разом — іде зрозумілими кроками, і кожен Тьома бачить у чаті як окрему дію:
● Підключаю three.js через CDN в index.html # готова 3D-бібліотека
● Створюю сцену, камеру від першої особи, візуалізатор # scene, camera, renderer
● Будую підлогу 20×20 із кубів + стінку по краю # світ із блоків
● Вмикаю керування: миша — огляд, WASD — ходьба # PointerLockControls
● Додаю «приціл»: на який блок дивлюся # Raycaster
● Лівий клік прибирає блок, правий — ставить
● Готово. Відкрий index.html подвійним клацанням.
Тьома не вчитується в назви — scene, Raycaster — йому це нічого не говорить. Але загальну логіку вловлює: агент підключив готову бібліотеку, побудував із кубів майданчик, повісив на мишу й клавіші керування, а «приціл» — це щоб розуміти, на який саме куб він дивиться, коли бʼє. Не магія з нізвідки, а зрозумілі шматки, зібрані з готового.
А потім приходить «готово». І ось тут Тьому на секунду накриває: палець над запуском.
— Ну, — каже він уголос. — Або зараз, або весь рік мріяв даремно.
Тисне.
Екран гасне. Чорний квадрат — на частку секунди.
А потім картинка проступає — і його ніби втягує всередину. Він не дивиться на світ згори, як на карту, — стоїть просто в ньому, усе від першої особи. Перед ним блоки. Тисне «вперед» — світ зсувається, ніби він справді зробив крок. Повертає голову — і навколо розгортається кубічний ландшафт.
— Та ну, — видихає він.
Тягнеться поставити блок — блок стає рівно там, куди цілився. Бʼє по сусідньому — той зникає, залишаючи порожнечу. Тьома не вірить і перевіряє: ставить ще, ламає, ставить три підряд, ліпить криву башточку, обходить її колом — башточка стоїть, нікуди не дівається, він реально ходить навколо.
— Рік витріщався на цю картинку, — каже він у порожню кімнату, ще раз обходячи башточку. — А тепер ходжу по ній ногами.
Не «щось схоже на». Не демка для галочки, не картинка, на яку можна тільки дивитися. Саме та штука, про яку він рік думав як про недосяжну, — і вона слухається його рук, просто зараз. Принаймні її перша частина.
4. Результат: робочий проєкт
І просто посеред цього його смикає думка. Не виходячи зі світу, він відкриває поруч другу вкладку — те саме ранкове відео з першого дня. Перемотує до дошки бажань, до кривуватого скріну в куті. Ставить два екрани впритул.
Ліворуч — кубик із дошки його майбутнього. Праворуч — те, по чому він щойно ходив.
Вони однакові.
Тьома переводить очі з одного на інше й назад. Ті самі блоки. Той самий вигляд від першої особи. Та сама кубічна земля до горизонту. Рік тому старший Тьома ковзнув по цьому скріну мимохідь і кинув: «це все у тебе могло бути в майбутньому».
— «У майбутньому», — повторює Тьома і хмикає. — Ну от воно і настало. Сьогодні.
У перший день між цим кубиком на дошці й ним самим лежала прірва, яку він навіть виміряти не міг: за плечима — нуль, ані рядка коду, ані жодної зібраної речі. Тоді він би не повірив ані на секунду. Буркнув би й закрив.
А дістався він сюди не дивом. Тим самим шляхом, що до змійки, до лендингу, до радара: захотів, зрізав мрію до посильного ТЗ, сформулював задачу словами, агент зібрав, запустив, перевірив руками. Той самий конвеєр — просто цього разу на іншому його кінці опинилася не іграшка, а та сама неможлива мрія.
— Нехай і руками агента, — каже він уголос. — Нехай маленьке. Нехай крива башточка з десяти блоків. Але зібрав-таки я. Сам захотів, сам поставив задачу, сам довів.
Рік тому він би таке без сарказму не сказав. А зараз — узяв і зробив.
5. Той самий прийом на великих задачах
І тут його накриває друга хвиля — уже не про минуле, а про майбутнє. Раз гола коробка з кубів зібралася за пів години — а що, якщо не зупинятися? Він відкриває чат і, не збираючись поки нічого запускати, накидає Сашкові наступну, вже повну мрію з дитинства:
На майбутнє — прикидка. Хочу доростити цей світ до GTA в кубах:
машини, на яких можна їздити; місто з блочних будівель;
перехожі; день змінюється ніччю; місії.
Сашко відповідає спокійно, без «неможливо»:
— Кожен пункт — окремий шмат роботи, і кожен можна розвʼязати: фізика авто, генерація міста, прості боти-перехожі, цикл дня і ночі. Збирається тим самим способом — по одній фічі за один прохід, на готових бібліотеках. Не за день, але збирається.
Тьома перечитує і ловить дивний спокій. Рік тому «GTA з кубиків» було чарівним заклинанням, за яким — порожнеча і думка «мені таке ніколи не потягнути». А зараз під тими самими словами — список задач, кожна по плечу. Мрія перестала бути недосяжною і стала просто роботою, яку потрібно зробити. Він закриває чат: сьогодні — ядро, решта потім. Але тепер він упевнений, що «потім» справді буде.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ