Найти в Дзене
КОТ рекомендует =)

КИБЕР посиделки.

Настало время захватывающих историй. Заварите чай, протрите пыль с верного "Зухеля", и не забудьте выключить модем после загрузки этой страницы, ведь карточка на доступ в сеть не бесконечная. XD
Давайте заглянем в детство ребят, живших в 90-е годы.
Пятница.
После занятий во вторую смену, возвращаясь домой, вы видите, как ваш друг спешит домой, будто к нему таки прилетел волшебник в голубом вертолёте, оборудованном кинопроектором и годовым запасом эскимо.
Нагоняя товарища, дабы узнать о причинах столь невероятной радости, он по секрету говорит: "У нас дома теперь есть компьютер. Тот самый, АйБиЭм!"
И ваш мир переворачивается с ног на голову.
Неужели прямо сейчас выдался шанс хотя бы посмотреть на те дорогущие белые ящики, что показывали в передачах вроде "До 16 и старше"?
Разумеется, вы напрашиваетесь к нему домой, ведь возможность упускать нельзя.
И вот, спустя 15 минут вы и ваш одноклассник сидите у него дома и пьёте тëплый чай, у него в квартире, после чего идёте к папе вашего друг

Настало время захватывающих историй. Заварите чай, протрите пыль с верного "Зухеля", и не забудьте выключить модем после загрузки этой страницы, ведь карточка на доступ в сеть не бесконечная. XD

Давайте заглянем в детство ребят, живших в 90-е годы.

Пятница.
После занятий во вторую смену, возвращаясь домой, вы видите, как ваш друг спешит домой, будто к нему таки прилетел волшебник в голубом вертолёте, оборудованном кинопроектором и годовым запасом эскимо.
Нагоняя товарища, дабы узнать о причинах столь невероятной радости, он по секрету говорит: "У нас дома теперь есть компьютер. Тот самый, АйБиЭм!"
И ваш мир переворачивается с ног на голову.
Неужели прямо сейчас выдался шанс хотя бы посмотреть на те дорогущие белые ящики, что показывали в передачах вроде "До 16 и старше"?
Разумеется, вы напрашиваетесь к нему домой, ведь возможность упускать нельзя.
И вот, спустя 15 минут вы и ваш одноклассник сидите у него дома и пьёте тëплый чай, у него в квартире, после чего идёте к папе вашего друга, чтобы путём использования секретной техники "Милые глазки Кота в сапогах" упросить его поиграть на сей чудо-машине.
А он и не против, ведь сам любитель вечерами поглядеть в кинескопный монитор и пощёлкать клавишами старой, пусть и немного "дубовой", клавиатуры.
После запуска, непродолжительного шуршания дискетного привода и попискивания системного динамика на странном экране Award BIOS перед вами тремя возникает странная синяя штука под названием "Нортон", разделённая на 2 стороны, словно тетрадка.
Пара десятков нажатий клавиш руками бывалого админа, и вы уже видите напряжённую сцену, где какой-то человек с пистолетом стоит за углом в помещении, где стены синего цвета, поджидая другого человека в коричневой одежде и каске.
"Вот, игра про Штирлица" - говорит папа вашего друга.
И вы по очереди, меняясь после каждого проигрыша, пытаетесь помочь герою выбраться из застенков ужасной темницы, в неравных боях одолевая врагов или стараясь их перехитрить.
Так проходит час-другой..
Домой вы возвращаетесь поздно, за что получаете нагоняй от родителей. Но надолго в голове останутся впечатления от игры и мысль: "Да это же управляемый мультик, ещё и с видом из глаз!"
КИБЕР посиделки. Часть 1., изображение №2
Вспомнили?

-2

Да, сейчас многие знатоки старых игр скажут, что это была Wolfenstein 3D, которую разработала компания Id Software, что это один из первых популярных шутеров от первого лица и прочие скучные факты.

Мы же поговорим о технической части. Так сказать, пороемся под капотом у этого заморского чуда из кода на Си и капельке Ассемблера.

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

То, что мы видим на экране - лишь проекция объëмного пространства относительно точки обзора - т.н. камеры.

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

Снова слышны возгласы знатоков: "Этот вид графики уже давно использовался! Вон, на Спектруме симулятор космических путешествий Elite был с такой же 'проволочной' графикой, но ведь работал же!"

