Vector General

Vector General — серия графических терминалов и название калифорнийской компании, их производившей. Терминалы впервые были представлены в 1969 году и использовались в компьютерных лабораториях до начала 1980-х годов.

Описание

Аппаратное обеспечение

В конце 1960-х годов одной из распространённых попыток повысить производительность графических дисплеев, особенно в 3D, было использование специальных терминалов, которые хранили список векторов во внутренней памяти и затем с помощью аппаратного или программного обеспечения, работающего в контроллере дисплея, обеспечивали базовые преобразования, такие как вращение и масштабирование. Поскольку эти преобразования были относительно простыми, их можно было реализовать в терминале с относительно низкими затратами, тем самым разгружая центральный процессор управляющего компьютера. Системы, выполнявшие хотя бы часть этих операций, включали IDI, Adage и Imlac PDS-1.

Ключевым новшеством терминалов серии VG было использование прямого доступа к памяти (DMA), что позволяло терминалу обращаться к памяти управляющего компьютера. Благодаря этому терминалам не требовалось много собственной памяти, а данные можно было быстро получать без копирования по медленным каналам, как в терминалах на базе последовательного интерфейса, например Tektronix 4010. Недостатком такого подхода было то, что он работал только с машинами, поддерживающими DMA, и только через достаточно дорогой адаптер.

Базовая концепция заключалась в том, что управляющий компьютер вычислял координаты точек 2D- или 3D-модели и представлял их в виде 12-битных значений, обычно хранящихся в 16-битных словах с дополнительными статусными битами. Терминал периодически прерывал работу компьютера, 30–60 раз в секунду, и быстро считывал и отображал данные. Каждая точка поочерёдно загружалась во внутренние регистры для временного хранения, где к ней применялись математические функции масштабирования, переноса и (опционально) вращения, после чего итоговые значения отправлялись на электронно-лучевую трубку (ЭЛТ) для отображения.

Существовало три различных варианта аппаратуры для координатных преобразований. Самая простая система обеспечивала панорамирование и масштабирование 2D-изображений, и терминал с такой конфигурацией назывался Vector General 2D. Другая версия добавляла возможность вращения 2D-изображения вокруг произвольной точки и называлась 2DR (от Rotate). Самой дорогой была версия 3D, обеспечивавшая вращение, панорамирование и масштабирование 3D-векторов. Дополнительно к любой из этих моделей можно было установить генератор символов, что не отражалось в названии.

Квадратные ЭЛТ управлялись непосредственно выходом аппаратуры преобразования, а не традиционным растровым методом. Компания называла этот режим работы «случайным сканированием», хотя в современной литературе он известен как векторный монитор. Было доступно два основных варианта ЭЛТ — с диагональю 17 и 21 дюйм. 21-дюймовая модель также выпускалась в специальной «высокоскоростной» версии с увеличенной скоростью отрисовки. Для обеспечения высокой скорости сканирования в ЭЛТ использовалось электромагнитное отклонение, а не магнитное, как в телевизорах.

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

Принципы отрисовки

Векторы логически представлялись двумя конечными точками в пространстве. Каждая точка определялась двумя или тремя 12-битными значениями, что позволяло описывать координаты от 0 до 4095 по осям X, Y и (опционально) Z. В терминале имелось три 12-битных регистра для хранения значений во время обработки.

Система позволяла представлять векторы в памяти несколькими способами. В самом простом режиме — «абсолютном» — требовалось две точки, по одной на каждый конец вектора. «Относительные» векторы задавались как смещения от предыдущих значений, поэтому для определения вектора требовалась только одна точка, а начальная точка совпадала с концом предыдущего вектора. Это позволяло вдвое сократить количество точек для описания рисунка, если данные были непрерывными, как, например, в линейных графиках. «Инкрементные» векторы ещё больше экономили память, используя только 6 бит на точку, что позволяло упаковывать данные в меньший объём памяти управляющего компьютера. Система могла добавлять значения к старшим или младшим 6 битам предыдущего значения, обеспечивая грубое или точное перемещение. Наконец, «автоинкрементные» векторы ещё больше сокращали требования к памяти, требуя хранения только одного значения, а остальные вычислялись с постоянным приращением при чтении каждой новой точки. Это было похоже на относительные векторы, но одна из осей всегда имела одинаковое смещение. Для построения дуг окружности в системе имелась отдельная схема, что избавляло от необходимости передавать серию точек.

Дисплей мог отображать 32 уровня яркости. Это можно было программировать напрямую, устанавливая значение регистра в терминале, но чаще использовался программируемый режим в 3D, при котором яркость автоматически изменялась по мере отрисовки вектора: элементы, находящиеся дальше по оси Z, отображались менее ярко. Это создавало эффект глубины, при котором передняя часть объекта выглядела ярче. Скорость изменения задавалась через регистр ISR.

Отдельный 12-битный регистр PS хранил коэффициент масштабирования. Если он не использовался, система координат охватывала область примерно вдвое больше экрана, что позволяло реализовать прокрутку изображения. При установке значения в этот регистр координаты в векторных регистрах и системе отрисовки символов умножались на этот коэффициент, обеспечивая эффект масштабирования.

