یک موتور فیزیک سفارشی، تنها راه برای شبیهسازی صدها هزار موجود در سمت سرور است، بدون اینکه اشیا بهطور عجیب در صفحه جابهجا شوند یا پایداری سیستم از دست برود. برای مقابله با این چالش، خالق Box2D موتور Box3D را عرضه کرده است؛ یک موتور فیزیک سهبعدی متنباز که برای پر کردن شکاف بین شبیهسازیهای با عملکرد بالا و پایداری موتورهای بازی طراحی شده است. این موتور اکنون به عنوان یک مخزن در گیتهاب در دسترس است.
توسعه بازیهای مدرن اغلب بر میانافزارها (Middleware) تکیه دارد، اما راهکارهای عمومی معمولاً در مواجهه با محدودیتهای شدید شکست میخورند. بسیاری از توسعهدهندگان از سیستم فیزیک داخلی آنریل انجین یعنی Chaos استفاده میکنند، اما متوجه میشوند که این سیستم فاقد پشتیبانی از پدیدههای فیزیکی خاص است؛ مانند گشتاورهای ژیروسکوپی که برای چرخش واقعگرایانه اشیا ضروری هستند. بدون این قابلیت، اشکال کشیده میتوانند برای مدت طولانی بچرخند در حالی که سرعت زاویهای خود را حفظ میکنند — نقص فنی که حتی در شبیهسازی چیزی as ساده به عنوان یک تفنگ در حال چرخش نیز کاملاً مشهود است.
به نقل از اطلاعیه منتشر شده در وبسایت box2d.org، این شکاف فنی باعث شد تا یک جایگزین تخصصی توسعه یابد. توسعهدهنده پیش از این، یک الگوریتم جایگزین در حدود ۱۰ خط برای افزودن گشتاورهای ژیروسکوپی به هر موتور فیزیکی ایجاد کرده بود که در کنفرانس توسعهدهندگان بازی (GDC) در سال ۲۰۱۵ ارائه شد. هرچند شرکت اپیک (Epic) در نهایت این ویژگی را در اواخر سال ۲۰۲۴ به Chaos اضافه کرد، اما دیگر شکستهای بحرانی همچنان پابرجا بودند.
تصور کنید در یک بازی بقا، میخواهید یک درخت سکویا عظیم را قطع کنید. در بسیاری از موتورها، سقوط یک کپسول بزرگ روی یک مش مثلثی صاف، باعث میشود شیء بهدلیل شکست در تشخیص برخورد مداوم (Continuous Collision Detection - CCD) بهطور ناگهانی در صفحه تلپورت شود. برای پروژه بلندپروازانه The Legend of California که توسط استودیو Kintsugiyama از سال ۲۰۲۲ در حال توسعه است، این باگها غیرقابل پذیرش بودند. به دلیل اینکه این بازی یک عنوان بقا است که نیازمند یک فاز گسترده (Broad-phase) سریع برای مدیریت صدها هزار موجود در سمت سرور است، تیم تصمیم گرفت ریسک سپردن این قابلیت هستهای به میانافزارها را نپذیرد.
معماری Box3D
این موتور در واقع یک گسترش سهبعدی از Box2D است و معماری هستهای تقریباً یکسانی با آن دارد. Box3D با زبان C17 نوشته شده و یک API سی (C API) ارائه میدهد تا بیشترین قابلیت انتقال (Portability) و عملکرد را تضمین کند. هدف توسعهدهنده این بود که تلاشهای دوبعدی و سهبعدی را تا حد ممکن مشابه نگه دارد تا کارایی و نظم سیستم حفظ شود.
ویژگیهای فنی کلیدی این موتور عبارتند از:
- بهینهسازی حلکننده (Solver Efficiency): استفاده از یک حلکننده sub-stepping و یک حلکننده برخورد SIMD عریض برای انجام محاسبات با سرعت بسیار بالا.
- پشتیبانی از برخوردها: پشتیبانی دقیق از برخورد با مش مثلثی (Triangle mesh)، برخورد میدان ارتفاع (Height-field) و برخورد ترکیبی پختهشده (Baked compound collision).
- مقیاس جهانی (World Scaling): پشتیبانی از دنیایهای بزرگ با استفاده از اعداد اعشاری دوبل (doubles) برای مختصات موقعیت، جهت جلوگیری از لرزشهای ناشی از نبود دقت در مقیاسهای بزرگ.
- همزمانی (Concurrency): قلابهای چند-رشتهای (Multi-threading hooks) و یک زمانبند داخلی اختیاری برای بهرهبرداری حداکثری از هستههای مدرن CPU.
- بهینهسازی: استفاده از رنگآمیزی گراف (Graph coloring) برای جزیرههای بزرگ جهت مدیریت بدنههای متقابل پیچیده.
- ابزار کاربردی: قابلیتهای داخلی برای ضبط (Recording) و بازپخش (Replay) شبیهسازیها.
از Rubikon-Lite تا Box3D
Box3D از صفر ساخته نشد. در حالی که توسعهدهنده گزینههای متنباز موجود مانند Jolt را بررسی میکرد، دوستش Dirk Gregorius — برنامهنویس فیزیک که موتور سفارشی Rubikon را در بازی Half-Life: Alyx به کار برده بود — به او توصیه کرد مسیر متفاوتی را دنبال کند. گرگوریوس یک نسخه سرگرمی (Hobby version) از این موتور را تحت عنوان "Rubikon-Lite" نگهداری میکرد.
با فورک کردن Rubikon-Lite و اتصال مستقیم آن به آنریل، تیم موفق شد گشتاورهای ژیروسکوپی و فیزیک پایدار سقوط درختان را پیاده کند. این یکپارچهسازی بهدلیل چندین انتخاب معماری سفارشی در Kintsugiyama ممکن شد:
- استفاده از یک سیستم اسکریپتنویسی اختصاصی بهجای Blueprints.
- پیادهسازی سیستم انیمیشن Esoterica که به آنریل پورت شده بود.
- یک سیستم موجودیت-مؤلفه (ECS) سفارشی که مستقیماً به موتور فیزیک متصل میشود.
به مرور زمان، توسعهدهنده تمام APIها، ساختارهای داده و الگوریتمهای Rubikon-Lite را با ساختارهای نسخه ۳.۰ از Box2D جایگزین کرد. این یکپارچهسازی به توسعهدهنده اجازه میدهد تا تلاشهای دوبعدی و سهبعدی را با یک مجموعه منطقی واحد مدیریت کند. امروزه تنها بخشهای کوچکی از Rubikon-Lite باقی مانده است که بهطور خاص در تولید پوسته محدب (Convex hull) و برخی الگوریتمهای برخورد به کار میروند. در همین حال، موتور Rubikon در شرکت Valve همچنان در حال تکامل به موتور جدیدی به نام Ragnarok است.
حل مشکل وکسل و استریمینگ
عملکرد در The Legend of California نیازمند حل دو گلوگاه خاص بود: زمینهای وکسلی و استریمینگ داراییها (Asset Streaming). در یک دنیای باز با اعتبار سرور (Server-authoritative)، سیستم باید بتواند همزمان سقوط درختان، Ragdollها، وکسلها، درهای سالونها و گیاهان tumbleweed را شبیهسازی کند.
چون وکسلها ساختاری شبکهای (Grid-like) دارند، موتور از یک تقسیم میانه (Median split) برای ساخت سریع مشهای برخورد در زمان اجرا استفاده میکند. این کار تضمین میکند که سقوط درختهای عظیم سکویا روی زمینهای وکسلی با دقت بالا و CCD پایدار مدیریت شود. این رویکرد بهینهسازی در شبیهسازیهای پیچیده، یادآور پیشرفتهای اخیر در مدلهای پیشبینیکننده است؛ برای نمونه مدل Oasis 3 توانسته است شبیهسازیهای بصری رانندگی را با هزینهای بسیار پایین به سطح جدیدی از کارایی برساند.
استریمینگ نیز ریسک مصرف حافظه داشت. یک قلعه در این بازی که با روش Kitbashing ساخته شده، میتواند بهراحتی شامل ۵۰,۰۰۰ مش برخورد مجزا باشد. بارگذاری تکتک اینها در موتور فیزیک ناکارآمد است. برای حل این مشکل، Box3D یک سیستم برخورد ترکیبی (Compound collision) معرفی کرد. این سیستم اشکال مجزا را در یک ساختار دادهای بهینه به نام «شکل عظیم» (Uber shape) «پخته» (Cook) میکند. این روش سربار ایجاد هزاران بدنه و شکل مجزا را حذف کرده و مصرف حافظه و زمان بارگذاری را بهشدت کاهش میدهد.
پذیرش فعلی و آینده
اگرچه Box3D هنوز نرمافزاری در مرحله آلفا محسوب میشود، اما در حال حاضر در چندین پروژه سطح بالا ادغام شده است. علاوه بر عنوان اصلی استودیو Kintsugiyama، این موتور قدرت میدهد به:
- s&box: پلتفرم بازی ساخته شده توسط Facepunch Studios.
- Esoterica: موتور بازی متنباز به رهبری Bobby Anguelov.
- بازی فضایی Glenn Fiedler: یک پروژه چندنفره که از ۱,۰۰۰ بازیکن پشتیبانی میکند.
نقشه راه به سوی انتشار نسخه ۱.۰ شامل برچسبگذاری نسخه v0.1 و تمرکز بر اصلاح حرکت شخصیتها، بهبود کاهش برخوردهای شبحوار (Ghost collision) و بهینهسازی حلکننده مفاصل (Joint solver) است. توسعهدهنده قصد دارد پروژه را از طریق یک توافقنامه مجوز مشارکتکننده (CLA) برای پذیرش Pull Requestهای جامعه باز کند و بهروزرسانیها را از طریق سرور دیسکورد Box2D ارائه دهد.
این اقدام نشاندهنده چرخشی به سمت «پایداری دانش» است. توسعهدهنده که از سال ۲۰۰۴ موتورهای فیزیک میسازد، اشاره کرد که تغییر شغل معمولاً به معنای رها کردن آن دستاوردها است. با متنباز کردن Box3D — و با حمایت Kintsugiyama که اجازه داد این کار را به عنوان بخشی از شغل روزانهاش انجام دهد — این پروژه به عنوان یک آرشیو باز از تخصص عمل میکند. این امر از «مالیات» اختراع مجدد چرخ در پروژههای حرفهای مختلف جلوگیری میکند.
برای توسعهدهندگان، این یعنی یک جایگزین سهبعدی اثباتشده و پرقدرت برای Jolt یا Chaos که بهطور خاص برای دنیایهای باز با مدیریت سرور طراحی شده است. این حرکت صنعت را از تکیه صرف بر ابزارهای جعبهسیاه (Black-box) به سمت پشتههای فیزیکی شفاف و قابل شخصیسازی میبرد.
شما میتوانید با نصب git و CMake و سپس کلون کردن مخزن Box3D از گیتهاب، کار خود را آغاز کنید. هدرهای موتور شامل توضیحات کامل Doxygen هستند و کدهای نمونه حداقلی در تست HelloWorld یافت میشوند. پس از ساخت (Build)، کاربران میتوانند نمونههای ارائه شده را برای مشاهده ویژگیها در عمل اجرا کنند.
گام بعدی شما
- اگر در حال توسعه بازیهای Open-world با تعداد بالای موجودات هستید، مخزن Box3D را در گیتهاب بررسی کنید تا محدودیتهای Chaos را دور بزنید.
- مستندات Doxygen موجود در هدرهای موتور را برای درک نحوه پیادهسازی «شکلهای عظیم» (Uber shapes) مطالعه کنید.
- نمونههای HelloWorld را اجرا کنید تا سرعت استجابة موتور در محیطهای شبیهسازی شده را بسنجید.
اما داستان سختافزاری این تحول در مدیریت حافظه برای استریمینگ حتی شگفتانگیزتر است — به تحلیل ما دربارهی بهینهسازیهای حافظه در موتورهای نسل جدید مراجعه کنید.




گفتگو