خلاصه

Iso Surface SOP از توابع ضمنی (Implicit Functions) برای ساختن تجسم‌های سه‌بعدی از سطوح ایزومتریک استفاده می‌کند؛ همان سطوحی که در کتاب‌های ریاضیات دبیرستان (ریاضیات ۲ – تابع و رابطه) معرفی می‌شوند.

یک تابع ضمنی طوری تعریف می‌شود که مقدار آن برابر صفر باشد.
مثال:

x² + y² = r²

تابع ضمنی آن:

f(x, y) = x² + y² - r² = 0

PythonIcon.png isosurfaceSOP_Class


فهرست مطالب

  1. خلاصه

  2. پارامترها – صفحه

  3. مثال

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


پارامترها – صفحه (Parameters – Page)

  • Implicit Function func – در این قسمت تابع برای ساخت سطح ضمنی وارد می‌شود.

🔹 مثال ۱:

(me.curPos.x**2) / (4*4) - (me.curPos.y**2) / (3*3) + me.curPos.z

این فرمول یک سیکلوئید هیپربولیک (Hyperbolic Paraboloid) یا همان شکل زین اسب ایجاد می‌کند.

🔹 مثال ۲:

(me.curPos.x**2) / 0.1 + (me.curPos.y**2) / 2 + (me.curPos.z**2) / 6 - 1

این فرمول یک بیضوی (Ellipsoid) ایجاد می‌کند.

  • Minimum Bound min ⊞ – تعیین مرز برش (Clipping Plane) حداقل برای نمایش سطح ایزو.

    • X minx

    • Y miny

    • Z minz

  • Maximum Bound max ⊞ – تعیین مرز برش حداکثر برای نمایش سطح ایزو.

    • X maxx

    • Y maxy

    • Z maxz

  • Divisions divs ⊞ – تعیین تراکم یا رزولوشن چندضلعی‌های سطح ایزو در محورهای X، Y و Z.

    • X divsx

    • Y divsy

    • Z divsz

  • Compute Normals normals – به سطح نرمال اضافه می‌کند.


مثال (Example)

کار Iso Surface SOP از نظر مفهومی ساده است: این اپراتور یک عبارت ریاضی در فضای سه‌بعدی (R³) دریافت می‌کند و سطحی می‌سازد که در آن نقطه، تابع از مثبت به منفی تغییر می‌کند.

🔹 مثال پیش‌فرض:

me.curPos[0] * me.curPos[0] + me.curPos[1] * me.curPos[1] + me.curPos[2] * me.curPos[2] - 1
  • مقدار عبارت کمتر از صفر درون یک کره واحد است.

  • مقدار عبارت بیشتر از صفر بیرون کره واحد است.

وقتی SOP اجرا می‌شود (Cook)، درون حجم محدوده (Bounding Volume) داده‌شده (به‌طور پیش‌فرض از -1 تا +1 در X, Y, Z) پیمایش کرده و هندسه‌ای می‌سازد که در آن مقدار تابع برابر صفر است.

گرچه این روش برای تعریف یک کره ساده به نظر پیچیده می‌آید، اما فراتر از این مثال ساده، می‌توان از مجموعه غنی توابع ریاضی استفاده کرد (بخش Expressions).

🔹 یک مثال دیگر:
با استفاده از تابع noise() می‌توان سطح‌های پیچیده و جالب‌تری ساخت.


کانال‌های Info CHOP

اطلاعات اضافی مربوط به Iso Surface SOP را می‌توان از طریق یک Info CHOP به دست آورد.

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

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

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

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

  • last_vbo_update_time – مدت‌زمانی که در یک ترد دیگر صرف به‌روزرسانی داده‌های هندسی روی GPU از داده‌های CPU این SOP شده است (جزو زمان معمول هر فریم حساب نمی‌شود).

  • last_meta_vbo_update_time – مدت‌زمانی که در یک ترد دیگر صرف به‌روزرسانی داده‌های متاسطح (مانند متابال‌ها یا NURBS) روی GPU از داده‌های CPU این SOP شده است (جزو زمان معمول فریم حساب نمی‌شود).

کانال‌های مشترک Info برای اپراتورها

  • total_cooks – تعداد دفعات اجرای اپراتور از آغاز فرآیند.

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

  • cook_frame – شماره فریم آخرین اجرا نسبت به تایم‌لاین کامپوننت.

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

  • cook_start_time – زمان شروع اجرا در همان فریم (میلی‌ثانیه).

  • cook_end_time – زمان پایان اجرا در همان فریم (میلی‌ثانیه).

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

  • warnings – تعداد هشدارهای موجود (در صورت وجود).

  • errors – تعداد خطاهای موجود (در صورت وجود).