Название, предложенное Гамильтоном для новой системы, – кватернионы – отражает связь с четырьмя измерениями. Он пропагандировал их использование во многих областях математики и физики, показывая, что особый тип кватерниона, его «векторная часть»
Связь с кватернионами возникает потому, что объекты в компьютерной графике требуется вращать в трехмерном пространстве, а лучше всего делать это с помощью кватернионов Гамильтона. Они дают нам простой алгебраический инструмент для быстрого и точного расчета результатов вращения. Гамильтон был бы поражен, поскольку в его время кинематографа не существовало. Старая математика может находить совершенно новые сферы применения.
Предложение использовать кватернионы в компьютерной графике впервые было высказано в 1985 году в статье Кена Шумейка «Анимация вращения при помощи кватернионных кривых»{53}
. Статья начиналась с утверждения: «Твердые тела вертятся и кувыркаются, двигаясь в пространстве. В компьютерной анимации то же самое делают камеры. Вращение этих объектов лучше всего описывается с использованием четырехкоординатной системы, кватернионов». Далее Шумейк заявлял, что кватернионы обладают ключевым преимуществом – позволяют гладко «заполнять промежутки», то есть интерполировать изображения между двумя заданными граничными точками.Прежде чем разбирать подробности, имеет смысл обсудить ряд особенностей компьютерной анимации, которые обусловливают такой подход. Разговор будет сильно упрощенным, к тому же, помимо описанного, используется немало других методов. Фильм или движущееся изображение на компьютерном экране на самом деле представляет собой серию неподвижных изображений, показываемых быстро одно за другим, чтобы создать у зрителя иллюзию движения. На заре мультипликации – вспомните хотя бы мультфильмы Уолта Диснея – художники рисовали каждое из неподвижных изображений на отдельном листе. Для получения реалистичных движений (в той мере, в какой говорящая мышь может быть реалистичной) требовалось огромное мастерство. Существовали приемы, позволявшие упростить процесс. Например, иногда фон делали единым для последовательности кадров и уже на него накладывали изображения объектов, которые менялись в каждом кадре.
Это очень трудоемкий метод, к тому же он плохо подходит для съемки стремительных космических сражений или любой другой высококачественной анимации. Представьте, что вам нужно снять последовательный ряд кадров для фильма или игры, где взаимодействуют несколько звездолетов. Каждый звездолет уже прорисован и проработан (на компьютере) дизайнером. Он представлен в виде фиксированного набора точек в пространстве, связанных воедино и образующих сеть из крохотных треугольничков. Эти треугольнички, в свою очередь, могут быть представлены подходящими списками чисел – координатами точек и закодированной информацией о том, какие точки должны быть соединены друг с другом. Компьютерная программа может «отрисовать» этот набор чисел (и добавить туда другую информацию, например цвет), чтобы получилось двумерное изображение звездолета. Это изображение позволяет увидеть, как будет выглядеть звездолет, когда его поместят в начальное положение и будут рассматривать с определенного направления.
Чтобы заставить звездолет двигаться, мультипликатор меняет определяющие его числа нужным образом. Например, чтобы переместить его в новую точку, ко всем точкам прибавляют фиксированную тройку чисел (вектор смещения), тогда как связи внутри объекта остаются неизменными. Затем этот новый список чисел вновь отрисовывают, чтобы получить следующий кадр, и т. д. Прибавление вектора – операция простая и быстрая, но объекты могут также вращаться в пространстве. Они могут поворачиваться вокруг любой оси, и направление оси тоже может меняться по мере движения объекта. Повороты также меняют список чисел, но более сложным образом.