خلاصه
Force COMPها برای اضافه کردن نیروها به شبیهسازی یک حلگر فیزیک استفاده میشوند.
Bullet از نیروهای خطی/چرخشی و نیروهای ضربهای (Impulse) پشتیبانی میکند (بخش Force را ببینید).
Flex از میدانهای نیرو (Force Field) پشتیبانی میکند (بخش Force Field را ببینید).
نیروی فعال (Active Force)
نیروهای فعال با استفاده از پارامتر Active toggle در صفحه Force فعال میشوند.
یک نیروی فعال، نیرویی در شبیهسازی ایجاد میکند که در طول زمان اعمال میشود.
این نیرو میتواند به صورت سراسری (global) از طریق Bullet Solver COMP اعمال شود.
یا به صورت محلی (local) از طریق Actor COMP اعمال گردد.
این نیرو در هر فریم اعمال میشود و نیرویی که در مدت ۱ ثانیه اعمال میگردد، معادل یک نیروی ضربهای (Impulse) با همان مقدار در یک فریم است.
واحدهای نیروی خطی و گشتاور (Torque) در نیوتن (N) تعریف شدهاند (kg*m/s²).
مثال: اگر نیرویی برابر با ۱۰N به یک جسم با جرم ۵kg بدون سرعت اولیه وارد شود، پس از ۱ ثانیه سرعت آن ۲m/s خواهد بود:10N ÷ 5kg × 1s = 2m/s
.
اگر همین شرایط با یک نیروی ضربهای باشد، سرعت همچنان ۲m/s خواهد بود، اما:
در حالت ضربهای تغییر سرعت لحظهای است و دیگر افزایش پیدا نمیکند (مگر دوباره ضربهای وارد شود).
در حالت نیروی فعال، سرعت پس از ۱ ثانیه همچنان افزایش مییابد.
مرکز جرم بهطور پیشفرض مرکز جعبهی محدودکننده (bounding box) جسم در نظر گرفته میشود.
اگر جسم محدود یا در حال برخورد نباشد، نیرو بهتنهایی باعث چرخش جسم نمیشود، مگر اینکه پارامتر Relative Position مقداری غیرصفر داشته باشد.
مثال: اگر Relative Position برابر +1 در محور X و نیرو برابر +1 در محور Y باشد، جسم همزمان حول محور Z خلاف عقربههای ساعت میچرخد و در محور Y حرکت میکند.
اگر Torque روی +1 در Z تنظیم شود، جسم تنها در محور Z خلاف عقربههای ساعت میچرخد (چرخش مثبت Z) و حرکتی خطی نخواهد داشت.
برای اعمال نیرو/گشتاور روی اجسام خاص میتوان از Feedback CHOP (در Bullet Solver COMP یا Actor COMP) و کانالهای force[xyz]
و torque[xyz]
استفاده کرد.
نیروی ضربهای (Impulse Force)
نیروهای ضربهای از طریق پارامتر Impulse Force pulse اعمال میشوند.
یک نیروی ضربهای فقط در یک فریم شبیهسازی اعمال میشود.
در دنیای واقعی، نیروهای ضربهای در مدت زمان بسیار کوتاه وارد میشوند، اما در Bullet این حالت سادهسازی شده و فوراً (در یک فریم) اعمال میشود.
نمونهها:
لگد زدن به توپ
شلیک توپ جنگی
در این حالت سرعت اجسام تحت تأثیر لحظهای تغییر میکند و پس از آن دیگر اثری ندارد (مگر دوباره اعمال شود).
نتیجه سرعت:
سرعت نهایی حاصل از نیروی ضربهای برابر است با سرعتی که نیروی فعال با همان مقدار در مدت ۱ ثانیه ایجاد میکند.
مثال: نیروی ضربهای ۱۰N روی جسمی با جرم ۵kg → سرعت:10N ÷ 5kg × 1s = 2m/s
.
میدان نیرو (Force Field)
میدان نیرو از طریق پارامتر Active در صفحه Force Field فعال میشود.
میدان نیرو کروی است.
شعاع آن با پارامتر Radius مشخص میشود.
قدرت مثبت → اجسام را به بیرون هل میدهد.
قدرت منفی → اجسام را به داخل میکشد.
منابع مرتبط
Flex, Bullet Dynamics, Bullet Solver COMP, Actor COMP, Constraint COMP, Bullet Solver CHOP, Nvidia Flex TOP, Nvidia Flex Solver COMP
پارامترها – صفحه Force
Active: فعال/غیرفعال کردن نیروی فعال در شبیهسازی
Force: نیروی خطی (نیوتن)
X, Y, Z
Relative Position: موقعیت اعمال نیرو نسبت به مرکز جسم (نه مرکز جرم). مقدار غیرصفر باعث چرخش هم میشود.
X, Y, Z
Torque: نیروی چرخشی (نیوتن)
X, Y, Z
Impulse Force: اعمال یک نیروی ضربهای (یک فریم)
پارامترها – صفحه Force Field
Active: فعال/غیرفعال کردن میدان نیرو
Strength: قدرت میدان نیرو (مثبت: بیرون – منفی: داخل)
Radius: شعاع میدان نیرو
Linear Falloff: کاهش خطی قدرت بر اساس فاصله از مرکز
پارامترها – صفحه Extensions
تعریف اکستنشنهای پایتونی برای کامپوننت
Object: نمونههای کلاسی متصل
Name: نام اختیاری
Promote: مشخص میکند متدهای اکستنشن مستقیماً در دسترس باشند یا فقط از طریق
.ext
Re-Init Extensions: بازکامپایل اکستنشنها
پارامترها – صفحه Common
تنظیمات نمایش در Node Viewer و روابط کلون
Parent Shortcut / Global OP Shortcut: شورتکات مسیرها
Internal OPs: تعریف اپراتورهای داخلی
Node View: انتخاب نوع نمایشگر (۳D یا پنل کنترل)
Enable Cloning / Clone Master: مدیریت کلونها
Load on Demand: بارگذاری فقط در صورت نیاز
Enable External .tox: بارگذاری فایل اکسترنال tox
Sub-Component to Load: بارگذاری یک زیرکامپوننت خاص از tox
Relative File Path Behavior: تنظیم رفتار مسیرهای نسبی
کانالهای Info CHOP
اطلاعات اضافی Force COMP از طریق Info CHOP قابل دسترسی است.
Common COMP Info Channels
num_children: تعداد اجزای داخلی
Common Operator Info Channels
total_cooks: تعداد دفعات cook از شروع
cook_time: مدت cook آخر (ms)
cook_frame: شماره فریم آخرین cook (نسبت به تایملاین کامپوننت)
cook_abs_frame: شماره فریم آخرین cook (نسبت به زمان مطلق)
cook_start_time / cook_end_time: زمان شروع و پایان cook
cooked_this_frame: آیا در این فریم cook شده (1 یا 0)
warnings: تعداد هشدارها
errors: تعداد خطاها