Наша новая игра 8 сентября в раннем доступе на steam



Анимация изменения текста в 3ds Max

Одна из частых задач в 3ds Max - это анимация текста, вернее не столько текста, сколько цифр. Вот примерно как на видео ниже:

На этом видео я анимировал только движение цифр (те которые над столбиками) вверх и вниз, а все оставшиеся объекты были привязаны к цифрам и двигались вслед за ними. Сами значения этих цифр изменялись автоматически в зависимости от их положения по оси Z. Более того, движение цифр я анимировал не вручную, а с помощью контроллера шума (Noise), чтобы получились хаотичные движения.

Делается всё это очень просто с помощью одной короткой строчки скрипта. Но если вы читали мою вводную статью по скриптам или изучали написание скриптов по другим моим постам, то знаете уже, что боятся их не стоит, а даже наоборот, нужно с ними дружить - они классные ребята 🙂

А теперь обо всём по порядку.

Чтобы автоматически анимировать изменение текста (в данном случае цифр) в 3ds Max нужно использовать Script Controller. Внутри этого контроллера можно прописать любую зависимость в виде строчек скрипта. К примеру, выводить с помощью объекта Text изменяющийся радиус сферы или расстояние между заданными объектами.

Назначить Script Controller можно на любой неиспользуемый параметр объекта Text, к примеру Leading (межстрочный интервал). Для этого создаём объект Text, оставляем его выделенным и открываем Track View - Curve Editor... (находится в меню Graph Editors). Как по мне, именно через этот редактор кривых наиболее удобно работать с контроллерами. Далее ищем нужный параметр:

Работа с Track View Curve Editor'ом в 3ds Max

Выделяем Leading и кликаем по нему правой мышкой, чтобы открылось Quad Menu,. Находим пункт Assign Controller (назначить контроллер) и выбираем из списка нужный - Float Script. Нажимаем OK. Открывается окно, куда можно вводить скриптовые выражения:

Работ со скрипт контроллером (Float Script)

На скриншоте выше у меня уже введено финальное выражение, которое вот так с наскоку будет трудно понять. Поэтому я сейчас поведу вас от простого к сложному.

Первая строчка у нас будет отвечать за изменение текста, а вторая строчка (которая состоит сейчас из одного нуля) отвечает за значение параметра Leading (поэтому там обязательно должно быть какое-то значение).

Итак, напишем самое простенькое выражение, которое заставит текст изменяться в зависимости от положения ползунка анимации (Time slider):

$Number1.text = F as string

$ - это значок, с которого начинается путь к объекту.

Number1 - это имя моего объекта Text (по умолчанию, только что созданный текст имеет имя Text001, поэтому если вы его не переименовывали, то вы вписываете туда Text001).

.text - это указатель параметра, который мы будет изменять.

F - это значение (переменная), которое равняется текущему кадру.

as string - это преобразование числового значения в строку. Поскольку текущий кадр - это числовое значение, а в поле Text нужно вписать строковой параметр, то нужно преобразовать числовое значение в строку.

После того, как вы вписали данную строчку в поле Expression (не забудьте поставить во второй строчке ноль), нажмите Evaluate (Вычислить).

Всё! Теперь подвигайте анимационный слайдер и посмотрите, как изменяется ваш текст.

Этот пример прикольный, но нам нужно немножко сложнее. Нужно, чтобы в текст выводилось положение текста по оси Z. Для этого создаём новую переменную (я назвал её dd, но это пример, как не нужно делать, поскольку переменную лучше называть так, чтобы было понятно, что она означает, к примеру posZ), в которой будет хранится положение объекта по оси Z.

Чтобы создать новую переменную, нужно в области Create Variable в поле Name ввести её название, а потом нажать кнопку Create.

Далее внизу нажимаем кнопку Assign Track, чтобы связать нашу переменную и какой-то другой параметр (любой параметр любого объекта). Выбираем трек Z Position : Bezier Float объекта Text001 (или как там он у вас называется) и жмакаем OK:

Выбор трека для связывания с переменной скрипт контроллера

Теперь нужно эту переменную подставить в выражение..:

$Text001.text = dd as string

..и нажать кнопку Evaluate.

Подвигайте теперь ваш текст вверх и вниз (по оси Z) и понаблюдайте, как изменяется значение.

Всё бы хорошо, но зачастую нам не нужны все те цифры после запятой. Чтобы их отсечь, нужно превратить значение позиции по Z из формата с плавающей запятой (Float) в целочисленный формат (Integer):

$Text001.text = dd as integer as string

Подвигайте ваш текст теперь. Красота! Не правда ли?! 😉

Ну а чтобы привязать высоту столбца к позиции текста я накинул на верхние вершины столбца модификатор Linked XForm и в качестве Control Object (контролирующего объекта) выбрал наш текст. Таким образом движение текста тянет за собой выбранные вершинки столбца.

Чтобы вручную не анимировать хаотичные движения текста вверх и вниз, а набросил на позицию Z текста контроллер Noise Float:

Настройки контроллера шума в 3ds Max

Чтобы потом отмасштабировать движение текста в нужных пределах, я добавил в выражение множитель. В итоге получилось вот такое выражение:

$Number1.text = ((dd*4) as integer) as string

Выкладываю данную сцену (для 3ds Max 2012) в свободный доступ, чтобы вы могли помацать все параметры и настройки лично:

Animated-Graph

Все вопросы задавайте в комментариях к блогу (не комментариях от ВКонтакта, поскольку мне не приходит уведомление о новых комментах там).



Подпишитесь на обновление блога (вот 3 причины для этого).
Введите ваш e-mail:


