خلاصه
Fit SOP یک منحنی اسپلاین (Spline curve) را بر اساس یک دنباله از نقاط و یا یک سطح اسپلاین (Spline surface) را بر اساس یک شبکه‌ی m × n از نقاط برازش می‌دهد.

هر نوع سطح یا Face به عنوان ورودی معتبر است. Fit SOP فقط به رئوس کنترلی (CVs) پرایمیتیوها نگاه می‌کند و آن‌ها را به عنوان داده‌هایی برای برازش در نظر می‌گیرد. به عنوان مثال، اگر یک سطح NURBS مکعبی و یک شبکه تعداد ردیف‌ها و ستون‌های یکسان و نقاط یکسانی داشته باشند، نتیجه‌ی برازش یکسان خواهد بود، زیرا پایه‌های اسپلاینِ سطح NURBS ورودی نادیده گرفته می‌شوند.

Fit SOP دو نوع خروجی تولید می‌کند:

  • پرایمیتیوهایی که به‌طور تقریبی مسیر نقاط داده را دنبال می‌کنند (اما لزوماً از آن‌ها عبور نمی‌کنند).

  • پرایمیتیوهایی که از تمام نقاط داده عبور می‌کنند.

نوع اول که تقریب (Approximation) نام دارد، بیشتر برای استخراج یک شکل روان و سبک از مجموعه‌های داده سنگین استفاده می‌شود و ابزار خوبی برای کاهش داده‌ها است. نوع دوم که درون‌یابی (Interpolation) نام دارد، معمولاً برای صاف کردن مسیرهایی استفاده می‌شود که باید از موقعیت‌های هدف مشخص عبور کنند.


پارامترها – برگه‌ی کلی

Group group – اگر ورودی شامل گروه‌هایی باشد، با مشخص کردن نام گروه در این قسمت، SOP فقط روی همان گروه عمل خواهد کرد. الگوها (patterns) همانند الگوهای تطبیق (Pattern Matching) پذیرفته می‌شوند.


پارامترها – برگه‌ی Fit

این برگه‌ی اصلی SOP است و هدف آن تعیین نوع برازش و ویژگی‌های پرایمیتیو خروجی است.

  • Method method ⊞ – یکی از دو سبک برازش را مشخص می‌کند:

    • Approximation (تقریب)

    • Interpolation (درون‌یابی)

  • Primitive Type type ⊞ – خروجی Fit SOP یک پرایمیتیو NURBS یا Bézier خواهد بود. تمام Faces به منحنی اسپلاین و تمام سطوح به سطح اسپلاین برازش داده می‌شوند. شکل‌های حاصل چه به صورت NURBS و چه Bézier یکسان خواهند بود.

  • Connectivity surftype ⊞ – نوع اتصال سطح (برای Mesh) را مشخص می‌کند:

    • Rows – ایجاد خطوط افقی

    • Columns – ایجاد خطوط عمودی

    • Rows and Columns – هر دو (ظاهر چهارضلعی دارد، اما در صورت انتخاب Polygon باز است)

    • Triangles – ایجاد شبکه مثلثی

    • Quadrilaterals – شبکه چهارضلعی (پیش‌فرض)

    • Alternating Triangles – ایجاد مثلث‌های متناوب

  • U Order orderu – مرتبه‌ی اسپلاین در جهت U.

  • V Order orderv – مرتبه‌ی اسپلاین در جهت V (فقط برای سطوح، برای Face بی‌ارتباط است).


پارامترها – برگه‌ی Approximation

برازش تقریبی برای ایجاد یک شکل روان و سبک از داده‌های متراکم به کار می‌رود. خروجی موقعیت و ویژگی‌های نقاط را تقریب می‌کند، اما لزوماً از همه‌ی آن‌ها عبور نمی‌کند (به‌جز نقاط ابتدایی و انتهایی).

  • Tolerance tol – عامل اصلی دقت است. هرچه مقدار کمتر باشد، برازش دقیق‌تر و تعداد رأس‌های بیشتری تولید می‌شود.

  • Smoothness smooth – میزان نرمی شکل خروجی را تعیین می‌کند.

  • U Multiple Knots / V Multiple Knots – گره‌های چندگانه در نواحی انحناهای تند برای حفظ تیزی‌ها استفاده می‌شوند.


پارامترها – صفحه میان‌یابی (Interpolation)

میان‌یابی (Interpolation) برای تولید شکل‌هایی استفاده می‌شود که دقیقاً از میان داده‌ها عبور می‌کنند (یعنی نقاط داده و ویژگی‌های آن‌ها را به طور کامل در بر می‌گیرند).
بر خلاف روش تقریب (Approximation)، میان‌یابی روی مجموعه داده‌های کوچک عملکرد بهتری دارد. همچنین، برخلاف روش تقریب، ساختار خروجی لاغرتر از ورودی تولید نمی‌کند و در برخی موارد حتی تعداد CVهای بیشتری نسبت به ورودی ایجاد می‌کند. به همین دلیل، استفاده از میان‌یابی باید محدود به مواردی باشد که دقت عبور از نقاط اهمیت دارد، مانند ساخت مسیرهای دقیق انیمیشن.


