ریگ کامل یک ماشین در مایا – بخش سوم
دربخش قبلی به ساخت کنترل کننده ها برای قسمت های مختلف ریگ خودرو و رنگ بندی، نامگذاری و دسته بندی آنها پرداختیم. در این بخش میخواهیم به اتصال کنترلرها به مش ها و درواقع تکمیل عملیات ریگ بپردازیم.
درکل با توجه به اینکه نوع کنترل نیاز است به چه شکلی باشد، و ممکن است برای بعضی از آبجکت ها دو کنترلر مجزا درنظر گرفته شود، گاهی از Constrain و گاهی از Connect کردن مستقیم Attribute ها استفاده می شود. با این پیش فرض به سراغ متصل کردن هر curve کنترلی به مش مربوطه می رویم؛
برای درها و کاپوت های جلو و عقب، به آسانی و با انتخاب یکی از حالت های Constrain یا Attribute Connection می توان آنها را کنترل کرد، زیرا تفاوت و یا محدودیت خاصی برای نوع کنترل این بخش ها وجود ندارد؛ برای کمک فنر جلو و عقب و مرکزی باید یک سیستم پدرفرزندی حداقل سه تایی وجود داشته باشد که دربخش اول مشاهده کردیم که این کار انجام شده است. در این مورد نیز اگر آبجکت های کنترلی را به درستی ساخته باشیم، (منظور از درستی دقت در قرار دادن Pivot و مچ کردن آن با Pivot نود transform آبجکت مورد نظر است) تفاوتی در انتخاب هردونوع از کنترل ها وجود ندارد.
دراینجا لازم است که نکته ای را یادآوری کنم، همانطور که مشخص است ساده ترین راه برای کنترل تمام عیار یک آبجکت درعین حالی که می توان transform offset آبجکت کنترل شده را نیز داشت، Parentig است (: . بله parent کردن یک آبجکت به یک curve یا آبجکت دیگر، که استفاده از این حالت بستگی به نوع انیمیشنی که می خواهید روی آبجکت مورد نظر پیاده کنید و نیز بستگی به نوع خود آبجکت و یا پیچیدگی و سادگی آن دارد.
برای سیستم حرکتی و چرخ های ماشین همانطور که در که در بخش اول مشاهده کردیم، گروه بندی جدای از سیستم کمک فنر خودرو است. زیرا می خواهیم حرکت های واقعی چرخش و جابجایی چرخ های خودرو را به همراه شبیه سازی واقعی سیستم کمک فنر خودرو شبیه سازی کنیم. برای اینکار و برای راحت تر کردن کار انیماتورها بدین صورت که با انیمیت کردن کنترلر اصلی خودرو می توانند حرکت چرخ ها را نیز داشته باشند و تحویل یک ریگ حرفه ای نیاز است که یک محاسبه ی ریاضی ساده انجام شود؛ بدین صورت که میزان تغییر translate X کنترلر جابجایی را به میزان مسافت طی شده روی یک دایره با قطر چرخ خودرو تبدیل می کنیم و این مقدار چرخشی است که چرخ ها باید داشته باشند. در بخش قبل سه آبجکت را بدون توضیح گذاشته بودیم، این سه برای بدست آوردن قطر چرخ ماشین است که با استفاده از distance tool بدست آورده شده است.
برای تکمیل ریگ سیستم حرکتی ماشین بدین صورت عمل می کنیم :
- ابتدا هر کدام از چرخ ها را به کنترلر مربوط به آن با Constrain یا Attribute Connection متصل می کنیم.
- چرخش حول محور Y چرخ های جلو مستقل از سیستم جابجایی و محاسبه ی میزان چرخش همه ی چرخ ها حول محور X است، بنابراین این کار را با اتصال این channel به کنترلر مربوط به فرمان انجام می دهیم.
- با استفاده از یک Expression که در آن میزان چرخش حول محور X هر چرخ را محاسبه و به rotate x همه ی چرخ ها مقدار دهی می کنیم.
- متن Expression بصورت زیر است:
anim_wheel_l_front01.rotateZ = (anim_moving01.translateX / (2 * distance_wheel_size0Shape1.distance * 3.14)) * -360; anim_wheel_r_front01.rotateZ = anim_wheel_l_front01.rotateZ; anim_wheel_r_back01.rotateZ = anim_wheel_l_front01.rotateZ; anim_wheel_l_back01.rotateZ = anim_wheel_l_front01.rotateZ;
برای شبیه سازی بهتر سیستم کمک فنر خودرو مقداری آزادی حرکت عمودی نیز به کنترلرهای چرخ ها بصورت مستقل داده شده است. به بخش آخر کار نزدیک شدیم، اما قبل از آن دو کار باقی مانده است، یکی ریگ برف پاک کن ها (: و دیگری کنترل درست Scale و مدیریت آن.
برای برف پاک کن ها کنترلر درنظر گرفته شده است، اما برای یک ریگ دوستانه برای انیماتور یا در اصطلاح Animator Friendly، باید امکان بهترین حرکتی که انیماتور ممکن است برای انیمیت این آبجکت بخواهد را به آن بدهیم، خب برف پاک کن مانند یک کلید حالت صفر دارد و حالت قهرمان (: . یعنی شروع و پایان و بین آن نیز قابل دسترسی است؛ خب به راحتی می توان با انجام Set Driven Key این حرکت را برای انیماتور فراهم کرد.
حالت صفر را مقدار صفر و حالت قهرمان (: را مقدار یک در channel جدیدی که برای کنترلر ساختیم درنظر میگیریم. این کار باعث می شود انیماتور دیگر زحمت درگیر شدن با جزئیات Rotation و Translation آبجکت ها را نمی کشد و با آسودگی به انیمیت می پردازد.
برای کنترل scale توسط یک کنترلر، همانطور که در بخش قبل دیدیم یک آبکجت به نام anim_global01 ساخته شده است که همه ی دیگر کنترلر ها فرزند آن هستند. بخش هایی هم که با واسطه فرزند آن هستند و یا مشکل double parenting پیش میاید، می توان با scale constrain خدمتشان رسید (: .
آخرین بخش ریگ و درواقع تمیزکاری و تکمیل فرآیند ریگینگ، محدود کردن مقدار channel ها برای بیشتر کنترلرها و قفل و مخفی کردن channel های اضافه است؛ هرجایی که نمی خواهیم انیماتور از channel خاصی استفاده کند آن را قفل و مخفی می کنیم و هرجایی که نیاز است مقدار یک channel در یک بازه ی خاص باشد، در تب نود transform در پنجره ی Attribute Editor و با استفاده از بخش Limit Information، می توان اینکار را انجام داد.
درپایان با تشکر از صبوری و همراهی شما تا انتهای این بخش و این مطلب، امیدوارم این مطلب برای شما مفید واقع شده باشد.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.