Платформа: All Автор:FantomICW [Смерти Вопреки] Благодарность:Den Stash'у за скрипты для Макса, Malandrinus'у и Ко за скриптовые справки, Flossy Community и другим модмейкерам за поддержку Интро Всем доброго времени суток! Лето началось, а это означает, что все школьники (как я, например ) вышли на каникулы, сели за комп. В этом, однако, есть могут быть плюсы...Я нашел пару недель свободного времени для статьи, которую хотел сделать уже давно. Предварительно был проведен опрос, в котором более 90 голос было отдано именно за эту тему для статьи. Эта статья далеко не идеальна. Но, по крайней мере, эта одна из моих самых больших работ за все время в моддинге, и теперь я могу спокойно, с чистой совестью уходить из коммьюнити, если она кому-то поможет Писалась в лучших традициях, с душой. Приятного чтения!
Общая информация: PPE = postprocess Постпроцессы - это, грубо говоря, цвето-шумовые эффекты экрана актера, которые мы можем наблюдать в большинстве современных шутеров.
Примеры того, чем, вообще, может быть постпроцесс:
"Красный экран" при ранении ГГ
Помутнение экрана в состоянии алкогольного опьянения
Шум и "коричневый экран" от радиоактивного очага
ПНВ
"Зеленый экран" от химикатов
Эффект для сценок, когда ГГ открывает/закрывает глаза
"Белый экран" от свето-шумовой гранаты
"Черный экран" в разных технических моментах
Раздвоение в глазах ГГ
Скриптовые функции В lua_help.script можем найти следующие строки, которые соответствуют действиям с постпроцессами:
Код
function add_pp_effector(string, number, boolean); function remove_pp_effector(number); function set_pp_effector_factor(number, number, number); function set_pp_effector_factor(number, number);
Внимание! Эти движковые функции принадлежат к пространству level (namespace level). Это значит, что их нужно запускать в скриптах таким образом:
Теперь давайте разберем их предназначение и аргументы. В принципе, с первыми двумя все понятно: одна функция запускает эффект, а другая - останавливает.
Аргументыlevel.add_pp_effector
string - путь к ppe-файлу от папки anims.
number - временный story_id эффекта, любое произвольное число.
boolean - true/false - играть зациклено/не зациклено. К примеру, эффект ПНВ проигрывается закциклено, а контузия от удара - не зациклено. Пример:
number - тот самый временный story_id эффекта, который был запущен. Пример:
Код
level.remove_pp_effector(150) --отключаем ппе
Выходит, что мы задаем эффекту свой номер, а потом по этому номеру останавливаем эффект. Все просто, не так ли? С другими двумя функциями все чуть сложнее. По неведомым причинам, разрабы решили назвать две функции одинаково. Единственное их отличие - количество аргументов: 3 и 2. Давайте глянем в исходники движка:
Как видим, в самом движке одна функция называется set_pp_effector_factor (3 аргумента), а другая - set_pp_effector_factor2 (2 аргумента). Обе как бы задают интенсивность эффекту. Смотрим аргументы.
number (int) - story_id нашего уже запущенного эффекта.
number (float) - число от 0 до 1 (дроби, разумеется, поддерживаются), которые означает саму интенсивность.
number (float) - вероятно, скорость перехода от текущей интенсивности к новой, которая указана во втором аргументе. Число от 0 до 1. Параметр изучен мало.
У второй одноименной функции первые два аргумента совпадают, а третий отсутствует. Пример:
Хочу заметить, что разработчики пользовались функцией с двумя аргументами почти во всех случаях. Однако, есть исключение (см. sr_deimos.script, xr_detector.script).
Скриптовый метод создания/запуска эффекта Признаюсь, я этим методом никогда не пользовался, так как не вижу особого смысла. Тем не менее, знать о том, что такой существует - не лишнее. Скажем спасибо Маландринусу и другим ребятам, которые создали по этому делу справку: АМК
Процесс создания PPE-файла, статьи Да, это самое сложное для понимания.
Утилиты:
SDK Postprocess Editor. Увы, по нему уроков я не встречал. В будущем ждите разбор этого редактора от меня. Честно говоря, я хоть и научился там создавать практически юбой эффект, для меня там много чего до сих пор на уровне интуиции и методы тыка. Совет: просматривайте оригинальные файлы, смотрите на значения, смотрите градиенты постпроцессов, смотрите эффект в игре.
Файл gradient_map.psd из архивов концепт-документов Сталкер ЗП. Спасибо людям, которые слили этот архив документации. Вещь очень интересная. Она, кстати, принцип работы градиент-файлов для постпроцессов, которые лежат в textures/grad. Пока этим, однако, никто не воспользовался. В общем, качайте, смотрите, разбирайтесь. Отключайте все ппе-слои, кроме того, что нужен, и получите приблизительную картинку с ним из игры. Ссылка на файл.
Общая информация: ANM = animation (анимация камеры) Анимки камеры - штуки не сложные, на самом деле. Тем не менее, их можно применять по-разному.
Примеры:
Любые шатания экрана.
Легкие движения экрана синхронно с анимками оружия.
Камера кат-сцены от первого лица.
Камера кат-сценки от третьего лица.
Основные скриптовые функции Функции из lua_help.script:
Код
function add_cam_effector(string, number, boolean, string); function add_cam_effector2(string, number, boolean, string, number); function remove_cam_effector(number);
Как и постпроцессы, анимации камеры принадлежат к пространству level, так что запускаем так:
Хорошо, переходим к разбору функций, аргументов. level.remove_cam_effector - тут все просто. А чем же отличаются level.add_cam_effector и level.add_cam_effector2? Дело в том, что анимация камеры может проигрываться либо от текущей позиции ГГ, либо по уже заданным глобальным координатам, которые записываются в anm во время создания полета камера в Level Editor. Так вот, первая функция проигрывает эффект от текущей позиции ГГ, а вторая - по координатам. Иными словами, если нам нужно запустить пошатывание ГГ, то берем первую функцию, а если у нас полет камеры или кат-сцена от первого лица в каком-то обозначенном месте (и нам важно сохранить соответствие координатам), то используем вторую. Кроме того, хочу заметить, что у второй функции появляется дополнительным аргумент в конце.
Аргументыlevel.add_cam_effector
string - путь к anm-файлу от папки anims.
number - временный story_id эффекта, любое произвольное число.
boolean - true/false - играть зациклено/не зациклено.
string - коллбек на окончание анимации камеры, очень интересная вещь. Пример:
Код
level.add_cam_effector("camera_effects\\fusker.anm", 29, false, "") --ГГ ударили прикладом
Как видите, если коллбек на окончание не нужен, то ставим аргумент "". Рассмотрим пример с коллбеком:
Функции xr_effects.script В xr_effects.script тоже есть функции для анимок, которые можно запускать через логику или скриптовым методом:
Код
function run_cam_effector(actor, npc, p) function stop_cam_effector(actor, npc, p) function run_cam_effector_global(actor, npc, p) function cam_effector_callback() --рабочая функция, коллбек на окончание для функций запуска, указанных выше
Если интересно, покопайтесь, посмотрите на аргументы функций. Пример запуска из скрипта показывать нет смысла - можно сразу запускать движковыми функциями.
sr_cutscene Всем квестерам известная схема логики тоже базируется на всех тех функциях, о которых мы говорили. И, кстати, на постэффектах тоже. Давайте посмотрим на саму схему в логике:
Разберем параметры: point и look - вейпоинты, на которых окажется ГГ к окончанию анимации камеры. global_cameffect (bool) - true/false, то есть используем level.add_cam_effector2 или level.add_cam_effector соответственно. pp_effector - постпроцесс во время кат-сцены. Путь от anims, окончание .ppe указывать не надо. cam_effector - файл anm, путь от anims/camera_effects. fov - угол обзора. Работает, если global_cameffect = true. enable_ui_on_end - true/false, включать или нет интерфейс после окончания камеры. outdoor - true/false. Интересный параметр. По сути, проверяет, происходит ли действие на улице. Если на улице и если ГГ во временных рамках 6.00-21.00, то поверх накладывается комплексный эффект brighten, который несколько осветляет общую картинку. Что такое комплексный эффектор, мы разберем позже. Со схемой почти все, но есть еще одна интересная штука: комплексная кат-сцена ака cam_effector_sets.script. Дело в том, что схема, перед тем, как запустить эффект-значение cam_effector, проверяет наличие одноименной таблицы в скрипте cam_effector_sets.script. Разумеется, в этом случае в значении никакого пути от camera_effects нет. Чтобы было понятнее, давайте приведу пример:
Анимку проигрываются по очереди. Параметры в таблице: anim - файл камеры, от anims/camera_effects. looped - true/false, зациклено ли. global_cameffect - как и в самой схеме параметр. enabled - кондлист (условие) проигрывания этой камеры и действие, которые выполняется (к примеру, выдается инфопорция). В общем, если хотите создать фильм на движке X-Ray, вот это вам в помощь . Подробнее по этой системе можете узнать в sr_cutscene.script.
Анимация камеры и анимации оружия Вы когда-нибудь замечали папку anims/camera_effects/weapons? Там лежат анимации камеры, которые синхронизируются с анимациями оружия. Если вы сделали новую анимацию камеры для оружия, то она будет воспроизводиться при двух выполненных условиях: 1. anm лежит в anims/camera_effects/weapons. 2. anm имеет название такое же, как и название самой анимации худ-модели из библиотеки omf/внутри самой модели.
Создания ANM-файла, статьи Почему-то многие пугаются создания камеры, хотя особых причин для этого нет. Да, не самое легкое. Не самое легкое в том плане, что без практики, фейлов и ошибок научиться сложно. Да-да, говорят иногда "философы", что учатся на собственных ошибках только дураки...Так вот, в этом случае - нифига. Только самому пробовать, ошибаться, исправлять, десяток разначинать заново. Зато потом спокойно создаешь самые сложные облеты камеры. Пробуйте, разбирайтесь.
Утилиты:
SDK Level Editor - основной способ.
3DS Max + Den Stash tools - тоже вполне рабочий способ. Спасибо Дену Сташу за плагин экспорта камеры в формате anm.
Вроде есть способ экспортировать камеру из 3DS Maya.
Общая информация: Вот мы и подошли к кульминации всей статьи. Комплексный эффектор - это комплекс, состоящий из anm и ppe.
Что это может быть:
Шатаемся, все двоится
Трясемся, контрик взял за мозги
Секции эффекторов Находятся они в файле configs/misc/postprocess.ltx (хотя там явно не только постпроцессы должны быть). GSC использовали комплексные эффекторы бестолково: постпроцессы оставляли постпроцессами, а камеры - камерами. В чем прикол - непонятно. Может, им удобней было вызывать не файлы, а именно секции. Ладно, давайте разбирать параметры. А нет, сначала покажу, какие эффекторы - косячные:
Они по какой-то другой системе делались. А теперь параметры:
Код
[complex_effector] pp_eff_cyclic = 1 pp_eff_overlap = true pp_eff_name = something.ppe radius_min = 0.7 ;не работает radius_max = 1.0 ;не работает cam_eff_cyclic = 0 cam_eff_name = camera_effects\shell_shock.anm cam_eff_hud_affect = true ;судя по всему, не рабочий snd = characters_voice\human_01\dolg\help\wounded_heavy\help_8 ;не работает
Подробно о рабочих параметрах: pp_eff_cyclic - 0/1, играть постпроцесс незацикленно/зацикленно. pp_eff_overlap - true/false, перекрытие есть/нет. Что это за перекрытие мне пока понять не удалось. Видимо, что-то с отображением при цикличности. pp_eff_name - постпроцесс, расширение указываем, путь от anims. cam_eff_cyclic - 0/1, играть анимацию незацикленно/зацикленно. cam_eff_name - анимация камеры, расширение указываем, путь от anims.
Основные скриптовые функции Функции из lua_help.script:
Код
function add_complex_effector(string, number); function remove_complex_effector(number);
Как видим, все просто, как никогда. Да, тоже пространство level.
Аргументыlevel.add_complex_effector
string - секция эффектора.
number - временный story_id эффекта, любое произвольное число.
number - временный story_id эффекта, любое произвольное число.
Код
level.remove_complex_effector(9789)
Функции xr_effects.script Да, есть такие. Названы, однако, как функции для постпроцессов
Код
function run_postprocess(actor, npc, p) if (p[1]) then if(system_ini():section_exist(p[1])) then local num = 2000 + math.random(100) if(p[2] and type(p[2]) == "number" and p[2]>0) then num = p[2] end printf("adding complex effector [%s], id [%s], from [%s]", p[1], tostring(p[2]), tostring(npc:name())) level.add_complex_effector(p[1], num) else abort("Complex effector section is no set! [%s]", tostring(p[1])) end end end
function stop_postprocess(actor, npc, p) if(p[1] and type(p[1]) == "number" and p[1]>0) then printf("removing complex effector id [%s] from [%s]", tostring(p[1]), tostring(npc:name())) level.remove_complex_effector(p[1]) end end
Аргументы такие же, как и в основных функциях.
Создание complex effector Отдельный урок в отдельном спойлере тут не нужен, думаю. Давайте сделаем что-то:
Общая информация: После кульминации получаем бонус xrdemo - формат, который почему-то многие модмейкеры обходят стороной, хотя он позволяет легко делать облеты камеры. Правда, немного особенные: камера в конце летит обратно к ГГ.
Что это может быть:
Любой полет камеры demo_record
Как это сделать? Легко. Прямо в игре вводим в консоли команду:
Код
demo_record название_записи
Летаем, пробелом (Space) отмечаем ключевые точки. В конце жмем Esc. Получаем в profiles/savedgames файл название_записи.xrdemo. Теперь его можно смотреть В консоли пишем:
Код
demo_play название_записи
Скриптовые функции? Действительно, а что, если нужно запустить скриптом? Функции отдельной не существует...Но подождите, мы ведь можем обращаться к консоли через скрипты! В общем, ребята, дарю вам свою функцию:
Код
function run_xrdemo(xrdemo) if xrdemo ~= nil then get_console():execute("demo_play "..xrdemo) end end
Платформа: All Автор: FantomICW [Смерти Вопреки] Инструменты:
Adobe Photoshop (у меня версия CC 2014)
X-Ray SDK 0.7
Файл для пробы градиента Введение Приветствую! Этот небольшой урок будет посвящен созданию градиента для файла PPE. Данный вопрос поднимался, как мне кажется, очень редко, так что мини-урок должен пригодиться. Сегодня мы также будем использовать файл для проверки градиентов из ресурсов документации для Сталкер ЗП. Перед тем, как начать урок, я также хотел бы, на всякий случай, сказать, что новый градиент можно создать на основе уже имеющихся в папке textures/grad. Звучит крайне очевидно, но мало ли Ладно, приступим. 1. Запускаем ФШ, можем сразу открывать файл для пробы градиентов. Далее создаем пустой документ с размерами 256x2 px.
2. Теперь переходим на панель слоев и создаем новый слой-градиент.
3. Зададим первоначальные настройки градиенту. "Стиль" - "Линейная", Угол - 0. После этого кликаем на поле цвета градиента.
4. Итак, можем регулировать градиент так, как пожелаем. Кликаем на квадратик, дальше на поле "Цвет", выбираем цвет. Регулируем ползунками прозрачность, интенсивность и прочее.
5. К примеру, у меня будет один из градиентов для токсических аномалий, мутно-зеленоватый. Градиент нужно добавить в список стандартных, если нам его нужно позже просмотреть в файле для пробы В таком случае, нажимаем на кнопку "Новый". В поле "Наборы" должна появиться превью-картинка нового элемента.
6. По сути, работа в ФШ на этом закончена. Осталось только сохранить и зарегистрировать текстуру в СДК (сделать ей thm-файл). Позже мы вернемся к ФШ для просмотра градиента. Сохраняем текстуру в папку editors/import формате tga32 bit, но прежде позаботьтесь, чтоб у текстуры был альфа-канал. Название желательно сделать grad_текстура. Запускаем Actor/Shader/Particle/Level Editor. Жмем Images-->Check new textures и начинаем настраивать текстуру:
"Format" - 32 bit (8:8:8:8).
Градиент - элемент худ-графики, так что мип-мапы и бампы отключаем. Нажимаем на "Ок". Текстура готова ко включению в постпроцесс.
7. Как уже было сказано, мы можем вернуться к превью градиента в ФШ. В файле-исходнике дублируем любой слой и два раза кликаем на "кружочек" градиента. Из списка выбираем наш градиент. Не забудьте также сделать слой видимым.
Платформа: по сути, универсально Автор:FantomICW [Смерти Вопреки], использован справочный материал от Malandrinus'а и ко Инструментарий:
X-Ray SDK 0.7 (Postprocess Editor)
Введение Итак, знакомьтесь: это Postprocess Editor, и здесь создаются PPE. В принципе, программа не очень сложная, но нужно немного посидеть над ней, чтобы уловить основные моменты, понять принцип работы. Для начала ознакомимся с общим интерфейсом.
Сверху - панель файла. Снизу - список вкладок, панель различных параметров, которые немного меняются (в зависимости от вкладки). По центру - график вкладки. Теперь давайте разбирать предназначение и параметры самих вкладок. Скриншоты, думаю, не нужны в этот раз.
Универсальные параметры/кнопки
+ - кнопка добавляет новый ключевой кадр. • - - кнопка удаляет выбранный кадр. • Clear - кнопка удаляет все кадры из списка. • Copy from - кнопка позволяет скопировать ки-фреймы (ключевые кадры...и да, произноситься именно "ки" а не "кей", если что ) из другого списка. При этом, стоить заметить, значения цвета не сохраняются. • Key Time (sec) - в поел можно выставить время выбранному кадру из списка. • RGB - значения цвета по схеме RGB. Напоминаю, сам цвет подбирается в палитре (нажмите на кнопку ниже).
Base color Заливает картинку полу-прозрачным основным цветом. Белый/черный отображает, как Add Color. Параметры: • Универсальные
Grey color Вкладка дополнительного серого цвета, которым можно "разбавить" основной цвет. Параметры: • Универсальные • Intensity - параметр интенсивности серого цвет, значение от 0 до 1
Duality Вкладка раздвоения экрана. Можем наблюдать такое в постпроцессе опьянения, к примеру. Параметры: • Универсальные, но без RGB • Duality-H - параметр раздвоения по горизонтали, значение от -1 до 1 • Duality-V - параметр раздвоения по вертикали, значение от -1 до 1 У последних двух параметров значение смещение берется, судя по всему, относительно экрана. Если ставим 0,5, то "копия изображения" сместится на половину экрана. Минусовое значение нужно для движения влево/вниз.
Noise Вкладка параметров шума. Шум наблюдаем во многих постэффектах, включая ПНВ и радиацию. Параметры: • Универсальные, но без RGB • Noise Intensity - интенсивность шума, значение от 0 до 1 • Noise Grain - размер зерна, значение от 0 до 1 • Noise FPS - частота "смены" шума. Только глаза не убейте, если большое значение выставите
Blur Вкладка размытия экрана. Наблюдаем все в тех же эффектах, когда ГГ "дают по голове". Параметры: • Универсальные • Intensity - интенсивность размытия, значение от 0 до 1
ColorMapper Вкладка для градиента постпроцесса. В ЗП многие эффекты на этом и юазируются. Параметры: • Универсальные, кроме RGB • Influence - непрозрачность ("влияние") градиента, значение от 0 до 1 • Поле для ввода названия текстуры градиента (обычно это grad/grad_текстура)
Первый урок закончен.
Введение Основы интерфейса усвоили, а значит можем прочитать пару PPE-файлов. Файлы берем из чистого ЗП. Поехали. Практика Давайте начнем с простого: постэффект обычного ПНВ. Открываем файл anims/nightvision_1.ppe. У него все вкладки пустые, кроме шума и градиента. Смотрим шум (Noise):
Анализируем: • Есть два ключевых кадра (0 сек. и 5 сек.) • И там, и там одинаковое значение для размера зерна и для интенсивности • И там, и там 25 ФПС Хорошо, теперь смотрим вкладку ColorMapper:
Видим, что ключевые кадры совпадают с шумом. Выставлен градиент. Кстати, особенность этой вкладки в том, что в поле вводится название градиента один раз для всех кадров. Теперь можем сделать вывод: имеем простой постэффект с цветным градиентом и средним шумом. Заметьте, что значение для шума совпадает в обоих кадрах (в нулевом и пятисекундном). Что это может значить? А значит это то, что постэффект сделан специально для зацикленного проигрывания. Возьмите себе на заметку, что для цикличного постпроцесса нужно сделать нулевой кадр и второй кадр с каким-то значением времени, где значения параметров совпадают. По такой же схеме работают и другие постпроцессы. К примеру, давайте откроем black.ppe. У него заполнена только вкладка Base Color:
Как видим, и в нулевом кадре, и в кадре 3-й секунды выставлен черный цвет. То есть изображение зациклено черное. Да, все логично. Давайте, напоследок, рассмотрим часть более динамичного постпроцесса - fade_in_out.ppe, у которого рабочая только вкладка Add Color. Смотрим: • На нулевом кадре установлен нейтральный цвет (по сути - никакого цвета). • По достижению постпроцессом 1-й секунды экран становится полностью черным. • На кадре 4-й секунды все тот же черный цвет. • Кадр 5-й секунды цвета не имеет, как и нулевой кадр. Вывод: через одну секунду после начала действие эффекта экран становится черным и остается таким в течении 3 секунд (4 - 1 = 3). Но уже на 5-й секунде чернота пропадает.
На этом "теоретическая практика" закончена.
Введение Сделаем два варианта постпроцесса: полу-прозрачный и непрозрачный. Суть такова: постпроцесс будет через каждый две секунды заливать экран очередным цветом радуги. При этом, красным (первым цветом) экран станет на 1-й секунде. Вспоминаем: Каждыйохотникжелаетзнать, гдесидитфазан. Практика: непрозрачный 1. В редакторе нажимаем на кнопку "New". Уже договорились, что постэффект будет переливаться цветами радуги, которых есть семь. Добавляем сюда еще нулевой кадр и финальный кадр, в целом выходит 9 кадров. Эффект полу-прозрачный, значит работаем с Add Color. 2. Тогда создаем нулевой кадр и в Key Time устанавливаем 0,00. 3. Далее создаем первый цветной кадр. Ему автоматически будет выставлено время 0,01. Меняем на 1 сек. Цвет ставим красный. Далее делаем второй цветной кадр, который отобразится через 2 секунды после первого, то есть ставим ему значение 3. Цвет у кадра будет оранжевый. Продолжаем так создавать кадры с разницей в две секунды. Тогда 7-й кадр должен оказаться на 13-й секунде. Делаем последний кадр с отсутствием цвета на 15-й.
Все, сохраняем постпроцесс.
Результат:
Практика: полу-прозрачный 1. Новый файл не создаем, а делаем эффект на основе уже готового. 2. Переходим на Base Color, с которым будем работать, и жмем на кнопку "Copy from"-->Выбираем Add Color. Итого мы получаем все те же ки-фреймы на нашей вкладке, но без цвета. 3. Цвет можете подбирать заново или же копировать вручную с Add Color. 4. Когда с цветом разобрались, на вкладке Add Color жмем "Clear", чтоб удалить из списка фреймы, которые нам на это вкладке не нужны. 5. Все, проверяем, сохраняем.
Результат:
Третий урок закончен.
Введение Вот мы и подошли к созданию сюжетного постпроцесса. Давайте сделаем "сценку" отравления, головокружения ГГ с потерей сознания. Практика
1. Предлагаю начать с цвета экрана. Пускай, экран будет закрашен в полу-прозрачный зеленый, как это принято в Сталкере для химических проблем ГГ (с точки зрения реализма, это абсурд, но ладно ). На Base Color делаем три поинта: • Нулевой без цвета. • 3-я секунда - цвет ближе к хаки. • 6-я секунда - более темный оттенок. Выходит, что с самого начала цвет экрана плавно станет тускло-зеленым, а потом потемнеет.
2. Далее разберемся с серым цветом и блуром...Переходим на Blur: • Нулевой кадр без цвета. • На 3-й секунде делаем Intensity0.8
Кстати, такие же значения автоматически появляются на вкладке Gray color.
3. Duality. Делаем кадры 0, 4, 6, 8, 10. Раздваиваться изображение начнет в переходе между 4 и 6. Ниже значения раздвоения будут показаны по такой схеме: Кадр - значение Duality-H - значение Duality-V
Раздвоение, как видите, будет в определенном участке симметричным (используем минус для симметрии).
4. Noise. Шум появится между 2-й и 4-й секундой, таким и останется. • На 0 и 2 ставим нулевую интенсивность, а размер зерна и ФПС - по одному. • На 4 и 10 ставим интенсивность 0,43, размер зерна - 1, а ФПС - 30.
5. Последнее - черный экран в конце эффекта. Используем Add Color. • На 0 и 9 цвета нет. • На 11 ставим черный.
Создание анимации камеры в 3DS Max (не глобальный эффект)
Платформа: All Автор:FantomICW [Смерти Вопреки] Благодарность:Den Stash'у за скрипты для Макса Инструменты:
3DS Max
Скрипты Дена Сташа Введение Рассмотрим создание обычной анимации камеры в Максе. Анимка будет совсем простая - актер посмотрит вверх-вниз. Так как видео по скриптам и камере с канала Дениса было удалено, думаю, тутор не помешает. Практика 1. Для начала в 3DS Max создадим объект камеры и назначим ему тип Free. Рекомендуется также выставить FOV70 (приближенно к игровому).
2. Поставим камеру на сетку и для удобства переместим на нулевые координаты.
3. С самого начала камера будет повернута вниз. Поэтому нужно установить ей поворот на 90 по оси Х.
4. Начинаем анимировать. Устанавливаем режим Auto Key. Далее переводим ползунок анимации на 10-й фрейм, на котором и разворачиваем камеру так, чтоб она смотрела немного вверх. Давайте сразу определим, что между изначальной точкой камеры и ее разворотом вверх/вниз будет 10 фреймов. Таким образом, между. Верхней точкой и нижней точкой, в которую мы дальше опустим камеру, 20 фреймов.
5. Тогда на 30-м фрейме опускаем камеру так, чтобы смотрела вниз.
6. На 40-м фрейме возвращаем камеру в исходное положение (90 по Х).
7. Если нужно, можем просмотреть движение камеры от 1-го лица через Кнопка вида-->Cameras-->Наша камера. Если все устраивает, начинаем сохранять. Нажимаем на кнопку Time Configuration. В окошке выставляем End Time40.
8. Напоследок, экспортируем файл скриптом. Анимация простая, так что сохранять можно каждые 5 фреймов. Если сохранять каждый 1 фрейм, размер файла должен увеличиться. В принципе, такое больше нужно для анимок, где требуется "ювелирная точность". Ставим флажок напротив Camera Mode и экспортируем файл. Потом смотрим, что вышло
Результат
Удачи!
Создание HUD-анимации камеры в 3DS Max (не глобальный эффект)
Платформа: All Автор:FantomICW [Смерти Вопреки] Инструменты:
SDK Level Editor Введение Рассмотрим создание обычной анимации камеры в СДК. Я не буду особо зацикливаться на каждой кнопочке, так как, спасибо ее создателям, есть вот эта статья: http://stalkerin.gameru.net/wiki....тсцены) Простите, что посылаю вас так далеко, но надеюсь на ваше понимание: в какой-то момент справку писать однозначно надоедает. В общем, читаем статью, а потом здесь закрепляем материал. Схема примерно такая же, как и в Максе. В этот раз актер будет поворачиваться вправо/влево. Практика 1. Установим объект editor/camera на нулевых координатах. Выставим Motionable и Auto Key.
2. После этого передвигаем камеру на начальную позицию (я просто поднял чуть выше). Теперь уже можно выставить время Current Frame (сколько камера будет двигаться до 2-го поинта). Важно! Только в таком порядке все делаем, иначе камера может заглючить и переместиться куда-то далеко. Кстати, двигаться камера будет до 2-го фрейма 2 секунды Должно сейчас быть 2 ключа, а время окончания должно быть равно текущему времени.
3.Оборачиваем камеру вправо с ее стороны/влево с нашей стороны.
4. В Current Frame вбиваем 6,000. То есть к 6-й секунде камера повернется уже в другую сторону (к третьему поинту).
5. Разворачиваем камеру в другую сторону. Далее меняем 6,000 на 8,000.
6. Возвращаем камеру на исходную позицию (4-й фрейм). Все, экспорт.
действительно, а что, если нужно запустить скриптом? Функции отдельной не существует...Но подождите, мы ведь можем обращаться к консоли через скрипты!
Черт, спасибо огромное! Вот этого мне все никак не хватало! Пытался как-то переделать свои демки в anm, соответственно терпел фейлы, а теперь вот наконец-то буду делать красивые облетные сцены, запускаемые по скрипту! И ведь знал же, что консольные команды можно через скрипт мутить, с 2009 года сам так делал, но вот до вызова камеры таким образом - не додумался! Еще раз, огромное спасибо! Сегодня буду тестить этот способ
Действительно, ОЧЕНЬ нужная и наиполезнейшая вещь! Спасибо автору за труд. Подача материала понятна и проста, в прочем, как и всегда - FantonICW в своем стиле!