» Фантастика » » Читать онлайн
Страница 226 из 245 Настройки

Теперь система могла быстро просматривать, где и какие конкретно блоки находятся в пределах одного чанка. Допустим, на поверхности у нас трава, под ней камень, слева песок, а сверху — воздух. Получив этот массив данных, система рисовала секцию чанка как один цельный, сшитый меш (полигональная сетка 3D-объекта). Получая на выходе этакую диораму, которая сама по себе представляла небольшой блок кода с матрицей, заполненной байтами информации.

Стоило игроку сломать или поставить блок, как алгоритм тут же обновлял состояние чанка, перепечатывая его геометрию до актуального состояния в реальном времени.

На этом моменте у Коула возник вполне резонный технический вопрос.

— Почему секции мы берем именно шестнадцать на шестнадцать блоков? Почему не тридцать два?

— Потому что графический API (переводчик между кодом и видеокартой) использует шестнадцатибитные индексы для построения меша. Это база, это знать надо!

— Я знаю как работает Апишка! — Недовольно буркнул из наушников Коул.

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

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

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

Как это можно было легко исправить? С помощью простейшей проверки соседа для каждой стороны блока при построении меша. Выглядела логика примерно так:

камень рядом с камнем → сосед есть, грань невидима, *не рисуем;

камень рядом с воздухом → соседа нет, грань нужна, *рисуем.

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

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

— Эта игра популярна среди аутистов? — Спросил Дэвид, спустя пятнадцать минут безотрывной постройки унылого серого домика.

— Не знаю, статистики. — Пожал я плечами. — Но раз тебе нравится, то, значит, видимо, да. Затягивает.

— Очень смешно, Луи Си Кей нашелся тут… — Скривился Выдра, не отрывая взгляда от монитора. Кивнул на принесенную им кипу бумаг на краю стола. — Ознакомься, подпиши. Это готовые договоры на размещение Зомбаков в сторах и еще там договор о пожертвованиях. Хорошо даже, что он есть, сможем меньше налогов заплатить.

— Оу. Нам наконец-то дали возрастной рейтинг? — моментально оживился я, пропустив мимо ушей скучную инфу про налоги.

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

Проставив подписи, я на пинках выгнал упирающегося Дэвида из-за компа, как раз на том моменте, когда юрист уже приступал к возведению оборонительной стены вокруг своего минипоселения. Затянуло его знатно. А ведь это был всего лишь пустой, серый каркас будущей игры!

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

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

Условно, решил я поставить блок камня. В этот момент игра обращалась к блок-менеджеру и считывала следующую инфу:

ID: 3 (камень)

Прочность: 3

Текстура: ячейка 5 из общего атласа