خلاصه (Summary)

یک Actor COMP مشابه یک جسم (یا چند جسم) در یک سیستم فیزیکی است.
Actor COMP باید همراه با یک حل‌کننده فیزیک (Physics Solver) استفاده شود:

  • یا Bullet Solver COMP

  • یا Nvidia Flex Solver COMP

که این حل‌کننده‌ها شبیه به دنیای شبیه‌سازی هستند که Actorها/اجسام در آن فعالیت می‌کنند.

یک Actor COMP می‌تواند:

  • استاتیک (Static) باشد → تحت تأثیر هیچ نیرویی قرار نمی‌گیرد و حرکت نمی‌کند (جرم بی‌نهایت دارد).

  • داینامیک (Dynamic) باشد → با نیرو حرکت می‌کند و با اجسام دیگر (استاتیک یا داینامیک) برخورد می‌کند.

🔗 لینک های مرتبط: Flex، Bullet Dynamics، Bullet Solver COMP، Force COMP، Constraint COMP، Bullet Solver CHOP، Nvidia Flex Solver COMP، Nvidia Flex TOP


استفاده (Usage)

Actorها در Bullet

  • اجسام استاتیک می‌توانند مقعر (Concave) یا محدب (Convex) باشند.

  • اجسام داینامیک باید محدب باشند.

  • ولی می‌شود شکل‌های برخورد داینامیک را به صورت ترکیبی (Compound) ساخت (یعنی با چند شکل محدب، یک جسم مقعر ایجاد کرد).

این کار با چند SOP انجام می‌شود:

  • هر SOP باید محدب باشد.

  • اما ترکیب آن‌ها می‌تواند مقعر شود.

  • اگر حالت Automatic انتخاب شود، یک شکل برخورد ترکیبی از SOPها ساخته خواهد شد.


شکل برخورد (Collision Shape)

  • هر Actor یک شکل برخورد دارد.

  • شکل برخورد تعیین می‌کند که اجسام چطور با هم برخورد کنند.

  • چیزی که در رندر/ویو دیده می‌شود الزماً همان شکل برخورد نیست.

ساخت شکل برخورد از دو روش:

  1. استفاده از پارامتر Collision SOPs

  2. یا قرار دادن SOPها داخل Actor COMP (با فعال بودن پرچم‌های Display و Render).


چند جسم (Multiple Bodies)

  • برای ساخت چند جسم، باید از Instancing در صفحه Instance استفاده کرد.

  • این کار اجسام یکسان (با شکل برخورد یکسان) می‌سازد.

  • فعلاً راهی برای ساخت چند جسم غیر یکسان در یک Actor COMP وجود ندارد.


ری‌اینیشیالایز (Reinitialize)

  • هر زمان تغییر در SOPها ایجاد شود باید با پارامتر Initialize Actor بازیابی شوند.

  • تغییراتی مثل: Kinematic State، شکل، یا مرکز جرم باعث ری‌اینیشیالایز می‌شوند.


Transformها

  • می‌توان از صفحات Xform و Pre-Xform استفاده کرد (مثل Geometry COMP یا Camera COMP).

  • تغییر Scale نیاز به ری‌اینیشیالایز دارد چون شکل برخورد تغییر می‌کند.

  • هنگام Instancing هم اگر Transform تغییر کند، Actor ری‌اینیشیالایز می‌شود.


محدودیت تو در تو شدن (Nesting)

  • Actor COMP نمی‌تواند در Actor COMP دیگر قرار گیرد.

  • ولی می‌تواند داخل Geometry COMP باشد و برعکس.

  • Geometry COMPهایی که Actor دارند نباید Scale داشته باشند.

  • اما اگر Geometry داخل Actor باشد، می‌تواند Scale داشته باشد.

  • Actor داخل Geometry فقط موقع Initialize Transform آن را می‌گیرد؛ تغییرات بعدی نیازمند ری‌اینیشیالایز هستند.


Actorها در Flex

  • در Flex، Actor می‌تواند:

    1. ذره‌های سیال (Fluid Particles)

    2. منبع ذره سیال (Fluid Emitter)

    3. یا شکل استاتیک باشد.

  • شکل‌های استاتیک با Triangle Mesh SOP ساخته می‌شوند.

  • ذره‌های سیال مثل Instancing در Bullet هستند: تعدادشان = تعداد Instances.

  • رفتار آن‌ها توسط پارامترهای Solver (Nvidia Flex) تعیین می‌شود.

  • برای نمایش، می‌توان از SOP یا Nvidia Flex TOP استفاده کرد.

