Нарушение границ для рендеринга Забытых Королевств.Baldur’s Gate работают на движке Infinity, созданной по заказу BioWare специально для этой игры. Простой по внешнему виду, Infinity делает сложный Advanced Dungeons & Dragons играбельным с помощью одной только мыши, и использует визуальный стиль, который сводится к куче анимированных спрайтов, идущих поверх некоторых красивых задников.Внешность может быть обманчива. Под этими простыми фонами скрыт глубокий и сложный движок, состоящий из множества различных инструментов и технологий. Он был чрезвычайно продвинутым и в то же время уникальным, хотя заставить его работать так, как того хочет BioWare, было, честно говоря, тем ещё кошмаром.Хотя BioWare сама по себе не была новой студией, команда Baldur’s Gate была почти полностью новичком в игровой индустрии, и многие ее дизайнеры пришли в проект прямо из университета. «Мы звучали как кучка сумасшедших детей: «Давай просто сделаем это! Насколько это может быть сложно?», – объясняет Трент Остер, бывший старший художник Baldur’s Gate, и один из основателей BioWare. «Ответ в том, что это действительно трудно, [и] действительно легко даётся лишь что-то плохое, что замедляет процесс и делает только хуже».Ломая фонBaldur’s Gate славится использованием предварительно визуализированных изометрических фонов, что позволило BioWare представить свой фантастический мир гораздо более детально, чем это было возможно с графикой в реальном времени. Но даже с предварительным воспроизведением каждый из этих фонов имел собственное разрешение 5120×3480 – намного выше, чем у любого компьютера 1998 года, который мог бы воспроизвести это и не взорваться.«Каждое изображение этого массивного фона было нарезано на кусочки размером 64×64, и каждое из них было обработано до собственной маленькой палитры из 256 цветов», – объясняет Остер. «Во время работы [Infinity] будет загружать эти маленькие 64-битные блоки по мере необходимости и преобразует их в 16-битное представление цвета, которое затем будет отображаться на экране».Затем Infinity Engine будет выполнять прототипную версию современной потоковой передачи уровней, добавляя новые фрагменты фона в память по мере продвижения игрока вперед и отбрасывая фрагменты вне экрана, поскольку они больше не нужны. Эта система «управления плитками» была невероятно сложной, требующей огромного объема работы по оптимизации и длительного времени загрузки между экранами.Кроме того, разделение фонов в Baldur’s Gate на плитки увеличило ресурсы и без того огромной игры в геометрической прогрессии. «В то время в большинстве игр было около 100, 200, 500 игровых ресурсов», – говорит Остер. «Baldur’s Gate имели от 20 000 до 30 000. Если вы посчитаете отдельные плитки, которые составляли области, их было сотни тысяч ».Чтобы управлять этими ресурсами, ведущий программист BioWare Скотт Григ создал систему управления памятью под названием Chitin. Это напоминает проектор, который выводит на ваш 4-мегабайтный ПК маленькое окно с гораздо большим набором данных для Baldur’s Gate. Но проблемы начали возникать, когда Григ решил сделать Chitin многопоточным. «Chitin изначально не был многопоточным. Но в процессе развития они разработали систему искусственного интеллекта и систему поиска путей, и часть этого проекта увлеклась идеей многопоточности», – говорит Остер.Теоретически, это был отличный способ разгрузить данные, которые приходилось обрабатывать Infinity, чтобы заставить игру работать. Но в то время многоядерных процессоров не было. «Когда вы продумываете, как хранятся данные в процессоре и как они взаимодействуют, то, что вы только что спроектировали, зачастую является сценарием для бесчисленных сбоев системы», – отмечает Остер.Команда попыталась решить эту проблему, выделив определенные потоки как «критические», что означало, что они должны были завершить свою обработку, прежде чем другие потоки могли начать работу. Но у Baldur’s Gate было более миллиона строк кода, поэтому многие критические потоки не были помечены как таковые, что приводило к огромным проблемам с производительностью. Остер указывает, что в базе кода есть пять отдельных способов, которыми игроки могут инициировать переход между областями. «Во многих случаях это был код, который был почти идентичен, но отличался буквально одним или двумя параметрами».Работа под прикрытиемСреди основных технических проблем были и десятки других. Пользовательский интерфейс Baldur’s Gate не является оверлеем, он грубо вшит в саму игру. Опять же, это было сделано для повышения производительности. «Пользовательский интерфейс Baldur’s Gate достаточно массивный, чтобы закрыть весь экран, поэтому отпадает необходимость рендерить как можно больше фона». Но это также означало, что единственный способ внести изменения в оверлей –изменить кодовую базу игры. Хотите переместить значок из левой части экрана в правую? Так и игру сломать можно.Все это означало, что BioWare создавала для себя проблемы, которые могли быть решены только с помощью брутфорса, проверяя каждую строку кода, кропотливо вырезая объекты на заднем плане, чтобы персонажи могли ходить за стенами. «Подход, который BioWare использовал в то время, заключался в следующем: «Мы не знаем, как правильно это сделать, мы не знаем, как автоматизировать некоторые процессы. Давайте бросим силы на решение проблемы, хорошенько над ней попотеем и проблема исчезнет, - вспоминает Остер.В конечном счёте, такоева реальная история Baldur’s Gate. Испытания Infinity Engine от BioWare были не только техническими, но и физическими. «Это было монументальное достижение в то время», – заключает Остер.