Урок 3: Анимация камер и обьектов сцены. Управление треками.

Учебные файлы для данного урока: VS_Tutorial_03.max, VS_Tutorial_03.vsp (скачать все материалы).

Для начала модифицируем нашу сцену в 3DS Max.


Создадим очень простую анимацию для камеры "Camera01" - просто "отъедем" немного от "актёра" (кадры: с 0 по 20).

Создадим "пустышку" (Dummy) с именем ROT, совместим её положение с положением "актёра" и прилинкуем к "ROT" камеру № 3. Затем повернём "ROT" (кадры: с 0 по 45).

Создадим ещё 3 Dummy-объекта: CAM2_1, CAM2_2, CAM2_3.

CAM2_3 повернём на 360 градусов (кадры: с 0 по 30).

CAM2_2 передвинем в направлении "от актёра" (кадры: с 0 по 30).

CAM2_1 передвинем параллельно "актёру" (кадры: с 0 по 50).

Теперь (на кадре 0!) прилинкуем Camera02 к CAM2_3, CAM2_3 к CAM2_2, CAM2_2 к CAM2_1.

И, наконец, сделаем подскок и падение для сферы (кадры: с 0 по 30). Это движение будет включать не только повороты и перемещения, но и масштабирование.

 

Больше ничего в 3DS Max для этого урока делать не будем. Поэтому экспортируем сцену в формат виртуальной студии (VS_Tutorial_03.3d) и запускаем программу HotActions.

Создадим новый проект (как мы уже научились на прошлом уроке). Однако в экшен "Init" добавим кое-какие новые строки. Теперь он будет выглядеть так:

:DATA.OPEN = VS_Tutorial_03.3d
:DATA.CURRENT.CAMERA = "Camera01"
:DATA.CURRENT.NODE = "Camera01"

:RENDER.VIDEO.LIVE_1.CREATE = 1
:RENDER.VIDEO.LIVE_1.FORMAT = ALPHA
:RENDER.VIDEO.LIVE_1.START = 1
:RENDER.MATERIAL.videomaterial_1.SOURCE = "LIVE_1"

:TRACK.ZOOM.NODE = Camera01
:TRACK.ROTATE.NODE = ROT
:TRACK.CAM2_TILT.NODE = CAM2_3
:TRACK.CAM2_ZOOM.NODE = CAM2_2
:TRACK.CAM2_SHIFT.NODE= CAM2_1
:TRACK.JUMP.NODE= Sphere

:TRACK.ZOOM.START = 0
:TRACK.ROTATE.START = 0
:TRACK.CAM2_TILT.START = 0
:TRACK.CAM2_ZOOM.START = 0
:TRACK.CAM2_SHIFT.START = 0
:TRACK.JUMP.START= 0

:DATA.PLAY = 1

Строкой типа :TRACK.TRACK_NAME.NODE = node_name мы "создали" трэк для анимированного обьекта сцены "node_name" и присвоили ему имя "TRACK_NAME". В дальнейшем во всех создаваемых нами командах для треков мы будем использовать эти присвоенные имена.

Строкой типа :TRACK.TRACK_NAME.START = N мы устанавливаем начальную позицию трека на кадре с номером N.

Команда :DATA.PLAY = 1 разрешает выполнение треков. Соответственно, :DATA.PLAY = 0 - остановит все треки. Вообще говоря, при переходе в "Live Mode", эта команда выполняется автоматически, но для того, чтобы мы могли просматривать анимацию и в режиме редактирования, всё же напишем эту команду в "Init" (кашу маслом не испортишь).

Теперь можно переходить и непосредственно к созданию экшенов управления треками. Попробуем "заанимировать" камеру с именем "Camera01". Для этого напишем следующий экшен:

ACTION.START= "Camera1"
SYS.WAIT = "ACTION.Camera1"

TRACK.ZOOM.START=0,20

Смысл первой строки нам уже понятен - она просто вызывает выполнение уже имеющегося у нас экшена "Camera1", то есть камера с именем "Camera01" станет "текущей". А вот вторая строка означает, что все нижеследующие команды в этом экшене будут исполняться только после выполнения экшена "Camera1". При отсутствии команд ожидания в экшене, все команды, имеющиеся в его "теле", запустятся одновременно.

И, наконец, третья команда запускает выполнение трека с нулевого кадра до двадцатого. А если бы Вы в правой части, например, вместо цифр 0 , 20 написали бы 16 , 3 трек проигрался бы задом наперёд, причём с 16-го кадра по 3-ий. Ну так и поступим. Соорудим экшен для "наезда камеры" :

ACTION.START= "Camera1"
SYS.WAIT = "ACTION.Camera1"

TRACK.ZOOM.START = 20,0

Кстати, если вы забыли номера кадров анимации, ничего страшного. Просто выберите левой кнопкой мыши Ваш анимированный объект в окне сцены, а в окне свойств - закладку "Track":


Теперь создадим кнопочки, соответствующие нашим "новоиспечённым" экшенам (это мы научились легко делать в предыдущем уроке) и проверим, как они действуют. Давим на кнопочку "Zoom- start" отъезжаем, на кнопочку "Zoom+ start" - наезжаем. А вот если мы уже "наехали" и в прямом эфире по ошибке давим опять "Zoom+ start". Получается какой-то дрыг-дрыг... Можно ли этого избежать? Легко. Просто используем команду GOTO вместо START:

ACTION.START= "Camera1"
SYS.WAIT = "ACTION.Camera1"

TRACK.ZOOM.GOTO = 0

В данном случае "камера" "поедет" по треку от того номера кадра, где она в настоящий момент находится к кадру номер "0". Так что, если она уже находилась на нужном кадре, то ничего и не произойдёт, хоть зажмись на эту кнопочку.

Кстати, если в команде TRACK.TRACK_NAME.START = N1 , N2 в правой части вместо двух чисел через запятую написать одно число (N3), то наш анимированный объект мгновенно "прыгнет" на кадр с номером N3. Вот Вам и третий способ управления треками. Таким способом, например, можно заменить любое количество виртуальных камер в сцене на одну - просто "перескакивая" на соответствующие кадры заранее созданного трека.

В проекте VS_Tutorial_03.vsp Вы найдёте и более сложные примеры управления созданными нами треками. Это Вы теперь легко разберёте самостоятельно. А здесь мы лучше остановимся на следующей задаче: предположим, вам нужно, чтобы по ходу передачи некий объект совершал некие периодические движения (например, мячик запрыгал) и делал бы он это столько времени, сколько необходимо.

Первое, что приходит в голову - создать в 3DS Max трек, скажем, на 100 000 кадров, в котором "мячик" однообразно подпрыгивает множество раз. А затем для запуска прыжков использовать команду TRACK.МЯЧИК.START = 0, 100 000 , а для остановки команду TRACK.МЯЧИК.STOP = 0. Надо сказать, что это самый дурацкий вариант.

Можно ещё использовать команду TRACK.МЯЧИК.START = 0, 30, 326 . Третья цифра в правой части указывает, сколько раз повторить проигрывание данного трека. Это уже получше, если, конечно, заранее знать, сколько раз наш мяч должен подпрыгнуть (326 - в нашем случае).

Однако самым универсальным способом будет использование команды TRACK.МЯЧИК.LOOP = 1. Эта команда сама по себе не запускает трек, но указывает, что если трек будет запущен, то он будет проигрываться бесконечное число раз, до тех пор, пока не поступит команда TRACK.МЯЧИК.LOOP = 0.

В проекте VS_Tutorial_03.vsp есть пример и для подобной анимации (роль мячика выполняет расположенная за актёром сфера).

 

В следующем уроке мы научимся назначать текстуры и видеопотоки на материалы сцены в реальном времени.

 

к предыдущему урокук следующему уроку