Знаю, знаю, работал. Но всего лишь в 10-15 кадров на телевизоре/мониторе в 60 Гц, в то время как движок Wolf3D выдавал максимум плавности.

Безусловно, сравнивать ZX Spectrum и IBM PC-совместимые ЭВМ - идея так себе, ввиду их разницы в мощности, но стоит заметить, что стены и объекты в играх на движке Wolf3D имеют текстуры - изображения, накладываемые на полигоны.

В противовес можно заявить, что у Elite тоже был порт на IBM PC, но там текстурирование останавливалось на заливке граней.

Но что-то мы отвлеклись от основной темы - разбора движка, который каким-то чудом не только выдавал цветную и объëмную картинку, но ещë и делал это максимально быстро.

Чудеса? Мистика? Чëрная магия? Обыкновенная геометрия.
Видите ли, на самом деле этот движок... Не трëхмерный.

Это всего лишь иллюзия объëма, основанная на особенностях зрительного восприятия.

Люди привыкли, что если известны габариты какого-либо предмета, но он кажется маленьким, то это не предмет маленький, а расстояние от него до наблюдателя большое.

Правила перспективы в изобразительном искусстве относятся именно к нашей теме.

Мелкое - далеко, а большое - близко.

Но как реализовать в коде отображение стен?
Здесь на помощь приходит интереснейший метод бросания лучей - рейкастинг.

Если вы знаете, что такое лидар или лучевой дальномер, то многое прояснится уже сейчас, ибо рейкастинг имитирует поведение дальномера, но уже на геометрической плоскости. Направление же лучей для замера расстояния определялось при помощи синуса и косинуса.

Для ускорения алгоритма использовалось деление плоскости на квадраты, расположенные в виде сетки. В свою очередь, это накладывало ограничения на геометрию локаций, поскольку стены могли быть только в виде квадратов, а углы, следовательно, всегда были равны 90°.

Сначала вся нижняя половина кадра закрашивалась цветом "пола", а верхняя - цветом "потолка".

Именно цветом, а не текстурой, попрошу заметить.

Затем из точки каждый кадр выпускалось множество лучей, ровно по количеству столбцов пикселей.

Каждый луч замерял расстояние, блок стены и еë сторону, на которую попадал.

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

В конечном итоге, длинный алгоритм с построением полигональных моделей и наложением текстур упрощался до:

1) Пустить вереницу лучей.

2) Поделить, какой из них с какой стеной и стороной стены столкнулся.

3) Нарисовать несколько трапеций.

4) По-быстрому закрасить трапеции текстурами.

Тем самым, была достигнута иллюзия 3d-вида от первого лица (из глаз).

Помогло также то, что разрешение экрана не превышало 320х240 пикселей, а игровое окно - и того меньше.

Поэтому текстуры накладывались не сказать чтобы точно, но на мелком экране это не сильно бросалось в глаза.

Не обошлось и без нюансов.

Тригонометрические вычисления требовали работы с очень длинными десятичными дробями. Аналогом их на ЭВМ были "числа с плавающей запятой" вычисления с которыми были в разы медленнее, чем с обычными числами.

Тут авторов и осенило - а что, если поделить целую клетку на плоскости на подклетки, 256х256, а в случае, если получения бесконечной дроби не избежать, просто округлять до ближайшего значения?

Такая уловка изрядно ускорила код, позволив реализовать дальнейшие шаги в обработке кадра.

Итак, движок умеет рисовать пол и потолок, определять расстояние до стен и текстурировать их.

А враги и предметы? Как с ними быть?
И тут гений инженерной мысли не сдался.

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

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

Пожалуй, недостатками данного алгоритма были:

1) Тормоза на открытом пространстве.

2) Тормоза и графические "артефакты" на текстурах врагов и объектах при большом и одновременном наличии их в кадре.

3) Эффект "сколько труп врага не обходи - а ноги в сторону игрока смотрят".

На тот момент даже эти недостатки не были значительными и устранялись грамотным дизайном уровней, что позволило движку от Wolfenstein 3D прожить довольно долго, ведь на нëм вышло много иных интересных игр, вроде Blake Stone или Catacomb 3D.

Автор текста - Holdwig

#КИБЕР #игры #компьютер