Эпиграф: "...он все равно нифига не сделает..." (с). Всем привет!
Думаю, многие из вас видели фрагмуви, в которых в особо красочных моментах камера показывает жертву крупным планом, либо летит вслед за пулей\стрелой\ракетой, или же просто кружит по карте в разных направлениях. Сегодня я поделюсь с вами всем, что знаю по этому вопросу и расскажу, как полет можно осуществить при помощи встроенного в игру инструмента под названием Demo Editor. Итак, у вас есть запись игры с крутым моментом, и вы бы очень хотели вставить его в будущий мув. Запускайте демку командой playdemo <имя демки>.dem, после чего загрузится, собственно, сама демка и начнет проигрываться. Чтобы попасть в меню Editor'a, нажмите на клавиатуре комбинацию клавиш Shift+F2, или наберите в консоли demoui. Перед вами появилось окошко с названием Demo Playback. В нем вы можете увидеть ползунок, меняющий скорость воспроизведения, время, тик (кадр) демки в данный момент, кнопку Play\Resume, кнопки ускоренного воспроизведения назад\вперед (соответственно, <<, <, >, >>), кнопки, возвращающие вас в начало или переносящие в конец демки (|<, >|), кнопку Goto с окошком справа, в которой можно указать тик, на который вам нужно попасть при воспроизведении, кнопку Drive, позволяющую в зажатом состоянии лететь по карте во время воспроизведения, кнопку Edit, меню которой позволит задавать запуск различных команд при воспроизведении, выводить текст на экран, затемнять\осветлять экран и т.д., а также кнопку Smooth, меню которой позволит осуществить полет камеры по ключевым точкам:
.
Итак, Smoother. Нажмите на кнопку, перед вами появится меню с надписью Demo Shoother, в котором можно увидеть множество разных кнопочек и окошек; расскажу подробнее о ключевых.
Окошки Start Tick и End Tick отвечают за фрагмент, в котором будет осуществляться управление полетом камеры, кнопка Jump To с окошком позволит "перепрыгнуть" на нужный тик, кнопки -key и +key, закрепляющие камеру в выбранной позиции с учетом направления, Show Original, показывающую движение камеры игрока в выбранном отрезке, Show Proceed, показывающую движение камеры с измененными координатами в данном отрезке:
.
Чтобы сделать полет камеры, для начала нужно будет выбрать отрезок в тиках, в рамках которого и будут меняться координаты. Но сначала нужно нажать на кнопку Reload, сбрасывающую любые изменения и позволяющую начать работу. После чего вставьте начало и конец отрезка в окошки Start Tick и End Tick, после чего нажмите Select, чтобы задействовать выбранный отрезок. Если все сделано правильно, вы увидите белую линию, показывающую движение камеры игрока в демке:
.
Чтобы попасть в нужный тик (скажем, в начало фрагмента), воспользуйтесь кнопкой Jump To с выбором тика.
ВНИМАНИЕ! Jump To часто глючит и кидает на 30-150 тиков от нужного, поэтому если вверху окна (под надписью Demo Smoother) вы увидели не тот стартовый тик, просто понажимайте << или >>
Итак, вы на нужном тике. Нажмите Drive, после чего зажмите +key, прилетите в нужную вам точку, смотря в нужную сторону, и отпустите +key. Все, камера закреплена в выбранном тике в данной точке. Делать только так!! Если просто зажать левую кнопку мышки при полете, а, прилетев в нужную точку, нажать +key, то камера встанет строго в горизонтальном направлении (что не всегда удобно) и нужно будет нажать -key, находясь в выбранном тике, чтобы убрать координаты, а затем начинать сначала (кстати, как правило при полете за стрелой\ракетой стартовый тик находится в "игроке", поэтому можно просто нажать +key в выбранном тике и камера закрепится). Если все сделано верно, то, отлетев с нажатой Drive чуть назад, вы увидите бирюзовый кубик с красным отрезком (для первого тика, и зеленый с зеленым отрезком для последующих), показывающий положение и направление камеры на данном тике:
.
Для установки камеры в промежуточных точках делаете все так же, как в предыдущем абзаце - выбираете тик, вылетаете в нужную точку, зажав +key, отпускаете +key. При этом вы увидите зеленую линию между двумя тиками, по которой и будет лететь камера:
.
Задав все тики (кстати, если вы установили камеру в последнем нужном тике, а время до конца фрагмента еще осталось, то камера просто будет "смотреть" в последнюю точку, пока не закончится редактируемый врагмент), вы сможете увидеть зеленую линию, по которой и будет лететь камера (зеленые кубики видно сквозь стену, так что если потеряли начало, его всегда можно легко найти):
.
Тепеть нам нужно сделать так, чтобы камера плавно летела по выбранной траектории и также плавно меняла направления обзора. для этого в меню нажмите на Process, после чего на Spline Origins и Spline Angles (если вдруг после нажатия одного из сплайнов меню Process начинает глючить и после открытия сразу закрываться, нажмите на Show Original или Show Proceed, а потом снова Process). После этого, если внимательно рассмотреть получившуюся линию, на ней вы увидите отрезки зеленого цвета, в направлении которых смотрит камера в каждом тике демки (не только в выбранных):
Все, полет камеры готов! Теперь можно пролететь по созданному маршруту, нажав Show Proceed, и, если все устраивает, нажать на Ok в вернем правом углу демки (при этом демка может как проигрываться, так и быть приостановленной - камера будет летать только в выбранном отрезке независимо от времени, на котором в данный момент находится демка). Измененный вариант сохранится с названием <имя демки>_smooth.dem. Теперь, при просмотре измененного варианта камера полетит по созданному вами маршруту. Если интересно, его можно также посмотреть в меню Smooth, задав тики (белая линия с оранжевыми отрезками показывает первоначальное движение камеры игрока, а белая с фиолетовыми отрезками - уже созданное движение камеры. Кстати, к первоначальному движению игрока вернуться уже нельзя, так что если сделали что-то неправильно, придется начинать заново):
.
Теперь созданный отрезок можно записывать в видеофайл и использовать уже в мувике!
Пара советов.
При создании координат замедляйте воспроизведение, чтобы установить камеру точнее и в нужное время. Иногда на один фрагмент может уходить по полтора-два часа, но результат того стоит.
После завершения работы с тиками, обязательно нажмите Show Proceed, чтобы понять, не забыли ли вы какой-нибуть тик и правильно ли везде поставили камеру.
Теперь я расскажу, как можно вращать камеру при помощи скриптов, и также удалять\приближать ее от\к персонажу.
Для начала опишу некоторые команды, которые я сам для этого использовал (работают только с sv_cheats 1):
thirdperson\firstperson - включение вида от третьего\от первого лица
;
cam_collision 0\1 - при виде от третьего лица камера либо проникает сквозь стены, либо огибает их;
cam_idealyaw - действующий угол поворота камеры вокруг модели в горизонтальной плоскости. На скрине 135 градусов
;
c_minyaw; c_maxyaw (от -360 до 360, больше все равно не имеет смысла ) - минимальный и максимальный пределы предыдущего параметра (можно, кстати, просто обойтись значением c_minyaw для вращения камеры);
cam_idealpitch - действующий угол поворота камеры вокруг модели в вертикальной плоскости, параллельной направлению обзора (на скрине 45 градусов. Сама моделька смотрит прямо, так что если опустить камеру, она будет смотреть вверх):
;
c_minpitch; c_maxpitch (также от -360 до 360) - минимальный и максимальный пределы предыдущего параметра;
cam_idealdist от 0 до 200 (по умолчанию) - расстояние от камеры до модельки игрока (по умолчанию 150, на скринах 0 и 200):
;
c_maxdistance; c_mindistance - минимальный и максимальный пределы предыдущего параметра (без ограничений в действительном числовом диапазоне. Число с кучей порядков не в счет - все равно нифига не увидите );
cam_idealdistright - смещение камеры вправо при положительном значении и влево при отрицательном (также без ограничений. На скрине значение 50):
;
cam_idealdistup - смещение камеры вверх при положительном значении и вниз при отрицательном (без ограничений. На скрине значение -50):
.
Теперь я объясню процесс создания скрипта для вращения\приближения\удаления камеры. В качестве примера возьму полный оборот в горизонтальной плоскости против часовой стрелки. Сначала создайте в папке cfg новый конфиг-файл, в котором будет тело скрипта (в отличие от alias, в такой скрипт помещается столько команд, сколько нужно). После этого пропишите в него сначала пределы c_minyaw; c_maxyaw от 0 до 360, затем с небольшим шагом (градусов в 5) повторяющуюся команду cam_idealyaw со значениями от 0 до 360, вставляя между ними, разумеется, ;, а также wait с нужным значением (чтобы скрипт не проматывался мгновенно; в моем примере я делал wait 5). В итоге в теле файла должно получиться примерно следующее:
c_minyaw 0; wait 5; c_minyaw 5; wait 5; (...); c_minyaw 355; wait 5; c_minyaw 360.
Все, скрипт готов! Можно запустить и проверить в игре. По аналогии делаются приближение, удаление и смещение камеры.
Советы.
В турнирных демках, как правило, стоит на 0 команда sv_allow_wait_command. Всегда после запуска демки выставляйте ее на 1, иначе скрипты будут работать некорректно! То же самое касается и sv_cheats.
Выставляйте значения wait и шаги на ваше усмотрение, но старайтесь, чтобы в итоге движение получалось гладким, то есть шаг должен быть как можно меньше. Да, это муторно и долго, но для хорошего мувика можно постараться.
В принципе, все сприпты и команды можно при записи фрагмента включать вручную, но гораздо проще воспользоваться меню Edit из окна Demo Playback. Нажмите на кнопку, и перед вами появится окошко с надписью Demo Editor, далее New-> в котором можно увидеть множетство подменю, но нас интересует пока что только PlayCommands:
.
Нажмите на него, откроется окно Edit PlayCommands Action. В нем вы увидите строчки Name (задаваемое команде имя), Start on (в котором можно выбрать TimeDontCare - команда будет запускаться при открытии демки, TimeUseTick - запуск команды по тику, TimeUseClock - запуск по времени) и Commands - какие команды будут запускаться в выбранном тике (можно запускать отдельные конфиги командой exec <имя конфига>, а также через ; запускать насколько команд - как при работе с консолью):
.
Чтобы запустить команду, скажем, по тику, выберите в Start On опцию TimeUseTick, задайте нужный тик и пропишите команду. Можно таким образом запустить созданный скрипт, а также просто несколько команд. Если нужно запустить при просмотре демки несколько скриптов по разным тикам, просто создайте несколько позиций PlayCommands.
Советы.
Чтобы повесить на нужный тик любые действия с демками (так как в записи фрагмента нежелательно вызывать меню Demo Editor'а, иначе запишется и оно тоже ), поступайте точно также - создайте позицию PlayCommands с demo_<имя команды> командой.
Старайтесь делать так, чтобы при активации любого скрипта камера поменьше задевала стенки. В противном случае можно установить cam_collision на 1, но тогда нужно следить, чтобы камера не улетала за стенки.
При полете камеры моделька игрока летит с ней же (вот такая вот фича), так что если вы хотите, чтобы модельку не было видно, просто отодвиньте камеру от нее на какое-то расстояние.
При установке полета в Smoother'e, все вышеописанные команды действуют и на позицию камеры. Так что не удивляйтесь, если вы повесите камеру, скажем, на 200 единиц над персонажем, создадите тик с координатами, а зеленый кубик будет далеко под вами - все запишется как надо, только предварительно активируйте команду смещения в меню Edit или вручную.
Опять же, проверяйте, поставлены ли значения sv_allow_wait_command и sv_cheats на 1!
Результатом всех вышеописанных манипуляций служит, например, вот это недавно выложенное на этом сайте видео (работа в Sony Vegas'е минимальна - только музыка, титры и в некоторых местах ускорение воспроизведения): http://www.youtube.com/watch?v=syPrMox0XPY.
Архив со использованными в видео скриптами можно скачать отсюда: http://www.sendspace.com/file/adn5g3.
Пока все. Если узнаю что-то еще, обязательно напишу. Если есть вопросы по теме, обязательно задавайте.
Успехов в освоении!