Чтобы переход выглядел реалистично, нужно выбрать правильное количество ключевых кадров, а также промежуточных точек на переходе между объектами. В [8, с. 64-65] этот принцип описывается как «распределение интервалов времени» (тайминг); принципы его работы объясняются так: «Пусть заданы два ключевых кадра рисунка головы, в первом голова повернута к правому плечу, а во втором - к левому и подбородок слегка приподнят. Можно создать множество разных эффектов, зависящих только от количества промежуточных кадров. Каждый дополнительный кадр придает движению новое значение.
Нет промежуточных кадров Один промежуточный кадр Два промежуточных кадра Три промежуточных кадра Четыре промежуточных кадра Пять промежуточных кадров Шесть промежуточных кадров Семь промежуточных кадров Восемь промежуточных кадров Девять промежуточных кадров Десять промежуточных кадров Персонаж ударили с огромной силой, и у него чуть не оторвалась голова Персонаж ударили кирпичом, скалкой или сковородкой У персонажа нервный тик, мышечный спазм или судорога Персонаж уклоняется от кирпича, скалки, сковородки Персонаж дает резкий приказ («Начинай!») Жест персонажа более дружественный («Поторопись!») Персонаж видит хорошенькую девушку или спортивную машину, о которой мечтает
Персонаж рассматривает какой-либо предмет Персонаж ищет ореховую скорлупку на кухонной полке Персонаж вдумчиво оценивает какой-либо предмет У персонажа при повороте головы растягивается больная мышца
3.4.1. Вершинный шейдер с интерполяцией ючевых кадров Рассматриваемый здесь вершинный шейдер (листинг 13.2) очень похож на шейдер, представленный ранее, за исключением двух моментов: 1) второго набора вершинных данных; 2) вычисления промежуточного значения между двумя наборами вершинных данных, позволяющего получить именно те данные, которые потом будут преобразовываться и использоваться в дальнейших вычислениях.
Листинг 13.2. Вершинный шейдер для интерполяции между двумя объектами
varying float Lightlntensity: varying vec2 TexCoord: