Это база: Зачем нужна математика в повседневной жизни - Йэн Стюарт
Шрифт:
Интервал:
Закладка:
Чтобы заставить звездолет двигаться, мультипликатор меняет определяющие его числа нужным образом. Например, чтобы переместить его в новую точку, ко всем точкам прибавляют фиксированную тройку чисел (вектор смещения), тогда как связи внутри объекта остаются неизменными. Затем этот новый список чисел вновь отрисовывают, чтобы получить следующий кадр, и т. д. Прибавление вектора – операция простая и быстрая, но объекты могут также вращаться в пространстве. Они могут поворачиваться вокруг любой оси, и направление оси тоже может меняться по мере движения объекта. Повороты также меняют список чисел, но более сложным образом.
Довольно часто мультипликатор знает, откуда объект начинает движение (скажем, с поверхности Земли) и куда он должен переместиться (скажем, вдоль линии, ведущей к далекой Луне). Принципиально важно и точное положение двумерного экрана, потому что именно его видит зритель. Он должен выглядеть достаточно художественно или увлекательно, в зависимости от ситуации. Поэтому обе локации, начальная и конечная, тоже представлены тщательно рассчитанными списками чисел. Если характер движения в промежутке между ними не так важен, компьютер может получить задание интерполировать объект между начальной и конечной точками. Тогда два списка объединяются согласно определенному математическому правилу, которое представляет характер перехода от одного к другому. Усреднение каждой пары соответствующих координат, например, дает нам объект посередине между стартом и финишем. Однако такое слишком сильное упрощение неприемлемо, поскольку оно обычно искажает форму звездолета.
Фокус в том, чтобы воспользоваться для интерполяции жестким движением в пространстве. Можно, например, начать с переноса звездолета в центральную точку и поворота его на 45°. Если проделать это еще раз, звездолет окажется в конечной точке с разворотом на 90° относительно начальной ориентации. Для получения иллюзии непрерывного движения можно раз за разом переносить звездолет на 1/90 дистанции и поворачивать при этом на 1°. На практике, конечно, используются намного более мелкие шаги.
Более отвлеченно мы можем рассматривать эту процедуру с точки зрения «пространства конфигураций» всех движений. Каждая точка в этом пространстве соответствует конкретному движению, причем близкие точки дают близкие движения. Так что последовательность движений, каждое из которых близко к предыдущему, соответствует последовательности точек, каждая из которых близка к предыдущей. Связывая эти точки в упорядоченную цепочку, мы получаем ломаную траекторию в пространстве жестких движений, а очень маленький шаг делает траекторию непрерывной. Так что теперь задача заполнения промежутков от начального изображения до конечного превращается в задачу нахождения маршрута через пространство конфигураций. Если мы хотим, чтобы переход получился гладким, траектория тоже должна быть гладкой, без резких поворотов. Существуют хорошие способы сглаживания ломаной линии.
«Размерность» пространства конфигураций, то есть число координат, необходимых для определения точки в нем, равна шести. В это число входят три измерения для параллельного переноса: по одной координате для каждого направления север-юг, восток-запад, верх-низ. Еще два измерения нужны, чтобы обозначить положение оси вращения, а последнее – для угла вращения. Итак, то, что начиналось как задача о плавном движении объекта в трех измерениях, превращается в задачу о движении точки вдоль гладкой траектории в шести измерениях. Таким образом, преобразованная задача анимации может быть решена при помощи методов из многомерной геометрии, которые помогают строить подходящие траектории.
* * *
В прикладной математике традиционный подход к описанию вращения цельного объекта восходит к Эйлеру. В 1752 году он доказал, что любое движение, в котором не присутствует зеркальное отражение, представляет собой либо параллельный перенос, либо вращение вокруг оси{54}. Однако для расчетов он комбинировал три вращения вокруг трех осей в обычном координатном представлении пространства, сегодня этот метод называют эйлеровыми углами. В качестве примера Шумейк рассматривал ориентацию самолета, которая в аэронавтике определяется тремя углами:
• рысканье относительно вертикальной оси дает направление движения самолета в горизонтальной плоскости;
• тангаж – вращение вокруг горизонтальной оси, проходящей через крылья;
• крен – вращение вокруг оси, проходящей из носа в хвост.
Первая проблема такого представления состоит в том, что принципиально важен порядок, в котором применяются компоненты. Вращения не коммутативны, их нельзя переставлять местами. Вторая проблема в том, что выбор осей не является единственно возможным, и в разных сферах используются разные варианты. Третья – в том, что формулы для объединения двух последовательных вращений, выраженных через эйлеровы углы, чрезвычайно сложны. Эти особенности не вызывают чересчур больших проблем в аэродинамике, где речь идет в основном о силах, действующих на самолет, когда он находится в заданной ориентации, но для компьютерной анимации, где объекты претерпевают последовательности движений, они весьма неудобны.
Шумейк утверждал, что кватернионы обеспечивают хотя и менее непосредственный, но куда более удобный для аниматоров способ определения вращений, особенно когда дело касается заполнения промежутков. Кватернион a + bi + cj + dk расщепляется на скалярную часть a и векторную часть v = bi + cj + dk. Чтобы повернуть вектор v на кватернион q, нужно умножить v на q-1 слева и на q справа, чтобы получить q-1vq. Каким бы ни был q, результатом будет вновь вектор с нулевой скалярной частью. Правила перемножения кватернионов Гамильтона показывают, что любое вращение соответствует единственному кватерниону. Скалярная часть равна косинусу половины угла поворота; векторная часть направлена вдоль оси вращения и имеет длину, равную синусу половины этого угла. Так что кватернион очень аккуратно кодирует всю геометрию вращения, и единственное небольшое неудобство состоит в том, что естественные формулы работают с половиной угла, а не непосредственно с самим углом{55}.
Кватернионы позволяют уйти от искажений, которые могут накопиться, если объект проворачивается многократно, как часто и требуется. Компьютеры способны проводить точные расчеты с целыми числами, но действительные числа не могут быть представлены с абсолютной точностью, так что в результат вкрадываются крохотные ошибки. При обычных методах представления трансформаций объект, которым манипулируют, слегка меняет форму, а глаз хорошо замечает подобные вещи. Если же взять кватернион и слегка изменить в нем числа, результат по-прежнему будет кватернионом и по-прежнему будет представлять вращение, поскольку каждый кватернион представляет определенное вращение. Просто это будет чуть иное вращение, не точно совпадающее с первоначальным. К подобным ошибкам глаз значительно менее чувствителен, кроме того, если они становятся слишком большими, их несложно скомпенсировать.
* * *
Кватернионы – один из способов создания реалистичного движения в трех измерениях, но все, что я описывал до сих пор, относится исключительно к цельным, жестким объектам. К звездолетам, возможно, но к драконам нет. Драконы изгибаются. Как же получить средствами компьютерной графики реалистично движущегося дракона? Общий метод, который я буду описывать, применим не только к драконам, но почти ко всему, и мы возьмем для примера динозавра, потому что у меня есть подходящие