Спасибо PROM за подсказку и James3d за его график и возможность помочь с ним.

P.S. Банановую девушку в начале статьи сделал Anders Ehrenborg из Новой Зеландии с помощью 3ds Max, Lightwave 3D, Photoshop, VRay и ZBrush по эскизу друга, а потом они её напечатали и начали продавать по $150 одетую и по $300 - голую. Причём расходится она, как горячие пирожки - обнаженных фигурок осталось только 6 из 25. Все подробности тут и по ссылкам в описании там же.

 




Вам понравилась статья? Хотите отблагодарить автора? Расскажите о ней друзьям.
Или подпишитесь на обновление блога по E-Mail.

Введите ваш e-mail (используется только для отправления обновлений блога):

комментариев 19 к статье “Как автоматически анимировать текст в 3ds Max”

  1. ооо спасибо большое….но,еси б сделали видеоурок—ваще респект был бы))))

    • Зачем видео? Для такого контента как раз лучше текст и скрины. Понятнее ИМХО. Я еще в анимацию не лез как то страшно) Много цифр) Хотя интересно)

      ps Юрий. Давно не писАли в блог нового)

  2. Как всё просто и понятно. Спасибо.

  3. Юрий вы случаем не пробовали встраивать язык python в макс? Просто я начал изучать питон и знаю, что он часто используется в связке с другими 3д программами. Хотелось бы урок как связать python с 3д максом и как работать с ним в этой связке)

    • Python прикручивается к максу, и не так уж сложно, надо сказать. И очень даже хорошо встраивается. В студии, где я сейчас работаю, основной рабочий инструмент, в котором мы выставляем все сиквенции слоев, сделан на питоне. Даже два инструмента. Действительно возможностей намного больше, чем просто в maxscript. Но без maxscript в чистом виде python тоже не будет сильно-то работать, так что скрипты изучать все же очень полезно. Те же скриптконтроллеры, как в данном примере, все равно на питоне не напишешь ))

      PS. Урок подробный и как мне кажется, довольно ясный, спасибо.

  4. Наконец-то обновился)

  5. спасибо!
    для таких, как я, новичков — вот это строчка:
    «$Text001.text = dd as integer as string»
    в 2011 максе работает только со скобочками:
    «$Text001.text = (dd as integer) as string»

    • В самом уроке так-же) а ошибку выдаёт из-за того, что он не знает что ему в начале преобразовать в строку. В первом примере он может преобразовать сначала целочисленное значение(integer) в строковое(string). И т.к. нету конкретных значений он выдаст ошибку. Скобочками определяешь, что сначала он должен делать. Сначала переменную преобразовать в целочисленное значение, а патом уже преобразовать в строку. Немного по идиотский знаю т.к. запись должна идти слева на право, но он почему-то не улавливает)

  6. Хороший урок Юрий, спасибо!

  7. добавлю свои 5 копеек — «зачастую нам не нужны все те цифры после запятой», — format и/или formattedprint позволят разнообразно выводить, а не просто срезать дробную часть

  8. Юрик, меня давно мучают 3 вопроса: 1) как называется эффект смещения типа анаглифа, но только на краях? 2) Почему Vray Lens Effects, когда я ставлю и блум и глэр ля рендер элемента, он делает их для всего изображения (в смысле не берет спекуляры, рефлекшоны и т.п. по отдельности (это видно на блум и глэр проходах))? 3) И как, наконец, мне вытащить рефлекшоны и тени (ну и спекуляры) падающие на объект без самого объекта, чтоб на лайв видео наложить (vraymtlwrapper почему-то не работает)? При ответе на мои вопросы прошу учитывать, что я пользуюсь исключительно Виреем.

    • 1) Скорее всего вы имеете в виду хроматические аберрации.
      2) Такое впечатление складывается из-за того, что вся картинка этих рендерпассов выглядит размытой. Дело в том, что VRay потом применяет рендерпассы bloom и glare не напрямую, а используя карту яркостей в качестве маски.
      3) А отдельные рендерпассы этих элементов не подходят?
      Только тени можно еще вытащить, если в свойствах объекта поставить галочку Matte object, альфу в -1 (минус один), и галочки Shadows и Affect alpha.

      P.S. Желательно было эти вопросы задавать в соответствующих статьях 🙂

  9. Насчет первого вопроса — смещение там совсем малое, имеется в виду для видео. Сейчас этот эффект почти во всех СG трейлерах применяется. И насколько мне известно основоположником данного мэйнстрима является Blur Studio.

  10. И да, кстати, насколько я помню там еще слабое радиальное размытие было. А вообще можете еще что нибудь подсказать, что могло бы сделать видео еще более реалистичным при постобработке?

  11. По поводу ваших ответов:
    1) Да, это именно он (попалась наконец, сволочь).
    2) Нет, размытие я знаю из-за чего, и знаю, что это лишь потом накладывается, но мне казалось, что он будет применять и Bloom и Glare по отдельности к спеку, рефлекшену и т.п. и выдавать эти уже размытые варианты по отдельности.
    3) Рендерпассы я уже использовал до этого, но просто меня заинтересовал вариант их получения без разбиения рендера на составляющие проходы.

    И P.S. к вашему P.S. А где есть таковые? И можно с вами разок, буквально на пару минут переговорить по Скайпу? Хочу задать еще парочку интересных вопросов.

  12. А что сайт стал так редко обновляться?

Извините, в данный момент комметарии закрыты.

© 2008 - 2018 3dyuriki.com
Для связи со мной 3dyuriki@gmail.com