Utopia Realms ч1: Скалы неизвестного

Utopia Realms ч1: Скалы неизвестного

— «да, я не знаю, что из этого выйдет,
но я в деле, погнали» — сказал я себе, и с разбега прыгнул в бездну.

Вызов

Большую часть своей жизни я посвятил программированию. Нечто волшебное происходит с тобой когда ты делаешь следующий шаг, изучаешь новую технологию, и видишь как твоя программа начинает работать. Мир преображается, хочется дать «пять» самому себе. Начинаешь думать и мечтать о том сколько возможностей теперь открывается перед тобой. Чем больше сил ты тратишь на этот шаг, тем сильнее эффект по его достижению. Изначально новая область кажется очень сложной, практически непостижимой, словно перед тобой неприступная, отвесная скала, и когда ты поднимаешь взгляд, чтобы увидеть вершину этой скалы — конца её не видно, её скрывают густые темные облака. А вдруг её вообще нет? Что-то подобное я ощущал когда захотел разобраться с 3d графикой. Программисты 3d для меня всегда выглядели волшебниками, они ведь могут сделать свою собственную игру, реализовать любой свой замысел, создать свою вселенную!

Еще в школе я пытался штурмовать эту скалу, отчаянно прыгал на неё, хватаясь за каждый малейший доступный мне выступ. В 2003 году, выступая на научно-практической конференции «Шаг в будущее», я занял второе место с работой «10 самых сложных орфографических правил». Первое место заняли 2-ое ребят из другой школы, которые написали свой собственный 3D движок на QBASIC. Для школьников это было нереально круто, очевидно, мне утерли нос. Пытаясь повторить их результат, я собирал всё с нуля, строил теории, прототипы, но ничего не работало. Моих познаний просто не хватало чтобы написать 3D движок. Тогда я оставил попытки, но, конечно же, не забыл об этом.

11 «Б», перед защитой, Я, Ринат Закиров, Роман Беляев, Лера Трусова и Ксюша Галанина
Защита нашей работы
Участники конференции «Шаг в будущее 2003», обратите внимание на 2х парней в очках — это они взяли 1 место

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

Высшая математика

Как водится, высшую математику в школах не преподают, но преподают в ВУЗе, куда мне удалось попасть, благодаря тому самому второму призовому месту на конференции. Я получил сертификат, который засчитывался как 5-ка за вступительный экзамен по математике. Он был просто спасительным для меня, так как алгебру я запустил основательно и сдать экзамен своими силами не смог бы даже на 3.

Поступив в вуз, я пытался наверстать упущенное и по началу честно делал все домашние задания. Длилось это не долго, очень быстро я перестал понимать что происходит. Лекции в КузГТУ по вышке тогда выглядели следующим образом. Собирается лекционная аудитория, преподаватель начинает читать книжку и записывать формулы на доске. Вся аудитория старательно переписывает это к себе в тетрадку. Мне показалось это неэффективным. Я вычислил название книжек у преподавателя и купил себе такие же. Теперь на лекциях я просто следил за тем местом откуда преподаватель надиктовывал все аудитории.

те самые книжки по вышке

Отсутствие прочной школьной базы не позволило мне успевать за темпом. Я поплыл. Апогеем этого стал последний экзамен. Несмотря на то что я потратил много времени на подготовку, решить что-то по-прежнему было за пределами моих возможностей. Итак, день экзамена настал. Чтобы сдать экзамен требовалось решить 5 задач, и каждое решение считалось за 1 балл. У меня был листок бумаги в клеточку и черная гелевая ручка. Преподавателей, принимающих экзамен, было два. Они совместно проверяли работы, подходя то к одному студенту, то к другому. Каждую проверенную задачу они помечали на листке с решением, ставя + или — обведенные в кружок. Я вошел в аудиторию одним из первых, и принялся решать задачи. Подзывать преподавателей можно было несколько раз, и первая же проверка показала, что я смог решить правильно целых 0 задач из 5. Этого явно было мало чтобы сдать экзамен. Я принялся решать задачи заново, подзывая то одного преподавателя, то другого. Во время проверки я выдавал всё что сумел подготовить заранее — рассказывал основные принципы и даже правильно отвечал на некоторые наводящие вопросы. Тем не менее, новые решения также оказывались не правильными. Время экзамена подходило к концу, в аудитории оставались последние студенты, а на моём листке стояло 8 знаков минус. Мрачные картины начинали всё чаще проплывать в моей голове — мне придется пересдавать экзамен, меня оставят на осень, это конец.

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