Emitterها ذره‌ها را در نقطه انتشار اضافه می‌کنند تا به حداکثر برسند؛ بعد از آن ذرات بازیافت می‌شوند.


چرا اجسام برخورد نمی‌کنند؟

  • چون Bullet به صورت گسسته (Discrete) شبیه‌سازی می‌کند.

  • برخوردها فقط در ابتدای فریم و انتهای فریم بررسی می‌شوند.

  • اگر جسم سریع حرکت کند، ممکن است از بین اجسام عبور کند (Clipping).

  • اجسام خیلی نازک هم به راحتی عبور می‌کنند.

راه‌حل:

  • استفاده از Continuous Collision Detection (CCD) → بررسی برخورد بین شروع و پایان فریم.

  • محدود کردن سرعت اجسام یا کاهش نیروها.

  • افزایش ضخامت اجسام خیلی نازک (مثلاً به جای Grid SOP، Box SOP).


پارامترها (Parameters)

صفحه General

  • Initialize Actor → بازسازی شکل برخورد و ریست سرعت/موقعیت.

  • Update Collision Shape → به‌روزرسانی خودکار شکل برخورد هنگام تغییر SOPها.

  • Active → فعال/غیرفعال بودن Actor در شبیه‌سازی.

  • Kinematic State → استاتیک یا داینامیک بودن.

  • Collision SOPs → مشخص کردن SOP/COMP برای شکل برخورد.

  • Collision Shape → انتخاب نوع شکل برخورد: Concave, Convex Hull, OBB, AABB, Sphere, Compound …

  • Mass → جرم جسم.

  • Velocity → سرعت خطی و زاویه‌ای اولیه.


صفحه Bullet

  • Forces → لیست نیروهای محلی.

  • Gravity → گرانش محلی (یا استفاده از گرانش Solver).

  • Friction → اصطکاک لغزشی.

  • Rolling Friction → اصطکاک غلتشی.

  • Restitution → ضریب کشسانی (میزان جهش پس از برخورد).

  • CCD → برخورد پیوسته.

  • Center of Mass → مرکز جرم.

  • Feedback CHOP → گرفتن و برگرداندن داده‌های Transform/Velocity.


صفحه Flex

  • Flex Type → انتخاب نوع Actor: Fluid یا Fluid Emitter.

  • Emission Size / Speed / Max → تنظیمات نشر ذره.

  • Position Feedback TOP → بازخورد مکان.

  • Velocity Feedback TOP → بازخورد سرعت.


صفحه Xform

  • کنترل Transform: Translate، Rotate، Scale، Pivot.

  • Transform Order → ترتیب اعمال تغییرات.

  • Rotate Order → ترتیب چرخش‌ها.

  • Look At → نگاه کردن Actor به یک شیء.

  • Path SOP → حرکت روی یک مسیر.


