Понимайка1 - 62 стр
Има още много примери за използване на изрази, които не попадат в нито един от двата изброени типа (например изрази на частици), но аз ще се съсредоточа върху традиционното използване на изрази като един от начините за анимиране на атрибути на обект.
Редът, в който се създават изрази
Има много начини за създаване на израз за избран атрибут, но в началото предлагам да се придържаме към идеята, че изразите "висят" на атрибути, като други видове анимация.
Следователно, за да създадете нов израз, първо трябва да помислите кой атрибут (или атрибути) на обекта ще управлява, след това да изберете този атрибут в полето на канала (или да го потърсите в редактора на атрибути) и като натиснете десния бутон на мишката, изберете елемента Изрази в контекстното меню.
След това ще се появи специален прозорец за работа с изрази, наречен, колкото и да е странно, редактор на изрази. В централното тестово поле Изрази въведете текста на магическата формула и щракнете върху бутона Създай. Ако формулата MEL е въведена без грешки (от гледна точка на MAYA, а не от ваша гледна точка), тогава изразът ще бъде създаден успешно и бутонът Създаване ще се превърне в бутон Редактиране (това е основният индикатор за успех). В противен случай MAYA безучастно ще ругае, съобщавайки за грешка (не скривайте командния ред от екрана!) и ще трябва да намерите тази грешка при писане на вашата формула, да я коригирате и да щракнете върху Създаване отново. И така нататък.
Атрибутите, контролирани от изрази, се показват в лилаво в полето на канала или редактора на атрибути. За да "достигнете" до тези изрази, трябва отново да изберете необходимите атрибути в полето на канала и да изберете елемента Изрази в контекстното меню, което отваря Редактора на изрази с вече заредени формули.
Забележка. Един отмоят любим и най-бърз начин за създаване на прости изрази е както следва. След като сте намерили желания атрибут в редактора на атрибути, трябва да въведете знака за равенство (=) в полето на атрибута и след това да въведете текста на формулата на израза и след това да натиснете Enter. Разбира се, в случай на грешка, ще трябва да го въведете отново, но удоволствието да гледате как след въвеждане на „=“ числовото поле на атрибута внезапно се разпръсква, си заслужава.
Основните синтактични правила за писане на скриптове и изрази са изложени в главата, посветена на Тук ще формулирам само най-простите принципи за компилиране на изрази, които ви позволяват да пишете доста ефективни формули.
Преди всичко трябва да запомните, че квалифицираното име на атрибута се състои от името на обекта, поставено на точки с името на атрибута. Например:
Главните букви са изключително важни. pTorus1 и PTorus1 са различни обекти и Maya не знае атрибута rotatex по подразбиране (можете да го направите сами).
За мързеливите потребители бяха допълнително изобретени кратки имена на атрибути, за да спестят усилия при въвеждане на формули в MEL. pTorus1.rotateX и pTorus1.rx са един и същи атрибут. Кратки имена на обекти, за съжаление, не могат да бъдат по принцип.
съвет. Можете да видите кратките имена на атрибути в полето на канала. За да направите това, изберете Имена на канали= >Кратко от контекстното меню.
Също така съветвам веднъж завинаги да активирате показването на дълги (дълги) имена на атрибути в полето на канала. По някаква причина, която не разбирам, режимът на показване на „хубави“ имена е активиран по подразбиране и това очевидно дезинформира потребителя относно правилното изписване на имената на атрибутите. В този режим в имената на атрибутите се появяват интервали и всички имена започват с главна буква, което не е вярно.
Познавайки имената на атрибутите,можете да добавяте, изваждате, умножавате и разделяте тези стойности на атрибути, като използвате общи знаци. Използването на скоби и най-често срещаните функции като rand, noise, sin и cos трябва да е лесно за вас. Следващите примери трябва да разсеят страха от писане на прости формули.
Единственото нещо, което винаги трябва да помните, е, че в края на всеки ред (или по-скоро в края на всеки ред трябва да поставите точка и запетая.
pCube1.tx=(pTorus1.tx+ pTorus2.tx)/2; pCube1.tz=(pTorus1.tz+ pTorus2.tz)/2;
Ако цялата команда не се побира на един ред, можете лесно да я прехвърлите на друг ред.
Само запомнете: точка и запетая разделя една команда от друга.
Можете да прочетете повече за работата с променливи в главата за MEL, тук ще отбележа само, че резултатите от всякакви изчисления (обикновено междинни) могат да се съхраняват в променливи, чиито имена започват със знака $.
$rot = pCube1.ry/180*3.14; pCube2.ry = sin($rot);
Освен това има две специални времеви променливи специално за използване в изрази. Те се наричат време и рамка и представляват текущото време.
съответно в секунди и кадри.
Ще имаме нужда от повече условни изрази в тази глава, но ще илюстрирам използването им с конкретни примери.
Преди да премина към практически примери за използване на изрази, ще се спра малко на разликата между изрази и скриптове, за които всеки без съмнение е чувал. И двете са написани на MEL, но служат за малко по-различни цели.
Разликата между скриптове и изрази. Ред за изпълнение на изрази
May скриптът е набор от MEL команди, които се изпълняват при поискване, т.еуправлявайте го сами. Той се съхранява, като правило, на диска като текстов файл и не е част от сцената.
Изразът също е набор от команди. Но тези команди се съхраняват като обект и са част от сцената, тоест се съхраняват вътре в нея. Тези команди не се изпълняват по ваше желание, а най-общо казано при промяна на номера на кадъра по време на анимация. Всеки път, когато възникне преход към следващия кадър (или когато още веднъж неловко бръкнете с мишката във времевата линия), всички отключени изрази, присъстващи в сцената, се изпълняват. Освен това изразите се изпълняват, когато един от обектите, чиито атрибути се използват в израза, промени стойността на тези атрибути.
По този начин, ако възпроизведете двеста анимационни кадъра, всички изрази са създадени
в сцената, ще бъде екзекутиран двеста пъти. Следователно изразите се използват по правило не за интензивни изчисления и изчисления, а за задаване на логически връзки между обекти (по-точно между атрибути на обекти).
Примери за използване на изрази. Гледам
Нека да разгледаме пример за използване на изрази за "явна" анимация, тоест за установяване на пряка връзка между атрибут на обект и време.
Направете часовникова стрелка в новата сцена.
Позиционирайте го така, че центърът на въртене да е в началото и стрелката да се върти около оста Z.
Назовете ръката секунда, защото тя ще брои секунди. Ако това е твърде сложно или скучно, отворете файла clock.ma.
Изберете атрибута rotateZ в полето Channel и изберете Expressions в контекстното меню. В прозореца на редактора на изрази, който се показва, въведете проста формула
Щракнете върху бутона Създаване.
Времевата променлива съдържа времето в секунди за текущия кадър.Съответно, една секунда след началото на анимацията (т.е. в двадесет и петия кадър), стойността на времето ще бъде равна на единица. За една секунда секундната стрелка трябва да се завърти на шест градуса (360 градуса разделени на 60 секунди е равно на 6). Следователно, за да зададем стойността на атрибута rotateZ в градуси, умножаваме времето в секунди по 6.
Забележка. В този случай името на обекта не може да бъде написано преди името на атрибута. Ще говоря за това малко по-късно.
Очевидно, за да се завърти стрелката в другата посока, трябва да се добави знак минус. Освен това, нека зададем "дискретното" въртене на стрелката, така че тя да скача на нова позиция само в тези кадри, където стойността на времето е равна на "цели" секунди. Очевидно за това трябва да вземете цялата част от числото, съдържащо времето в секунди, тоест цялата част от времевата променлива.
Ако сте затворили редактора на изрази, стигнете до него отново, като изберете rotateZ в полето Channel и извикате елемента Expressions.
Коригирайте формулата, както следва: sec.rotateZ =
Щракнете върху бутона Редактиране.
Сега ръката се върти на всеки втори удар.
Задайте обхвата на анимацията на 90 000 кадъра - в крайна сметка, ако 3600 секунди (тоест 1 час) се умножат по 25 кадъра, това са точно 90 000 кадъра.
В настройките на анимацията задайте Възпроизвеждане fps), за да видите реалното време на екрана.
Върнете се на кадър 0 и копирайте обекта sec, за да направите минутната стрелка. Наречете го mtn и редактирайте малко неговата позиция и форма.
Стрелката за минути трябва да се върти 60 пъти по-бавно от стрелката за секунди. Следователно изразът за ротация ще бъде предизвикателно прост.
Изберете атрибута rotateZ в Channel Box и извикайте Expression Editor. Въведете формулата:
min.rz=sec.rz/60; Щракнете върху Създаване.
Плъзнете мишката около времевата линия, като се уверите, че стрелките се въртят в унисон. Направете друга ръка, час.
Назовете го час.
Трябва да се върти дванадесет пъти по-бавно от минутата, така че изразът за него ще изглежда така:
Вече имате процедурно анимиран часовник. Скоростта на въртене сега съответства на реалния поток на световното време. Въпреки това, за да създам нереалистични ефекти, бих искал да има атрибут, който контролира скоростта на въртене на стрелките. Тъй като втората ръка е основната, нека добавим атрибут към нея.
Изберете обекта sec и направете Modify=>Add Attribute.
Назовете новата скорост на атрибута, задайте Максимум=10, По подразбиране=1. Натиснете OK.
Сега отново изберете атрибута rotateZ в Channel Box и отворете Expression Editor. Коригирайте формулата за втората ръка:
Стартирайте анимацията и опитайте да промените атрибута за скорост.
Така вие сте придобили контрол върху скоростта на часовника.
За да спрете часовника или, напротив, да го накарате да се върти с главоломна скорост, можете да поставите ключове върху скоростния атрибут на секундарника.
За да получите напълно луд часовник и да останете в рамките на процедурния подход, изберете атрибута скорост в полето на канала, извикайте редактора на изрази и въведете формулата:
Това ще доведе до промяна на скоростта на въртене по произволен начин в диапазона от 10 до минус 10. Ако искате да забавите (или да ускорите) бързината на тези промени, въведете допълнителен фактор във формулата:
Редактор на изрази за опитомяване
Някои от вас вероятно вече са се сблъсквали с известна "нетактичност" в поведението на редактора на изрази. Ако вие, докато пишете вашата магическа формула, внезапно решитеизберете друг обект за секунда, за да проверите например стойностите на неговите атрибути, всички ваши „печатни произведения“ веднага ще изчезнат! За да спестите нервите си, печатния текст и в същото време да извикате редактора на изрази по поръчка, трябва да сте наясно с два режима на работа с него.
По подразбиране първият режим е активиран, когато редакторът на изрази показва изрази само за избрания обект. Следователно, ако случайно щракнете с мишката в прозореца на камерата, целият въведен текст изчезва.
Вторият, по-хуманен (според мен) режим, показва в прозореца на редактора на изрази всички изрази, налични в текущата сцена.
Тези режими се превключват в менюто на редактора на изрази, като се използват съответно елементите Избор на филтър=>По име на обект и Избор на филтър=>По име на израз.
Тези два режима отразяват два идеологически подхода към изразите. Първият разглежда изразите като, например, анимационни криви, които са строго присвоени на определени атрибути и се разглеждат само заедно с обекта. В този режим, за да видите кода на желания израз, не е достатъчно да изберете обект: трябва допълнително да изберете атрибута на обекта, който този израз засяга в прозореца на редактора на изрази. В този режим е много полезно да ограничите показването в Редактора на изрази само до тези атрибути, за които вече са създадени изрази. Това може да се направи от менюто Редактор на изрази, като изберете Филтър на атрибути=>Свързан с изрази. Обърнете внимание също, че има и различни опции в менюто Филтър на обекти, които „филтрират“ показването на обекти от определени типове в списъка Обекти.
Тук вероятно си струва да изясним какво означава „изразът засяга атрибут“. Неформално казано, в този случай изразът "виси" върху атрибута. Формално казано, в дървото на зависимостите атрибутът има входвръзката, идваща към него от израза. И от гледна точка на писане на формули, това означава, че в кода на израза има израз като "object.attr=. ", в който името на атрибута е от лявата страна на оператора за присвояване. Както разбирате, в един израз може да има няколко такива израза за различни атрибути. Всички те създават асоциация с един израз с тези атрибути.
Вторият режим идеологически предполага, че разглеждате изразите като независими сценични обекти, които извършват определени действия. В този режим можете да видите в горната част на прозореца на редактора на изрази списък с всички изрази, които вече са в текущата сцена (включително тези за частици). Не можете да се страхувате, че кодът на израза ще изчезне, когато даден обект бъде избран на случаен принцип и можете лесно да редактирате всеки израз, като просто го изберете от списъка. Не забравяйте да натиснете бутона Редактиране, когато правите това: той запазва вашите редакции и работи по същия начин като традиционната операция Запазване. Бутонът Презареждане ви връща към последната запазена версия на кода. Имайте предвид, че след като промените кода на израза, вашата сцена се е променила и ще трябва да бъде запазена, за да запазите новия израз.
Лично на мен вторият режим на работа ми е по-близък: като бивш програмист оперирам с изрази като със самостоятелни, а не със спомагателни обекти. Въпреки това, от гледна точка на общата идеология на MAYA, може да е по-последователно да се използва първият режим.