— Ладно, Поздняков, поставлю вам тройку, идите уже.

 

ФУУУУХ. ВСЁ. Всё позади. 2 года обучения, больше мы с ней не увидимся. Выходя из аудитории, меня всё ещё слегка потряхивало, давно не испытывал такого облегчения. Моя скала 3D графики всё еще была не покоренной, и сейчас, казалась ещё круче.

Minecraft

Окончив КузГТУ и устроившись работать в компанию Good Line, я занимался проектом «Оранжевый Город». О-ГО — это такой каталог содержимого файлообменной сети. Одним из ключевых факторов его успеха было привлечение пользователей к наполнению каталога. У каждого пользователя была возможность выложить туда что-то, причем предоставлялись широкие возможности для творчества, ты мог оформить свой «релиз» так как тебе хочется и представить его на суд публике. Тебе было интересно отвечать на комментарии к твоему релизу, обновлять его и видеть реальную благодарность сообщества в виде «плюсиков» и растущего статуса.

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

Наблюдая за бешеной популярностью этой игры я загорелся. Что может быть проще — рисуй себе кубики с низким разрешением, нагоняй туда пользователей и греби бабло лопатой. Тем более у minecraft было 2 «критических недостатка» — написано на java, вместо моего любимого C#, и написано не мной!)

Вторая попытка

Решено, я сделаю свой «правильный» майнкрафт. Я бросился изучать 3D графику на примере работы с DirectX. Нашёл какую-то книжку и принялся делать то, что там написано. По началу тебе ничего не понятно, рассказывают о каких-то вьюпортах, проекциях, текстурном конвеере. Голова начинает пухнуть, хочется бросить всё это к чертям и убежать. Но ты двигаешься дальше, у тебя есть цель. Пускай половина вещей, о которых рассказывают, не понятна. Просто двигаемся дальше.

Небольшая зарисовка из того времени. Допустим, тебе нужно нарисовать… треугольник! Что может быть проще? Сначала создаешь устройство, инициализируешь цепочку переключения, устанавливаешь вьюпорт, описываешь структуру вершин, определяешь вершины, обновляешь буффер вершин, описываешь входную структуру для шейдеров, пишешь вершинный шейдер, а затем уже и пиксельный шейдер. Запускаешь и…

Пустой экран. Да, хрен тебе, а не треугольник.

Отсутствие видимого результата, наверное, наиболее серьёзный демотиватор для обучающегося. Таких моментов в 3d разработке достаточно много. Ты где-то допускаешь ошибку, и, чтобы найти её, нужно очень хорошо понимать что происходит. Иногда, вместо пустоты, ты будешь видеть точку, линию, но точно не то что ты ожидал. Приходится биться головой о стену, перечитывать документацию и переписывать код заново. Сорваться в этот момент, мне кажется, проще всего. Сложно сказать, что меня тогда удержало. Уж очень хотелось получить в свой арсенал средства для работы с 3d. Просто двигаемся дальше. Через некоторое время, что-то начинает получаться.

Примерно через пару недель после начала изучения, я смог нарисовать массив из 3d кубиков и «летать» камерой среди них, словно приведение. В голове появилось понимание основных принципов работы с 3d можно было двигаться дальше. Самым удивительным для меня остается тот момент, когда, скажем, через месяц, получив первые успешные результаты, забравшись на первый выступ, где можно перевести дух, ты оглядываешься назад и понимаешь, что всё здесь теперь так просто, понятно и знакомо. Скала превратилась в небольшой выступ, который ты уже едва замечаешь.

Продолжение следует…

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

  • Alexandr K

    А что было не заюзать Unity и не пилить ничего с нуля? Или там Unreal Engine?

    • ErtyHackward

      Обычные игровые движки не очень подходят под наши задачи — у нас бесконечный изменяемый воксельный мир. Ты не забываешь что мы программисты?! Хорошо хоть DirectX взяли а не свой рендерер написали)

      Ну и когда мы начинали, юнити был в зачаточном состоянии.