صفحه Pre-Xform

  • اعمال Transform قبل از Xform (مثل Parent Transform).

  • شامل Translate، Rotate، Scale، Pivot.

    Uniform Scale

    pscale – به مستندات صفحه Xform مراجعه کنید برای اطلاعات بیشتر.

    Reset Transform preset

    این دکمه ترنسفورم (تغییر مکان/چرخش/مقیاس) این صفحه را ریست می‌کند، به طوری که هیچ translate/rotate/scale اعمال نشده باشد.

    Commit to Main Transform

    pcommit – این دکمه مقدار ترنسفورم این صفحه را به صفحه اصلی Xform کپی می‌کند و سپس ترنسفورم این صفحه را ریست می‌کند.

    Xform Matrix/CHOP/DAT

    xformmatrixop – این پارامتر امکان استفاده مستقیم از یک ماتریس ۴×۴ را برای ترنسفورم می‌دهد. برای اطلاعات بیشتر درباره روش‌های تعریف مستقیم ماتریس به صفحه Matrix Parameters مراجعه کنید.
    این ترنسفورم بعد از ترنسفورم Pre-Transform اعمال می‌شود، یعنی به ترتیب زیر:

    XformMatrix * PreXForm * Position

    Parameters – Instance Page

    صفحه Instance امکان ساخت instancing سخت‌افزاری برای هندسه را فراهم می‌کند.

    • هر instance یک Instance ID دارد که می‌تواند به یک شیدر MAT از طریق مقدار uniform پاس داده شود.

    • این Instance ID می‌تواند توسط Render Pick CHOP بازیابی شود.

    • کدهای نوشته‌شده در Vertex Shader می‌توانند ظاهر هر instance را بر اساس Instance ID شخصی‌سازی کنند.

    منبع داده برای Instance

    ویژگی‌های هر Instance می‌تواند توسط داده‌های انواع مختلف OP کنترل شود:

    • اگر داده از TOP بیاید → کانال‌های RGBA به ویژگی‌های instance اختصاص می‌یابند.

    • اگر داده از CHOP بیاید → کانال‌های CHOP به ویژگی‌های instance اختصاص می‌یابند.

    • اگر از SOP بیاید → Attributeهای SOP به ویژگی‌های instance اختصاص می‌یابند.

    • اگر از DAT استفاده شود → ستون‌های جدول به ویژگی‌های instance اختصاص می‌یابند.

    تنظیم نگاشت داده‌های OP به ویژگی‌های instance در همین صفحه و صفحات Instance 2 و Instance 3 انجام می‌شود.


    Instancing

    instancing – instancing را برای Geometry Component فعال می‌کند.

    Instance Count Mode

    instancecountmode – دو حالت برای تعیین تعداد instanceها وجود دارد:

    • Manual → استفاده از پارامتر Num Instances.

    • Instance OP(s) Length → تعداد سطرهای DAT یا تعداد نمونه‌های CHOP تعیین‌کننده تعداد instanceهاست.

    Num Instances

    numinstances – در حالت Manual تعداد instanceها را مشخص می‌کند.

    Default Instance OP

    instanceop – مسیر یک CHOP یا DAT را مشخص می‌کند که داده ترنسفورم instanceها را فراهم کند. تعداد سطرها/نمونه‌ها تعداد instanceها را مشخص می‌کند.

    First Row is

    instancefirstrow – در حالت استفاده از DAT، تعیین می‌کند با سطر اول جدول چه رفتاری شود:

    • Ignored → سطر اول نادیده گرفته می‌شود.

    • Names → سطر اول نام ستون‌هاست.

    • Values → سطر اول داده اولین instance است.


    Transform Order

    instxord – ترتیب اعمال Transform روی هر instance:

    • Scale → Rotate → Translate (srt)

    • Scale → Translate → Rotate (str)

    • Rotate → Scale → Translate (rst)

    • Rotate → Translate → Scale (rts)

    • Translate → Scale → Rotate (tsr)

    • Translate → Rotate → Scale (trs)

    Rotate Order

    instrord – ترتیب اعمال چرخش‌ها:

    • Rx Ry Rz (xyz)

    • Rx Rz Ry (xzy)

    • Ry Rx Rz (yxz)

    • Ry Rz Rx (yzx)

    • Rz Rx Ry (zxy)

    • Rz Ry Rx (zyx)


    Translate OP

    instancetop – انتخاب اپراتور برای داده ترنسلیت (X, Y, Z).

    • Active → انتخاب کانالی که تعیین می‌کند کدام instance رندر شود (مقدار ۰ = غیرفعال).

    • Translate X/Y/Z → انتخاب داده برای جابه‌جایی هر محور.


    Rotate OP

    instancerop – انتخاب اپراتور برای داده چرخش (X, Y, Z).

    Scale OP

    instancesop – انتخاب اپراتور برای داده مقیاس (X, Y, Z).

    Pivot OP

    instancepop – انتخاب اپراتور برای داده پیوت (X, Y, Z).


    Parameters – Instance 2 Page

    زمانی که داده instance از TOP بیاید → RGBA به ویژگی‌ها اختصاص داده می‌شود.
    زمانی که داده از CHOP بیاید → کانال‌ها به ویژگی‌ها.
    از SOP → Attributeها.
    از DAT → ستون‌ها.


    Rotate to Vector

    • Order (instancerottoorder) → مشخص می‌کند عمل Rotate to Vector در کجای معادله Transform اعمال شود.

    • Forward Direction (instancerottoforward) → تعیین می‌کند کدام محور جهت جلو محسوب شود.

    Rotate to OP

    instancerottoop – انتخاب اپراتور برای داده چرخش به بردار.

    • Rotate to Vector X/Y/Z → داده بردار هدف.

    Rotate Up OP

    instancerotupop – انتخاب اپراتور برای داده Rotate Up.

    • Rotate Up X/Y/Z → داده مربوطه.


    Instance Order

    instanceorder – ترتیب اعمال ترنسفورم:

    • Instance, then World Transform → worldXform * instanceXForm * Position

    • World, then Instance → instanceXForm * worldXForm * Position


    Texture Mode

    instancetexmode – نحوه اعمال مختصات بافت:

    • Replace → جایگزینی

    • Transform → انتقال

    Texture Coord OP

    instancetexcoordop – اپراتور برای مختصات بافت (U, V, W).


    Color Mode

    instancecolormode – نحوه تعامل رنگ instance با Cd از SOP:

    • Replace / Multiply / Add / Subtract

    Color OP

    instancecolorop – اپراتور برای رنگ (R, G, B, A).


    Instance Textures

    instancetexs – مسیر یک یا چند TOP برای تکسچرهای instance.

    • Extend U/V/W → Hold, Zero, Repeat, Mirror

    • Filter → Nearest, Linear, Mipmap Linear

    • Anisotropic Filter → Off, 2x, 4x, 8x, 16x

    📌 هر instance می‌تواند تکسچر متفاوت داشته باشد (برخلاف Texture Array).

    • حداکثر در ویندوز → 16384 تکسچر.

    • در macOS → 128 تکسچر.


    Texture Index

    instancetexindexop / instancetexindex – انتخاب اپراتور و داده برای تعیین اینکه کدام تکسچر روی هر instance اعمال شود.


    Parameters – Instance 3 Page

    اینجا می‌توان ویژگی‌های دلخواه (Custom Attributes) تعریف کرد که در GLSL MAT قابل استفاده هستند.

    • instance0customop → انتخاب اپراتور داده.

    • X, Y, Z, W → مقدار ویژگی.

    • این ویژگی‌ها با TDInstanceCustomAttrib0() و غیره در GLSL قابل دسترسی‌اند.


    Parameters – Render Page

    • Material → انتخاب MAT برای هندسه.

    • Render → روشن/خاموش بودن رندر.

    • Draw Priority → ترتیب رسم (برای شفافیت).

    • Pick Priority → انتخاب شیء در Render Pick.

    • Wireframe Color → رنگ در حالت Wireframe.

    • Light Mask → تعیین چراغ‌های تأثیرگذار.


    Parameters – Extensions Page

    • Extension → لیست اکستنشن‌های پایتون برای کامپوننت.

    • Name / Object / Promote → تنظیمات مربوطه.

    • Re-Init Extensions → بازکامپایل همه اکستنشن‌ها.


    Parameters – Common Page

    • Parent Shortcut → نام مستعار مسیر والد.

    • Global OP Shortcut → نام مستعار سراسری.

    • Internal OP → تعریف اپراتور داخلی.

    • Node View → انتخاب نمای نود (Viewer).

    • Cloning → تنظیمات Clone Master.

    • External .tox → بارگذاری از فایل tox خارجی.

    • Reload Parameters → بازخوانی پارامترها هنگام ری‌لود tox.

    • Backup → ذخیره نسخه پشتیبان.

    • Sub-Component to Load → بارگذاری یک زیرکامپوننت خاص از tox.

    • Relative File Path Behavior → تنظیم مسیرها (نسبت به toe یا tox).


    Info CHOP Channels

    Actor COMP Info

    • num_bodies

    • num_active_bodies

    Common COMP Info

    • num_children – تعداد فرزندها.

    Common Operator Info

    • total_cooks – تعداد دفعات cook.

    • cook_time – مدت cook آخر (ms).

    • cook_frame – فریم cook آخر نسبت به timeline.

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

    • cook_start_time – زمان شروع cook (ms).

    • cook_end_time – زمان پایان cook (ms).

    • cooked_this_frame – آیا این فریم cook شده یا نه.

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

    • errors – تعداد خطاها.