خلاصه (Summary)

Spring SOP با استفاده از «نیروهای فنری» روی لبه‌های چندضلعی‌ها و جرم‌های متصل به هر نقطه، هندسهٔ ورودی را تغییرشکل (deform) داده و جابه‌جا می‌کند.

تغییرشکل هندسه با نیروهایی انجام می‌شود که فیزیک ساده را روی نقاط و لبه‌ها شبیه‌سازی می‌کنند. به هر نقطه یک «جرم» شبیه‌سازی‌شده اختصاص می‌یابد. لبه‌های پرIMITiveها مانند «فنر» عمل می‌کنند که با نیروها مقابله کرده و نقاط را به سمت موقعیت‌های اصلی‌شان می‌کشند. وقتی فنرها به‌وسیلهٔ نیروها کشیده می‌شوند، تلاش می‌کنند نقاط را به عقب برگردانند. با این حال نقاط وقتی به موقعیت‌های اصلی بازمی‌گردند متوقف نمی‌شوند، بلکه به‌دلیل جرم‌شان به نوسان ادامه می‌دهند تا زمانی که نوسان از بین برود.

نیروهایی که بر نقاط اثر می‌گذارند:

  • نیروی خارجی (gravity)

  • باد (مشابه نیروی خارجی)

  • آشفتگی (turbulence – نیروهای آشوبناک)

