آموزش ریگ بندی در مایا (بخش اول)
فهرست مطالب
آخرین به روزرسانی در 29/07/2022
در این دوره ی آموزشی قصد داریم به آموزش ریگ بندی در مایا بپردازیم.
در این دوره ما به بررسی کامل مبحث ریگ بندی به صورت کامل پروژه محور خواهیم پرداخت.
لازم به ذکر است ما قبلا در مقاله ای به توضیحات مربوط به مفهوم ریگ بندی پرداخته ایم و در این
مقاله قصد آموزش ریگ بندی در نرم افزار انیمیشن سازی مایا را داریم.
پیش نیاز این دوره ی آموزشی تسلط و مطالعه ی مقاله ی ریگ بندی در انیمیشن می باشد.
و همچنین تسلط بر مدل سازی در نرم افزار مایا می باشد.
مباحثی که باید یک متخصص ریگ بندی بداند
از آنجایی که نقش متخصص ریگ بندی در درجه اول بین مدل ساز و انیماتور قرار می گیرد،
مهم است که ریگر هم درک خوبی از آنچه که مدل ساز به آنها ارائه می دهد و هم آنچه که انیماتور نیاز دارد داشته باشد.
ریگر باید اصول انیمیشن و تکنیک هایی را که یک انیماتور ممکن است برای ایجاد تابع مورد نظر به کار گیرد، درک کند.
علاوه بر همه اینها، او به دانش کامل آناتومی، آناتومی حیوانات و حرکت شناسی نیاز دارد.
و این فقط برای کار با شخصیت های جاندار است.
اما به عنوان مثال تجهیزات مکانیکی نیز وجود دارد که اتومبیل ها، هواپیماها، قطارها و … را پوشش می دهد.
به عنوان مثال، اگر در حال خلق یک شخصیت انسانی هستید، اسکلت، ماهیچه ها و مفصل بندی بدن را باید بشناسید.
Parents (والدین) و سلسله مراتب
وقتی صحبت از ریگ به میان می آید، درک روابط اساسی است.
در مایا، اساسی ترین رابطه ای که می توانید ایجاد کنید، رابطه والد و فرزند است.
بیایید این کار را اکنون انجام دهیم.
ابتدا یک کره و یک مکعب ایجاد کنید و سپس نام کره را به “parent” و مکعب را “child” تغییر دهید.
Outliner را باز کنید (Window > Outliner) تا بتوانیم نتایج والدین را مشاهده کنیم.
حالا اجسام را از هم جدا کنید تا روی هم ننشینند.
روش والدین به این صورت است که ابتدا شی فرزند را انتخاب کنید، شی والد را با shift انتخاب کنید و سپس به Edit > Parent بروید یا روی صفحه کلید P را بزنید.
در Outliner، باید متوجه شده باشید که شی فرزند اکنون در زیر شی والد قرار دارد.
اگر تغییراتی برای شی والد انجام دهید این تغییرات برای شی فرزند نیز که زیر مجموعه ی آن هست نیز اعمال می شود.
همین موضوع در مورد چرخش و مقیاس بندی نیز صدق می کند.
در Channel Box ، مقادیر translate و rotate شی فرزند را صفر کنید.
در انجام این کار، شی فرزند باید به همان مکان شی والد بچسبد.
این به این دلیل است که شی والد مرکز دنیای جدید فرزند است.
اگر مقادیر translate و rotate را برای شی والد صفر کنید، شی والد به world center مایا بازمی گردد.
دلیلش این است که این شیء به نوعی در حال ارتباط برقرار کردن با فرزند دنیای مایا است.
مزایای روابط ساده والد-فرزند این است که شی فرزند برخلاف استفاده از محدودیت والد، که بعداً به آن خواهیم پرداخت، همچنان آزادی حرکت دارد.
تا کنون، ما یک شی را زیر مجموعه ی دیگری قرار داده ایم.
چند شیء دیگر ایجاد کنید و آنها را یکی زیر دیگری قرار دهید تا شروع یک سلسله مراتب کوچک داشته باشید.
متوجه خواهید شد که شی در بالای سلسله مراتب بر همه اشیاء تأثیر می گذارد و شی بعدی بر روی اشیاء زیر آن و …
Constraints
با والدین، شما یک شی یا یک گره را می گیرید و مستقیماً آن را زیر دیگری می اندازید.
از سوی دیگر، Constraintsبه شما امکان میدهند بدون تغییر ساختار سلسله مراتبی اشیاء، روابط ایجاد کنید.
همچنین Constraints به شما اجازه میدهند تا روابط را به قطعات کوچکتر تقسیم کنید.
به عنوان مثال، شما می توانید یک شی را به شی دیگر محدود کنید تا فقط ترنسلیت یک شی تحت تأثیر قرار گیرد.
شی محدود شده به سادگی به جسم اصلی باز می گردد.
با این حال، میتوانید کلیدهایی را روی شی محدود تنظیم کنید و با انجام این کار، یک گره pairBlend ایجاد میشود که به شما امکان میدهد انتخاب کنید که آیا فریمهای کلیدی یا خود محدودیت باید فعال باشند.
البته این روش پیشنهاد نمی شود زیرا کار شما را سخت تری و پیچیده تر می کند.
اگر نیاز دارید که یک شی توسط چندین ورودی کنترل شود، ما به سادگی Constraints بیشتری را به شی اضافه می کنیم و این به نظر چیزی است که Constraints را بسیار مفیدتر از والدین ساده می کند: شما می توانید یک شی را به بسیاری از اشیاء اصلی محدود کنید.
در یک صحنه جدید مایا، یک کره و یک مکعب ایجاد کنید و آنها را از یکدیگر ترنسلیت کنید.
نام کره را به « leader» و مکعب را « follower» تغییر دهید.
با parenting شی فرزند و سپس والد را انتخاب می کنیم و دستور را اجرا می کنیم.
با Constraints این پروسه برعکس است.
ابتدا جسمی را که تاثیرگذار خواهد بود، سپس شیئی که تحت تأثیر قرار می گیرد انتخاب می کنیم و سپس دستور را انجام می دهیم.
بنابراین، ابتدا شی ” leader” را انتخاب کنید، سپس شی ” follower” را با شیفت انتخاب کنید و در مجموعه منوی انیمیشن،
به Constrain > Point بروید.
مطمئن شوید که تیک Maintain Offset را بردارید، همه تنظیمات دیگر را در حالت پیش فرض خود بگذارید و روی Apply کلیک کنید.
شیء ” follower ” باید به همان موقعیتی که شی “leader ” است بچسبد.
همچنین متوجه خواهید شد که در Channel Box ، چنل های ترنسلیت با رنگ آبی مشخص شدهاند.
این نشان می دهد که یک Constraint در اینجا فعال است.
نگاهی به Outliner بیندازید و خواهید دید که سلسله مراتب برای اشیاء تغییر نکرده است و یک گره pointConstraint1 در زیر شی ” follower” قرار دارد.
فعلاً Constraints را در اینجا رها میکنیم، زیرا بعداً بارها به آنها باز خواهیم گشت،
اما آزمایشی با انواع دیگر محدودیتها داریم تا درک کنیم که چگونه میتوانند مفید باشند.
مفاصل
خوب، پس اکنون به پیچ و مهره های ریگینگ در مایا می رسیم و این پیچ و مهره ها چیزی نیستند جز مفاصل.
مانند تمام اشیاء دیگر در مایا، مفاصل یک transform node (گره transform) هستند.
آنها را می توان ترنسلیت، چرخش و بزرگ نمایی یا کوچک نمایی کرد.
اما مفاصل منحصر به فرد هستند و چیزی که آنها را منحصر به فرد می کند این واقعیت است که فقط آنها جهت گیری دارند.
که به عنوان JoinOrient شناخته می شود، به مفصل اجازه می دهد تا در امتداد یک محور جهت گیری کند.
هنگامی که زنجیره ای از مفاصل داشته باشید متوجه این موضوع خواهید شد : هر مفصل والد به گونه ای جهت گیری می کند که مفصل فرزند خود را هدف قرار دهد. بیایید این را اکنون آزمایش کنیم و همچنین ایجاد و ویرایش مفاصل را پوشش دهیم.
در صحنه جدید مایا، به Skeleton > Joint Tool بروید.
اکنون، در نمای جلو یا جانبی، از دکمه سمت چپ ماوس برای ایجاد چند مفصل استفاده کنید.
وقتی زنجیره ای از اتصالات ایجاد کردید، Enter را در صفحه کلید بزنید تا از ابزار خارج شوید.
شما همچنین می توانید با دکمه سمت راست ماوس از ابزار خارج شوید، اما با این کار یک اتصال نهایی در جایی که مکان نما در پنجره دید بود ایجاد می کند. Outliner را باز کنید و خواهید دید که سلسله مراتب زنجیره مشترک ما رابطه والدین و فرزند است.
مفصل ریشه را بچرخانید و بقیه زنجیره آن را دنبال می کند.
این حرکت به عنوان حرکتی رو به جلو نیز شناخته می شود : حرکت چرخشی که از ریشه به پایین تا بالا کار می کند.
حالا ابزار Rotate را در قسمت Rotate Tool Settings روی Local قرار دهید و اولین مفصل زنجیره را انتخاب کنید.
باید توجه داشته باشید که مفصل به سمت مفصل فرزند جهت گیری شده است و کانال های چرخشی همگی دارای مقادیر صفر هستند.
به Attribute Editor بروید و در زیر زبانه Joint، jointOrient را پیدا خواهید کرد.
در اینجا میتوانید ببینید که چگونه مفصل از جهت گیری برای هدف قرار دادن مفصل فرزند استفاده میکند، نه اینکه مقادیری را در rotate channels تنظیم کند. ابزار Translate را فعال کنید، حالت را روی Object قرار دهید و همچنین باید متوجه شوید که مفصل در امتداد محور X به سمت مفصل کودک هدف می گیرد.
این به عنوان محور هدف شناخته می شود.
مقدار translate X مفصل فرزند نیز طول مفصل والد را به ما می دهد.
اکنون مفاصل را در جای درست داخل مش قرار می دهیم.
یکی از مهم ترین مسائل در ریگ بندی قرار دادن درست این مفاصل در جای مورد نظر است به گونه ای که تداخلی ایجاد نشود.
قرارگیری بد مفاصل در مدل برابر است با انیمیشن گیری بد و نامنظم کارکتر.
به نکات زیر در قرار دادن مفاصل دقت کنید :
در درجه ی اول ، فقط مفصل ریشه در یک زنجیره میتواند مقادیر ترنسلیت X، Y و Z را داشته باشد.
همه مفاصل فرزند فقط میتوانند مقداری در translate X داشته باشند (طول مفصل را به ما میدهد) و تمام مقادیر چرخش برای هر مفصل باید در مقدار 0 باشد.
لازم به ذکر است ابزارها و اسکریپت های بسیاری در ریگ بندی مایا به ما کمک می کنند.
دو مورد از مهمترین ویژگی های مفاصل،
JoinOrient
translate X
Rotation Order و قفل گیمبال
Rotation Order به ترتیب عملیاتی اشاره دارد که در آن جهت شی انتخاب شده در آن ارزیابی می شود.
اجازه دهید این مورد را در مایا بهتر توضیح بدهیم.
در یک صحنه جدید، یک زنجیره 3 مفصلی ایجاد کنید که از یک بازو در نمای جلویی تقلید می کند.
مفاصل را از ریشه تا بالا تگ گذاری کنید : «شانه_جنت»، «آرنج_جنت» و «مچ_جنت».
_jnt پسوندی است که به همه مفاصل اضافه می کنیم.
شانه را انتخاب کنید و در ویرایشگر ویژگی، در تب Transform Attributes، Rotate Order را به XYZ خواهید دید.
این بدان معناست که محور Z هر دو محور Y و X را حمل خواهد کرد.
محور Y حامل محور X خواهد بود و محور X هیچ محور دیگری را حمل نخواهد کرد.
اگر آن را از راست به چپ بخوانید، منطقی تر است.
حال اگر حالت چرخش خود را روی Local تنظیم کرده باشید، ممکن است فکر کنید که اینطور نیست که شانه را به اطراف بچرخانید.
بنابراین rotate channels را روی 0 برای شانه تنظیم کنید و حالت Rotate را روی Gimbal قرار دهید.
اکنون بازو را بچرخانید و به شما نشان داده می شود که representation واقعاً چه کاری انجام می دهند.
چنل Y را 90 درجه بچرخانید و خیلی سریع، اکنون 2 محور دارید که یکی روی دیگری قرار گرفته اند : X بر روی محور Z.
اکنون بر روی قفل گیمبال که کلیک کنید : 2 محور که حرکت چرخشی مشابهی دارند را مشاهده می کنید.
این حالت خوبی نیست اما متاسفانه در برخی شرایط اجتناب ناپذیر است.
بنابراین، چگونه آن را حل کنیم ؟
خوب، خیلی ساده، باید بفهمیم که کدام محورهای چرخشی برای آن قسمت از ریگ مهم هستند و سپس ترتیب چرخش را برای آن ویرایش کنیم.
تغییر حالت چرخش به گیمبال.
به ما این امکان را می دهد که نمایش واقعی محورها را مشاهده کنیم
کنترلرهای انیمیشن
در بخش آخر این آموزش ما به ایجاد کنترل های انیمیشن می پردازیم.
در این بخش با همه قسمت های قبلی شامل : والدین، سلسله مراتب، Constraints و … کار خواهیم داشت.
رایج ترین شی برای کنترل های انیمیشن یک curve (منحنی) است.
این می تواند یک منحنی طراحی شده سفارشی با استفاده از ابزار منحنی CV یا به سادگی یک NURBS Primitive > Circle باشد.
منحنی ها غیرقابل رندر هستند و با رفتن به حالت کامپوننت می توانید خیلی سریع شکل مورد نظر خود را ویرایش کنید.
برای هر کنترل، ما قصد داریم با استفاده از گره های گروهی (transform) یک سلسله مراتب کوچک ایجاد کنم.
این به ما این امکان را می دهد که کنترل را در همان محل مفصلی که کنترل می کند قرار دهیم و جهت دهی کنیم، که بسیار امری مهم است.
همچنین این امکان را برای سطوح ثانویه کنترل فراهم می کند، و به انیماتور اجازه می دهد تا با صفر کردن channel translate و چرخش، کنترل را به حالت پیش فرض برگرداند.
حال بیایید این را اکنون روی یک زنجیره 3 مفصلی ساده امتحان کنیم.
مانند قبل، یک زنجیره 3 مفصلی ایجاد کنید که شبیه بازو است و نام مفاصل را مانند قبل تغییر دهید.
در حال حاضر، ما برای 2 مفصل اول زنجیره، کنترل ایجاد خواهیم کرد.
ابتدا به Create > NURBS Primitive بروید و Interactive Creation را غیرفعال کنید تا هر شیئی که ایجاد می کنیم در مرکز فضای World ترسیم شود.
اکنون به Create > NURBS Primitive > Circle بروید و نام آن را به «shoulder_ctrl» تغییر دهید.
پسوند همه کنترل ها ‘_ ’ctrl خواهد بود.
در حالی که کنترل هنوز در مرکز World قرار دارد، به Edit > Group بروید یا دوبار Ctrl+G را فشار دهید تا 2 گره گروهی برای بالای کنترل ایجاد کنید.
نام بالاترین گروه را به ” shoulder_ctrl_offset” و گره زیر را به “shoulder_ctrl_auto” تغییر دهید.
گره “offset” برای قرار دادن کنترل به طور تمیز و گره “auto” برای افزودن هر گونه ویژگی اضافی از طریق Set Driven Keys استفاده خواهد شد.
برای قرار دادن کنترل، از یکی از 2 روش زیر استفاده می کنیم.
هر دو شما را به یک هدف نهایی میرسانند، بنابراین هر کدام از روشها را که مناسب شماست به دلخواه انتخاب کنید.
روش شماره 1 :
گره “shoulder_ctrl_offset” را انتخاب کنید، “shoulder_jnt” (مفصلی که کنترل خواهد کرد) را تغییر دهید و روی صفحه کلید P را بزنید.
این کار گره “_offset” را در زیر مفصل ایجاد می کند.
اکنون مقادیر ترنسلیت و چرخش گره _offset را صفر کنید تا کل سلسله مراتب کنترل به همان موقعیتی که مفصل قرار دارد بچسبد.
همچنین متوجه خواهید شد که جهت گیری ها در یک راستا قرار دارند.
اکنون به سادگی «_offset» را انتخاب کرده و Shift+P را فشار دهید تا آن را از مفصل خارج کنید.
در نتیجه، باید مقداری transform در گره _offset وجود داشته باشد.
اینها مختصات مکانی است که این گره در فضای wold قرار دارد.
ما باید اینها را در حالت پیشفرض خود رها کنیم.
“_auto” یا “_ctrl” را انتخاب کنید و خواهید دید که هر دو مقدار 0 برای تمام چنل های چرخش و ترنسلیت دارند، به علاوه جهتگیریها همچنان تا محل اتصال قرار دارند. این چیزی هست که ما میخواهیم.
حال بیایید از روش شماره 2 در “elbow_jnt” استفاده کنیم.
یک کنترل دیگر ایجاد کنید و سطوح گروه را همانطور که برای کنترل شانه انجام دادیم ایجاد کنید و نام آنها را از بالا به پایین تغییر دهید :
elbow_ctrl_offset ، elbow_ctrl_auto و elbow_ctrl. سپس «elbow_jnt» را انتخاب کنید، «elbow_ctrl_offset» را با shift انتخاب کنید و به Constraints > Parent (Options) بروید.
Maintain offset را غیرفعال کنید و Apply را بزنید.
کل سلسله مراتب کنترل باید در جای خود قرار گیرد.
اکنون به سادگی گره parentConstraint را که در زیر گره «_offset» در Outliner قرار دارد، حذف کنید و دوباره، یک کنترل در جای خود دارید.
بعداً، یک اسکریپت کوچک برای خودکارسازی فرآیند ایجاد و موقعیتیابی کنترلها ایجاد میکنیم، زیرا ایجاد هر کنترل به صورت دستی میتواند فرآیند بسیار پر زحمتی باشد.
کار بعدی که باید انجام دهیم این است که این کنترل ها ساختار مفصل را هدایت کنند.
ما این کار را با Constraint انجام خواهیم داد.
«shoulder_ctrl» را انتخاب کنید، shift را انتخاب کنید «shoulder_jnt» و به Constrain > Orient (Options) بروید.
مطمئن شوید که Maintain Offset غیرفعال است و Apply را بزنید.
همین مرحله را برای آرنج نیز تکرار کنید.
اگر کنترلها را بچرخانید، متوجه میشوید که آنها واقعاً مفاصل را به حرکت در میآورند، اما یک سری مشکلاتی نیز وجود دارد !!
دلیل این امر این است که در حال حاضر، زنجیره مشترک یک راه اندازی Forward Kinematics است، در حالی که ریگ کنترلی که ما در اختیار داریم، چنین نیست.
کنترل ها از یکدیگر مستقل هستند و هیچ رابطه ای با هم ندارند.
برای تصحیح این، به سادگی «elbow_ctrl_offset» را در زیر «shoulder_ctrl» قرار دهید.
این یک رابطه Kinematics Forward شبیه به زنجیره مشترک و voila ما ایجاد می کند، ما ریگ کنترل خود را کامل داریم.
مهرسا امینی
برنامه نویس ، انیماتور ، سئوکار
در زندگی رویاهات را دنبال کن