воскресенье, 31 июля 2022 г.

Про ассемблер – 2 (GameDev)


Юрий "yurembo" Язев


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


Вернемся в начало 80-х. Хэви метал, секс, наркотики, множество аппаратных несовместимых между собой платформ, компьютеров: Apple 2, Atari, Amiga, Commodore, IBM PC, Macintosh, еще больше разнообразных игровых консолей — неразбериха в духе времени. Не было защищенного режима и это не про секс. Программы выполнялись в реальном режиме процессора. Программисты имели неограниченный доступ к аппаратным средствам компьютера, и никто не стоял у них на пути: ни процессор, ни операционная система. Чтобы управлять всем этим богатством, необходимо было знать ассемблер, иначе всю мощь из компьютера не выжмешь, а он и так слабенький!


Игры в то время практически целиком писались на ассемблере, — не было ни графических, ни физических библиотек и фреймворков, ни тем более игровых движков. Время шло, появился процессор x386. В нем был реализован защищенный режим, поддержка виртуальной памяти и некоторые другие привычные нам фичи. Использование этих возможностей программистами и их реализация в операционных системах случилась далеко не сразу. Тем не менее, со скрипом и тормозами к выходу Windows 95 все более или менее освоились с защищенным режимом. Каждый процесс теперь располагал виртуальными 4ГБ памяти, все устройства обеспечивались драйверами, управляемыми операционной системой, поэтому лезть на уровень ядра прикладному программисту уже не надо и не имело смысла. Тем временем язык ассемблера перешел из разряда обязательных инструментов к специфическим.


Игроделам такой расклад не понравился, так как защищенный режим не позволял им напрямую обращаться к аппаратуре и выжимать из нее всю мощь. Поэтому они продолжили разрабатывать игры под MS-DOS. Благо Windows располагала полной совместимостью с последней. Уже это не понравилось Microsoft. Они быстренько купили разработчиков Game SDK, переименовали пакет в DirectX SDK и стали его развивать. DirectX SDK позволил разработчикам игр из защищенного режима приблизиться к устройствам — работать с ними на более низком уровне с помощью языков высокого уровня. Игроделы обрадовались, забросили ассемблер и стали его применять только в самых критичных ко времени исполнения вычислениях. Microsoft тоже осталась довольна, так как разрастающаяся библиотека игр способствовала популяризации их новой операционной системы. 


Программисты игровой индустрии обратили внимание, что все игры включают общие элементы и механизмы: визуализатор, контроллер памяти, управление файловыми потоками ввода/вывода, сетевая подсистема, обработчик пользовательского ввода, обработчик физики, искусственный интеллект и прочее. Эти механизмы немногим отличаются от игры к игре. Тогда игроделы смекнули, что эти игровые механизмы можно стандартизировать в виде модулей и не переписывать каждый раз, а только менять параметры для тонкой настройки. Сказано, сделано: набор этих слаженных механизмов стал представлять собой игровой движок. Настройку параметров и более широкое описание игрового процесса возложили на скриптовый язык. Его изучение оказалось еще более простым, чем языка высокого уровня, так как в нем уже не надо было управлять памятью и беспокоиться о других возможных проблемах. Понятно, что с таким положением дел, ассемблер стал еще менее используемым инструментом среди разработчиков игр. Причем тут ассемблер, C/C++ для разработки игр, применяя движок, можно не использовать!


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


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

Комментариев нет:

Отправить комментарий