هرچه مقدار drag بیشتر یا جرم کمتر باشد، نوسان سریع‌تر از بین می‌رود.


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

  • Preroll Time (timepreroll): تعداد ثانیه‌هایی از شبیه‌سازی که پس از رسیدن به زمان ریست باید نادیده گرفته شود.
    مثال: اگر مقدار 33 وارد کنید (و reset در $TSTART باشد)، فریم 1 وضعیت شبیه‌سازی در زمان 33 ثانیه را نشان می‌دهد. یعنی 32 ثانیهٔ اول رد شده اما برای محاسبهٔ وضعیت نقاط باید همچنان محاسبه شوند، بنابراین هنگام ریست کمی تأخیر مشاهده می‌شود.

  • Time Inc (timeinc): تعیین می‌کند SOP هر چند وقت یک‌بار cook شود. به‌طور پیش‌فرض 1/$FPS است (یعنی هر فریم یک‌بار). برای دقت ریاضی بیشتر در دینامیک‌های پیچیده، می‌توانید کوچکتر از 1/$FPS تنظیم کنید (مثلاً 0.5/$FPS یعنی در هر فریم دو بار cook).
    نکته: هرگز این پارامتر را بزرگ‌تر از 1/$FPS قرار ندهید.

  • Accurate Moves (accurate): حرکت گره‌ها (نقاط) را با محاسبهٔ مسیر در مقادیر کسریِ فریم، دقیق‌تر می‌کند.

  • Attractor Use (attractmode): نحوهٔ تخصیص نقاط جاذب به هر ذره/نقطه:

    • All Points (all): تمام جاذب‌ها بر همهٔ ذرات/نقاط اثر می‌گذارند.

    • Single Point per Particle (single): به هر ذره تنها یک نقطهٔ جاذب اختصاص می‌یابد و فقط از همان تأثیر می‌پذیرد (تخصیص بر اساس شمارهٔ نقطه mod تعداد جاذب‌ها است).

  • Reset (reset): وقتی روشن باشد، اثر فنری SOP را ریست می‌کند.

  • Reset Pulse (resetpulse): ریست فوریِ اثر فنری.


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

  • External Force (external): نیروی جاذبه/خارجی روی نقاط. وقتی drag صفر است، نقاط می‌توانند بدون محدودیت سرعت شتاب بگیرند.

    • X (externalx)

    • Y (externaly)

    • Z (externalz)

  • Wind (wind): نیروهای باد روی نقاط؛ مشابه نیروی خارجی. اگر فقط باد (و بدون نیروهای دیگر مثل turbulence) اعمال شود، سرعت نقاط از سرعت باد فراتر نمی‌رود.

    • X (windx)

    • Y (windy)

    • Z (windz)

  • Turbulence (turb): دامنهٔ نیروهای آشوبناک در هر محور. از مقادیر مثبت استفاده کنید.

    • X (turbx)

    • Y (turby)

    • Z (turbz)

  • Turb Period (period): دورهٔ آشفتگی. مقدار کوچک یعنی تغییرات آشفتگی سریع و در ناحیهٔ کوچک؛ مقدار بزرگ‌تر یعنی نقاط نزدیک به‌هم مشابه‌تر تحت تأثیر قرار می‌گیرند.

  • Seed (seed): بذر اعداد تصادفی برای شبیه‌سازی.


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

  • Fixed Points (fixed): یک گروه نقاط؛ همهٔ نقاط داخل این گروه از نیروها تأثیر نمی‌پذیرند (ثابت می‌مانند). برای نحوهٔ تعیین بازهٔ نقاط به Group SOP مراجعه کنید.

  • Fixed Points go to Source Positions (revertfixed): تعیین می‌کند آیا نقاط داخل گروه Fixed Points به موقعیت نقاط متناظر در هندسهٔ Source منتقل شوند یا خیر.

  • Copy Groups from Source (copygroups): مشخص می‌کند آیا Spring SOP باید در هر فریم گروه‌ها را از هندسهٔ Source کپی کند یا نه. با این کار می‌توانید در فیلد Fixed Points نام گروه متحرک را بدهید و محتویات آن به‌روز نگه داشته می‌شود.

  • Add Mass Attribute (domass): اگر فعال باشد، ویژگی Mass برای هندسهٔ در حال تغییر محاسبه می‌شود.

  • Mass (mass): جرم هر نقطه. نقاط سنگین‌تر دیرتر به حرکت درمی‌آیند و دیرتر متوقف می‌شوند.

  • Add Drag Attribute (dodrag): اگر فعال باشد، هندسه توسط ویژگی Drag تغییرشکل می‌یابد.

  • Drag (drag): درَگ هر نقطه.

  • Spring Behavior (springbehavior): نحوهٔ رفتار فنرها:

    • Hooke’s Law (hooke): فنرها طبق قانون هوک کار می‌کنند (معمولاً پایدارتر از «Normalize Displacement» است).
      قانون هوک: Force = Displacement × Spring constant

    • Normalize Displacement (normalize): مشابه قانون هوک اما جابه‌جایی نسبت به طول اولیهٔ فنر نرمال‌سازی می‌شود.

  • Spring Constant (springk): ثابت فنر؛ هرچه بیشتر باشد فنرها سفت‌تر و شیء صُلب‌تر می‌شود. اگر مقدار خیلی زیاد شود ممکن است نوسان‌ها از کنترل خارج شوند—در این حالت Time Inc را کاهش دهید.

  • Initial Tension (tension): ثابت اولیهٔ k برای هندسه قبل از اعمال عملیات فنری.


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

  • + Limit Plane (limitpos): نقاط هنگام رسیدن به صفحات حدی، از آن‌ها برمی‌خورند/می‌پرند (bounce). شش فیلدِ صفحات حدی یک جعبهٔ مرزی تشکیل می‌دهد. پیش‌فرض‌ها 1000 واحد دورترند (بسیار بزرگ). برای مشاهدهٔ اثر، مقادیر را تا حدود 1 کاهش دهید.

    • X (limitposx)

    • Y (limitposy)

    • Z (limitposz)

  • – Limit Plane (limitneg): همان توضیح بالا برای مرزهای منفی.

    • X (limitnegx)

    • Y (limitnegy)

    • Z (limitnegz)

  • Hit Behavior (hit): کنترل می‌کند وقتی هندسه به یکی از شش صفحهٔ برخورد یا شیٔ برخوردی می‌خورد چه شود:

    • Bounce on Contact (bounce): با تماس، هندسه می‌جهد.

    • Stick on Contact (stick): با تماس، هندسه می‌چسبد.

  • Gain Tangent (gaintan) و Gain Normal (gainnorm): پارامترهای اصطکاک که به‌صورت اتلاف انرژی هنگام برخورد در نظر گرفته می‌شوند.
    پارامتر اول بر اتلاف/باقی‌ماندن انرژی عمود بر سطح اثر می‌گذارد (0 یعنی تمام انرژی عمود از دست می‌رود؛ 1 یعنی هیچ اتلافی عمود رخ نمی‌دهد). پارامتر دوم بهرهٔ انرژی مماسی نسبت به سطح است.


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

  • Input 0

  • Input 1

  • Input 2

(بسته به راه‌اندازی شبکه، می‌توان از ورودی‌های اضافه برای هندسهٔ برخورد، منبع گروه‌ها و … استفاده کرد.)


Info CHOP Channels

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

Common SOP Info Channels

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

  • num_prims: تعداد primitiveها در این SOP.

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

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

  • last_meta_vbo_update_time: زمان صرف‌شده در یک ترد دیگر برای به‌روزرسانی داده‌های سطح‌های متا (مانند metaballs یا nurbs) روی GPU از داده‌های CPU.

Common Operator Info Channels

  • total_cooks: تعداد دفعات cook شدن از زمان شروع.

  • cook_time: مدت cook آخر بر حسب میلی‌ثانیه.

  • cook_frame: شمارهٔ فریمی که آخرین cook نسبت به تایم‌لاین کامپوننت در آن رخ داده است.

  • cook_abs_frame: شمارهٔ فریم cook نسبت به زمان مطلق.

  • cook_start_time: زمان شروع cook در فریم جاری (ms).

  • cook_end_time: زمان پایان cook در فریم جاری (ms).

  • cooked_this_frame: اگر در فریم جاری cook شده باشد مقدار 1 است.

  • warnings: تعداد هشدارها (در صورت وجود).

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