خلاصه (Summary)

Handle CHOP موتور اصلی برای اجرای راه‌حل‌های Inverse Kinematics (IK) است که با استفاده از Handle COMP عمل می‌کند. نقش Handle CHOP تولید مقادیر چرخشی (rotation values) برای استخوان‌ها است تا دسته‌های (Handles) متصل به آن‌ها تا حد ممکن به اهداف (Targets) مربوطه نزدیک شوند.

بهترین روش برای توضیح این مفهوم با یک مثال است:

  1. محدوده‌ی فریم را تا 10000 افزایش دهید. یک Null COMP با نام “target” بسازید و برای آن چند موقعیت تصادفی انیمیت کنید.

  2. یک زنجیره سه‌استخوانی IK بدون Kinematics ایجاد کنید. به آخرین استخوان یک Handle COMP اضافه کنید.

  3. در Handle COMP، منوی Target را روی Target (همان Null COMP ساخته‌شده) تنظیم کنید.

  4. اکنون سیستم مشخص شده است. برای شروع IK وارد یک پنجره CHOP شوید.

  5. یک Handle CHOP قرار دهید. در فیلد Source نام استخوان‌هایی که ساخته بودید وارد کنید.

  6. روی دکمه Export در Handle CHOP کلیک کنید و سپس Play بزنید. حالا باید ببینید که سیستم دو استخوانی، Null انیمیت‌شده را دنبال می‌کند.

نکته: در نمایشگر هندسه (Geometry Viewer)، می‌توانید حالت Select را انتخاب کرده و استخوان‌ها را برگزینید. سپس در Handle CHOP روی دکمه Grab Source From Selection کلیک کنید. نام‌ها به‌طور خودکار وارد می‌شوند. لازم نیست هنگام انتخاب اشیاء خیلی دقیق باشید، چون اشیاء غیر استخوانی نادیده گرفته می‌شوند.

شما می‌توانید هر تعداد استخوان با هر تعداد Handle (حتی صفر) به سیستم اضافه کنید. در ادامه توضیح پارامترها جزئیات بیشتری از عملکرد ارائه می‌دهد:


پارامترها – صفحه Handle

Source (source): کانال‌های rx/ry/rz را برای هر استخوان واردشده ایجاد می‌کند.

Fixed (fixed): اگر استخوان‌هایی وارد کرده‌اید که شاخه تشکیل می‌دهند یا باید به‌عنوان یک واحد عمل کنند، آن‌ها را اینجا وارد کنید. (مثال: دو استخوانی که در شانه‌ها منشعب می‌شوند و باید به‌عنوان یک واحد بچرخند).

Iterations (iterations): افزایش این پارامتر دقت راه‌حل را بالا می‌برد اما زمان Cook را بیشتر می‌کند.

  • Preroll (فقط هنگام پیش‌محاسبه بازه‌ای از فریم‌ها، وقتی SingleFrame خاموش است): راه‌حل را به تعداد مشخصی فریم قبل از بازه‌ی درخواستی Cook می‌کند.

  • Max Angle Change: بیشینه تغییر زاویه‌ای را که استخوان‌ها می‌توانند در یک فریم حرکت کنند محدود می‌کند. برای جلوگیری از رفتارهای غیرقابل کنترل از این استفاده کنید.

Init Frame (init): فریمی را مشخص می‌کند که در آن استخوان‌ها به زوایای پیش‌فرض استراحت خود بازنشانی می‌شوند.

Preroll (preroll): تعداد تکرارهایی را مشخص می‌کند که باید در فریم اولیه برای حل محاسبه شود.

Max Angle Change (delta): حداکثر تغییر زاویه‌ای (درجه) که حل‌گر اجازه دارد هر استخوان را در هر فریم حرکت دهد. اگر حل بسیار شدید یا ناگهانی است، از این پارامتر استفاده کنید.


پارامترها – صفحه Common

Time Slice (timeslice): روشن کردن این گزینه باعث می‌شود کانال‌ها به‌صورت Time Sliced محاسبه شوند. (Time Slice فاصله زمانی بین آخرین فریم Cook و فریم جاری است).

Scope (scope): تعیین می‌کند کدام کانال‌ها تحت تأثیر قرار گیرند. برخی CHOPها از Scope String در این صفحه استفاده می‌کنند.

Sample Rate Match (srselect): ⊞ – زمانی که نرخ نمونه‌برداری ورودی‌های مختلف متفاوت است:

  • Resample At First Input’s Rate (first): نرخ ورودی اول برای بازنمونه‌گیری بقیه استفاده می‌شود.

  • Resample At Maximum Rate (max): بازنمونه‌گیری به بالاترین نرخ.

  • Resample At Minimum Rate (min): بازنمونه‌گیری به پایین‌ترین نرخ.

  • Error If Rates Differ (err): اگر نرخ‌ها متناقض باشند، نمی‌پذیرد.

Export Method (exportmethod): ⊞ – نحوه اتصال کانال CHOP به پارامتر مقصد:

  • DAT Table by Index (datindex): استفاده از جدول DAT الحاقی و ارجاع از طریق ایندکس کانال.

  • DAT Table by Name (datname): استفاده از جدول DAT الحاقی و ارجاع از طریق نام کانال.

  • Channel Name is Path:Parameter (autoname): نام کانال مسیر کامل مقصد را نشان می‌دهد (مانند geo1/transform1:tx).

Export Root (autoexportroot): مسیری که همه‌ی مسیرها در حالت Export براساس Channel Name نسبی به آن هستند.

Export Table (exporttable): جدولی در DAT که برای ذخیره اطلاعات Export هنگام استفاده از روش‌های DAT Table به کار می‌رود.


ورودی‌های اپراتور (Operator Inputs)

  • Input 0: ورودی اصلی برای داده‌های Handle


کانال‌های Info CHOP

اطلاعات اضافه‌ی Handle CHOP از طریق یک Info CHOP در دسترس است.

Common CHOP Info Channels

  • start: شروع بازه CHOP بر حسب نمونه‌ها

  • length: تعداد نمونه‌ها در CHOP

  • sample_rate: نرخ نمونه‌برداری کانال‌ها (فریم بر ثانیه)

  • num_channels: تعداد کانال‌ها در CHOP

  • time_slice: اگر Time Slice فعال باشد = 1، در غیر این صورت = 0

  • export_sernum: تعداد دفعات به‌روزرسانی اتصالات Export

Common Operator Info Channels

  • total_cooks: تعداد دفعات Cook از شروع پروسه

  • cook_time: مدت زمان Cook آخر (میلی‌ثانیه)

  • cook_frame: شماره فریم زمانی که آخرین بار Cook شد (نسبت به تایم‌لاین کامپوننت)

  • cook_abs_frame: شماره فریم Cook آخر نسبت به زمان مطلق

  • cook_start_time: زمان شروع Cook در آن فریم (میلی‌ثانیه)

  • cook_end_time: زمان پایان Cook در آن فریم (میلی‌ثانیه)

  • cooked_this_frame: اگر در این فریم Cook شده باشد = 1

  • warnings: تعداد هشدارها (اگر وجود داشته باشد)

  • errors: تعداد خطاها (اگر وجود داشته باشد)