Опциональный генератор символов рисовал символы с помощью набора из пяти аппаратно заданных фигур: окружности, квадрата с вертикальной линией посередине, квадрата с горизонтальной линией, вертикального и горизонтального «песочных часов». Включая и выключая луч при отрисовке этих фигур, система могла формировать любой требуемый символ. Например, буква C рисовалась с помощью окружности, при этом луч выключался на правой стороне; буква D — с помощью окружности с выключением луча слева и дорисовкой вертикальной линии только в центре. Для полного символа требовалось от одного до трёх таких «проходов». В системе были реализованы греческие буквы и математические символы, помимо стандартных символов ASCII.

Программирование

Терминал периодически считывал основную память управляющего компьютера по DMA для обновления изображения. Дополнительная связь осуществлялась через один двунаправленный порт ввода-вывода после создания запроса прерывания с деталями в регистре PIR. Настройки и команды передавались через этот порт в один из 85 регистров терминала.

Например, управляющий компьютер мог установить значение регистра PS, вызвав прерывание с 16-битным сообщением, содержащим номер регистра (в данном случае 17). Терминал отвечал 16-битным сообщением по тому же каналу. Запись данных осуществлялась аналогично, но терминал реагировал на прерывание чтением значения.

Базовый адрес начала списка векторов и смещение в нём хранились в регистрах 14 и 15. Это позволяло реализовать своего рода «перелистывание страниц», записывая отдельные наборы точек в памяти компьютера и мгновенно переключая отображение, изменяя значение регистра 14. Возможности этого метода ограничивались объёмом памяти управляющего компьютера.

Команды отображения имели различные форматы, позволявшие строить не только векторы, но и выполнять различные операции. Например, были инструкции для загрузки данных в определённый регистр (две 16-битные команды: первая — с деталями регистра, вторая — со значением). Другие инструкции выполняли логические операции OR или AND над значениями регистров. Команды отображения можно было смешивать с этими операциями, так что система могла, например, начать отображение части элементов, включить лампу, повернуть изображение, а затем дорисовать дополнительные векторы.

Известные применения

VG3D исторически известен своим использованием в фильме «Звёздные войны», а также важной ролью в развитии систем автоматизированного проектирования (САПР).

В фильме «Звёздные войны»

undefined

Ларри Куба создал два фрагмента компьютерной анимации для фильма «Звёздные войны» на PDP-11/45 с терминалом VG3D. Для покадровой съёмки изображений провод соединял одну из ламп на панели кнопок с затвором камеры. Управляющий компьютер активировал этот сигнал, вызывая срабатывание затвора и продвижение плёнки на один кадр.[1]

Первый фрагмент, показывающий внешний вид «Звезды Смерти», был полностью реализован средствами самого терминала VG3D. Модель представляла собой набор 3D-точек, описывающих контур станции, хранившихся в памяти PDP-11 и построенных алгоритмически с помощью кода генерации кривых языка программирования GRASS. Для перемещения и вращения изображения, как в фильме, программа на GRASS загружала новые значения вращения и масштабирования в регистры терминала и затем запускала камеру.

Второй фрагмент показывал полёт по траншее в финальной атаке — сначала сверху, затем с точки зрения пилота. Его создание было сложнее, поскольку терминал не поддерживал вычисление перспективы, необходимое для этой сцены. Физическая модель траншеи, использовавшаяся при съёмках, состояла из шести элементов, многократно дублировавшихся и собранных в различных комбинациях в единую модель длиной около 12 метров. Куба оцифровал каждый из шести элементов по фотографиям и затем скомбинировал их в более чем 50 U-образных секций. Для каждого кадра пять таких секций располагались по глубине, после чего применялись перспективные преобразования. Добавление новых секций по мере движения видно в фильме. Полученное изображение передавалось на терминал как статическое, после чего запускалась камера. На обработку одного кадра уходило около двух минут.

В армии США

undefined

Майк Мусс вспоминал, что Баллистическая исследовательская лаборатория армии США приобрела компьютер Cyber 173 и три рабочих станции, каждая из которых состояла из терминала VG3D и PDP-11/34. Предполагалось объединить их, но это не удалось, и станции остались неиспользованными. В 1979 году Мусс подключил одну из них и написал программу, создающую вращающийся 3D-куб.

Другой программист получил набор 3D-координат танка XM1 и писал код для вывода на плоттер Calcomp. Он попросил Мусса попробовать вывести изображение на терминал VG, чтобы можно было вращать модель. Сначала изображение было выведено статически на Tektronix 4014, но на следующий день Мусс добился отображения на VG3D, где модель можно было вращать с помощью внутреннего векторного оборудования.

Для армии это было в новинку. На следующий день командующий генерал ARRADCOM прилетел посмотреть демонстрацию. В течение двух недель Мусс постоянно показывал систему офицерам. Демонстрация стала настолько известной, что Мусс смог приступить к разработке BRL-CAD[2].

Примечания

  1. Borrelli, Christopher. Blueprints for 'Star Wars' Death Star were created at UIC (англ.) (23 мая 2017). Архивировано 24 мая 2017 года. Дата обращения: 1 июня 2024.
  2. Overview. BRL-CAD. Дата обращения: 1 июня 2024.

Литература

  • Tom DeFanti, Dan Sandin (1981). David Clark, ed. “Matching the System to the Goals – To TV or not TV”. Computers for Imagemaking [англ.]. Pergamon Press: 39—55. ISBN 9781483294636. Дата обращения 2024-06-01.