Scope (دامنه)

scope – ⊞ – روش میان‌یابی را مشخص می‌کند.

  • Global (سراسری) – میان‌یابی سراسری کل داده‌ها را به یک‌باره در نظر می‌گیرد و دقیقاً به همان تعداد CV ایجاد می‌کند که نقاط داده وجود دارد.

  • Local (Curves Only) (محلی – فقط برای منحنی‌ها) – میان‌یابی محلی رویکردی هندسی دارد و منحنی یا سطح را یک span (بخش) در هر مرحله می‌سازد، تنها از داده‌های محلی استفاده می‌کند. این روش تعداد CV بیشتری نسبت به تعداد نقاط داده ایجاد می‌کند، اما معمولاً هم‌خوانی دقیق‌تری نسبت به روش سراسری دارد. همچنین محاسبات کمتری نیاز دارد و گوشه‌ها و تغییرات محلی را بهتر مدیریت می‌کند.

  • Breakpoints (نقاط شکست) – نوعی میان‌یابی سراسری است که تضمین می‌کند مکان نقاط داده با نقاط شکست منحنی تولیدشده مطابقت دارد. نقاط شکست منحنی Spline تصویر پایه‌های Spline روی منحنی هستند. این روش فقط برای منحنی‌ها قابل استفاده است.


U Data Parameter (پارامتر داده U)

dataparmu – ⊞ – پارامتری‌سازی داده‌ها در جهت U (تنها جهت اگر ورودی یک منحنی باشد).

  • Uniform (یکسان) – پارامترها با فاصله مساوی قرار می‌گیرند. بهترین عملکرد را برای هندسه بسیار منظم دارد. برای داده‌های با فاصله نامساوی، این روش ممکن است شکل‌های غیرمنطقی تولید کند و توصیه نمی‌شود.

  • Chord Length (طول وتر) – پارامتری‌سازی براساس فاصله نسبی بین نقاط متوالی داده انجام می‌شود. رایج‌ترین روش است و معمولاً دقیق‌ترین نتایج را می‌دهد.

  • Centripetal (پارامتری‌سازی گریز از مرکز) – شبیه به طول وتر است اما برای داده‌های با گوشه‌های تیز بهتر عمل می‌کند.


V Data Parameter (پارامتر داده V)

dataparmv – ⊞ – پارامتری‌سازی داده‌ها در جهت V مشابه پارامتر U است، اما وقتی ورودی یک سطح است اعمال می‌شود. در صورتی که ورودی یک face باشد، استفاده نمی‌شود.


U Wrap (بسته شدن در جهت U)

closeu – ⊞ – تعیین می‌کند منحنی یا سطح تولیدشده در جهت پارامتریک U بسته شود یا نه. گزینه‌ها: باز (Off)، بسته (On)، یا همانند نوع بسته‌شدن پرمی‌تیو ورودی.

  • Off (باز) – nonewu

  • On (بسته) – wu

  • If Primitive does (مانند ورودی) – ifprimwu


V Wrap (بسته شدن در جهت V)

closev – ⊞ – تعیین می‌کند سطح تولیدشده در جهت V بسته شود یا نه. گزینه‌ها مشابه U Wrap هستند. برای ورودی face نادیده گرفته می‌شود.

  • Off (باز) – nonewv

  • On (بسته) – wv

  • If Primitive does (مانند ورودی) – ifprimwv


Fit Corners (حفظ گوشه‌ها)

corners – مشخص می‌کند آیا گوشه‌های داده در میان‌یابی محلی منحنی حفظ شوند یا خیر.


ورودی‌های اپراتور

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


کانال‌های Info CHOP

اطلاعات اضافی Fit SOP از طریق Info CHOP قابل دسترسی است.

کانال‌های مشترک اطلاعات SOP:

  • num_points – تعداد نقاط در این SOP

  • num_prims – تعداد پرمی‌تیوها

  • num_particles – تعداد ذرات

  • last_vbo_update_time – زمان صرف‌شده در thread دیگر برای به‌روزرسانی داده‌های هندسه روی GPU

  • last_meta_vbo_update_time – زمان صرف‌شده برای به‌روزرسانی هندسه متا (مانند metaball یا NURBS)

کانال‌های مشترک اطلاعات اپراتور:

  • total_cooks – تعداد دفعات اجرای اپراتور

  • cook_time – مدت زمان آخرین اجرا به میلی‌ثانیه

  • cook_frame – شماره فریم آخرین اجرا نسبت به timeline

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

  • cook_start_time – زمان شروع اجرا در همان فریم

  • cook_end_time – زمان پایان اجرا در همان فریم

  • cooked_this_frame – ۱ اگر اپراتور در این فریم اجرا شده باشد

  • warnings – تعداد هشدارها