خلاصه (Summary)

Metaball SOP سطوح متابال و متا-سوپرکوادریک (meta-superquadric) ایجاد می‌کند.

متابال‌ها را می‌توان به عنوان میدان‌های نیروی کروی در نظر گرفت که سطح آن‌ها توسط یک تابع ضمنی (implicit function) تعریف می‌شود؛ در نقاطی که تراکم میدان نیرو برابر با یک آستانه‌ی مشخص است، سطح متابال شکل می‌گیرد.

از آن‌جا که تراکم میدان نیرو با نزدیکی سایر میدان‌های متابال افزایش می‌یابد، متابال‌ها خاصیت منحصربه‌فردی دارند:
شکل خود را تغییر می‌دهند تا با متابال‌های اطراف سازگار شده و در هم ادغام شوند.

این ویژگی آن‌ها را برای مدل‌سازی سطوح ارگانیک بسیار مؤثر می‌کند.

به‌عنوان مثال، در تصویر زیر یک متابال دیده می‌شود. سطح متابال در هر نقطه‌ای که تراکم میدانش به آستانه‌ی مشخص برسد وجود دارد:

🖼️ MetaExample1.jpg

وقتی دو یا چند میدان نیروی متابال با یکدیگر ترکیب می‌شوند (مثل تصویر زیر)، تراکم میدان‌ها با هم جمع می‌شود، و سطح متابال گسترش می‌یابد تا ناحیه‌ای را که تراکم آن‌ها به مقدار ۱ می‌رسد در بر بگیرد.
برای اطلاعات بیشتر، به صفحه‌ی Metaballs مراجعه کنید.

🖼️ MetaExample2.jpg


🔍 سطح جزئیات برای نمایش متابال‌ها (Level of Detail for Metaball Display)

می‌توانی میزان جزئیات نمایش متابال و سطوح NURBS را با تغییر پارامتر Level of Detail در مسیر زیر تنظیم کنی:
Display Option Dialog → Viewport Page → Level of Detail Option

برای باز کردن پنجره‌ی Display Options، کافیست در نمای SOP دکمه‌ی “p” را فشار دهی.


💡 نکته برای سایه‌زنی بهتر متابال‌ها (Better Metaball Shading Tip)

اگر در هنگام تبدیل متابال‌ها به چندضلعی (polygons)، ویژگی نرمال (normal) وجود داشته باشد، نرمال‌های دقیق‌تری محاسبه می‌شوند.
بنابراین، برای سایه‌زنی بهتر در متابال‌های چندضلعی‌شده، توصیه می‌شود پیش از تبدیل، با استفاده از یک Facet SOP ویژگی نرمال را اضافه کنی.

📘 کلاس پایتون: metaballSOP_Class


📋 فهرست مطالب

  1. خلاصه
     1.1. سطح جزئیات متابال
     1.2. نکته برای سایه‌زنی بهتر

  2. پارامترها – صفحه اصلی
     2.1. نمایه (Exponent) چیست؟

  3. ورودی‌های عملگر

  4. کانال‌های Info CHOP
     4.1. کانال‌های مشترک SOP Info
     4.2. کانال‌های مشترک Operator Info


⚙️ پارامترها – صفحه اصلی (Parameters – Page)

🔹 Modify Bounds – modifybounds

فقط زمانی فعال است که یک ورودی به Metaball SOP متصل شده باشد تا محدوده‌ی متابال تعیین شود.
وقتی این گزینه روشن (On) باشد، پارامترهای تبدیل زیر، موقعیت و شعاع محدوده را تغییر می‌دهند.


🔹 Radius – rad

کنترل‌کننده‌ی شعاع میدان متابال

  • X: radx

  • Y: rady

  • Z: radz


🔹 Center – t

تعیین مرکز متابال در محورهای X، Y و Z

  • X: tx

  • Y: ty

  • Z: tz


🔹 Weight – metaweight

وزن سطح ایزومتریک (iso-surface) متابال را در میدان تعیین می‌کند.
افزایش وزن باعث افزایش تراکم متابال شده و بنابراین سطح ضمنی تعریف‌شده (و متابال‌های اطراف) گسترش می‌یابد.


🔹 Kernel Function – kernel

چهار نوع تفسیر برای متابال وجود دارد:

  • Wyvill

  • Elendt

  • Blinn

  • Links

برای دیدن تفاوت‌ها، به مقالات مربوط به Geometry مراجعه کن.


🔹 XY Exponent – expxy

نمایه‌ی XY میزان انبساط یا انقباض در محورهای X و Y را تعیین می‌کند.


🔹 Z Exponent – expz

نمایه‌ی Z میزان انبساط یا انقباض در محور Z را تعیین می‌کند.


🔹 Compute Normals – normals

با فعال کردن این گزینه، نرمال‌ها روی هندسه ایجاد می‌شوند.


ℹ️ نمایه (Exponent) چیست؟

در مورد متابال‌ها، مقدار نمایه مشخص می‌کند که شکل به سمت چه حالتی متمایل شود:

  • مقدار > 1 → شکل به حالت ستاره‌ای (Star-like) میل می‌کند

  • مقدار < 1 → شکل به حالت چهارگوش (Square-like) نزدیک می‌شود

  • مقدار = 1 → شکل به حالت کروی (Spherical) است


🔌 ورودی‌های عملگر (Operator Inputs)

  • Input 0: (اختیاری – برای تعیین محدوده یا اتصال داده‌های دیگر)


📊 کانال‌های Info CHOP (اطلاعات اضافی)

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


🔹 کانال‌های مشترک SOP Info

  • num_points: تعداد نقاط

  • num_prims: تعداد اشکال اولیه

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

  • last_vbo_update_time: مدت زمانی که در ترد دیگر صرف به‌روزرسانی داده‌های هندسی GPU شده (جزو زمان فریم نیست)

  • last_meta_vbo_update_time: زمان صرف‌شده برای به‌روزرسانی داده‌های سطحی متا (مثل NURBS یا متابال‌ها)


🔹 کانال‌های مشترک Operator Info

  • 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 شده

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

  • errors: تعداد خطاها