عنوان سخنرانی: Riot's Multi-Game Unreal-Based Development Ecosystem
کنفرانس: Unreal Fest Seattle 2024
سخنران:Daniel (مهندس تیم اکوسیستم Unreal, Riot Games)
تاریخ ارائه: سپتامبر ۲۰۲۴
لینک ویدیو: https://youtu.be/9xxwQVdwcTQ?si=V6SekznnI8KYQVGw
دنیل، مهندس تیم اکوسیستم Unreal در Riot Games، در این سخنرانی به بررسی معماری و عملکرد اکوسیستم توسعه بازی مشترک در Riot میپردازد. این اکوسیستم با نام Core SDK شناخته میشود و هدف آن کاهش سربار توسعه و افزایش بهرهوری در ساخت بازیهای AAA است.
مشکل اصلی که Riot با آن مواجه است، تکرار تلاشهای فنی در تیمهای مختلف بازی است. هر تیم برای راهاندازی یک بازی چندنفره، نیاز به پیادهسازی مجدد فناوریهای مشترک مانند احراز هویت، شبکههای اجتماعی، تلهمتری و تامین سرور دارد. این سربار، تیمها را از تمرکز بر روی گیمپلی و تجربه بازیکن دور میکند.
راهحل Riot، ایجاد یک اکوسیستم توسعه مشترک است که در آن فناوریهای بازی-محور به صورت آماده در اختیار تیمها قرار میگیرند. اهداف سطح بالای اکوسیستم عبارتند از: اجازه تمرکز توسعهدهندگان بر ساخت بازیهای عالی، باز بودن اکوسیستم برای پذیرش مشارکتها از همه تیمها، ایجاد مجموعهای از بهترین شیوهها و استانداردهای مشترک، و داشتن یک تیم مرکزی برای هدایت و تکامل اکوسیستم که تیم Unico نامیده میشود.

معماری Core SDK بر پایه یک ساختار دایرکتوری استاندارد برای همه بازیها و تیمها استوار است. پوشه Core SDK که کاملاً از پوشه موتور Unreal جدا است، شامل تمام افزونهها، اصلاحات موتور و فناوریهای مشترک میشود. این ساختار استاندارد، جابجایی استعدادها بین تیمها را تسهیل میکند و به وضوح فناوری Riot را از فناوری Epic جدا میسازد.
کنترل نسخه در Riot بر پایه Perforce است و همه تیمها در یک استقرار واحد از سرور Perforce زندگی میکنند. این یکپارچگی، امکان ادغامهای گزینشی و مشارکتهای بالادستی را سادهتر میکند. تیم Unico تنها تیمی است که مسئول دریافت نسخههای UE و ارتقاء Core SDK است و این ارتقاء را یک بار برای همه تیمهای بازی انجام میدهد. هر تیم بازی انبار مخصوص به خود را دارد و با استفاده از زنجیرهای از جریانهای استاندارد، نسخههای جدید Core SDK را دریافت و با بازی خود ادغام میکند.
اصلاحات موتور زمانی انجام میشوند که تیم Unico مجبور به تغییر موتور Unreal میشود. این اصلاحات با برچسبگذاری دقیق و فرآیند ثبتنام صریح انجام میشوند. نمونههایی از این اصلاحات شامل یکپارچهسازی Fast Build برای شتابدهی ساخت و بهبود قابلیتهای پروفایلسازی با Unreal Insight است. در یکپارچهسازی Fast Build، Riot از CDN شرکت و پچر مخصوص بازیکنان برای توزیع حافظههای نهان فایلهای شیء استفاده میکند.
افزونههای مشترک Core SDK، پل ارتباطی بین بازیها و سرویسهای آنلاین Riot هستند. این افزونهها تجربه ورود یکنواخت، ویژگیهای اجتماعی مانند لیست دوستان و چت، و یکپارچهسازی با پلتفرم تامین سرور بازی را فراهم میکنند. افزونه تحلیلی، امکان تعریف رویدادهای تلهمتری در C++ یا Blueprint را میدهد و چارچوب متریک، جمعآوری دادههای عملکردی را استاندارد میکند.
زیرساختهای مشترک شامل Horde و Build Graph برای اتوماسیون ساخت، Robo Merge برای مدیریت ادغامها، و Unreal Game Sync به عنوان نقطه ورود توسعهدهندگان به اکوسیستم است. Riot با اصلاح این ابزارها، قابلیتهایی مانند پیکربندی مبتنی بر JSON، مقیاسبندی خودکار، و توزیع نسخههای ویرایشگر از طریق CDN را اضافه کرده است.
فلسفه توسعه تیم Unico بر مشارکت عمیق با تیمهای بازی، همگرایی راهحلهای پراکنده به یک مسیر طلایی، و پذیرش مشارکتهای بالادستی از تیمهای بازی و سایر تیمهای فنی استوار است. با وجود موفقیتها، چالشهایی مانند نابالغی فرآیندهای تضمین کیفیت، سربار سنگین کار پشتیبانی برای تیم کوچک Unico، و پیچیدگی ادغامهای مداوم با نسخههای جدید Epic و مشارکتهای تیمهای بازی وجود دارد.
این سخنرانی برای من بسیار جذاب بود و چندین نکته جدید و ارزشمند داشت. اولین و مهمترین نکته، مفهوم اکوسیستم توسعه مشترک در مقیاس یک شرکت بزرگ بازیسازی بود. پیش از این، تصور میکردم که هر تیم بازی به صورت مستقل و با حداقل اشتراک فناوری کار میکند، اما رویکرد Riot در ایجاد Core SDK و استانداردسازی عمیق، دیدگاه جدیدی به من داد. این رویکرد نه تنها سربار تیمهای جدید را کاهش میدهد، بلکه جابجایی استعدادها را نیز تسهیل میکند.
دومین نکته جالب، ساختار دایرکتوری استاندارد و جداسازی کامل Core SDK از موتور Unreal بود. این جداسازی به Riot اجازه میدهد که کنترل دقیقتری بر فناوریهای اختصاصی خود داشته باشد و همزمان ارتقاء موتور از اپیک را با سهولت بیشتری مدیریت کند.
سومین نکته، مدیریت متمرکز نسخههای موتور و فرآیند ارتقاء بود. اینکه فقط تیم Unico مسئول دریافت نسخههای جدید UE و انجام اصلاحات موتور است و سپس این ارتقاء را یک بار برای همه تیمها منتشر میکند، بسیار کارآمد به نظر میرسد.
چهارمین نکته، فلسفه توسعه مشارکتی و پذیرش مشارکتهای بالادستی بود. Riot به جای اینکه تیم Unico را به عنوان یک تیم جداگانه و تصمیمگیرنده منفرد در نظر بگیرد، اکوسیستم را به گونهای طراحی کرده که تیمهای بازی و سایر تیمهای فنی بتوانند به راحتی در توسعه Core SDK مشارکت کنند.
این سخنرانی ارتباط عمیقی با چندین مفهوم کلیدی در معماری نرمافزار دارد.
ارتباط اول، معماری مبتنی بر پلتفرم است. رویکرد Riot در ایجاد Core SDK، یک نمونه عملی از معماری مبتنی بر پلتفرم است که در آن یک لایه مشترک از قابلیتها، زیربنای توسعه چندین محصول قرار میگیرد. این معماری، مزایای استفاده مجدد از کد و کاهش هزینههای توسعه را به همراه دارد.
ارتباط دوم، مدیریت پیکربندی و کنترل نسخه است. استفاده از Perforce با ساختار جریانهای استاندارد و مدیریت متمرکز ارتقاءها، نمونهای از بهترین شیوههای مدیریت کد در مقیاس بزرگ محسوب میشود.
ارتباط سوم، معماری افزونهها است. Core SDK با ارائه افزونههای متعدد برای قابلیتهای مختلف مانند احراز هویت، شبکههای اجتماعی و تلهمتری، از معماری مبتنی بر افزونه استفاده میکند که امکان توسعه و جایگزینی ماژولار را فراهم میکند.
ارتباط چهارم، مدیریت ریسک و نسخهسازی است. سیاست Riot در ارائه ویژگیهای جدید به صورت اختیاری و ارائه کنترل به تیمهای بازی برای انتخاب زمان ارتقاء، نمونهای از مدیریت ریسک در استقرار نرمافزار است.
با وجود موفقیتهای چشمگیر، چند سوال و نکته انتقادی برای من ایجاد شد.
سوال اول اینکه با توجه به اینکه تیم Unico تنها حدود ۲۰ نفر است، چگونه میتوانند از عهده پشتیبانی از بیش از صد افزونه و چندین بازی در مراحل مختلف توسعه برآیند؟ سخنران به چالش سربار پشتیبانی اشاره کرد و آن را «مارپیچ مرگ شغلی» نامید. آیا راهحلی مانند واگذاری مالکیت برخی افزونهها به تیمهای بازی که آنها را ایجاد کردهاند، میتواند موثر باشد؟
سوال دوم اینکه فرآیند پذیرش مشارکتهای بالادستی از تیمهای بازی چقدر کارآمد است؟ با توجه به اینکه تیمهای بازی تحت فشار برای ارائه بازیهای خود هستند، آیا آنها زمان کافی برای مستندسازی و اجتماعی کردن تغییرات خود با Unico دارند؟
سوال سوم اینکه با وجود تمام استانداردسازیها، چه عواملی باعث میشود که تیمهای بازی همچنان راهحلهای خاص خود را ایجاد کنند؟ آیا این به دلیل عدم آگاهی از قابلیتهای Core SDK است، یا به دلیل نیازهای خاصی که Core SDK پوشش نمیدهد؟
نکته انتقادی اینکه رویکرد «اقتباس و همگرایی» که در آن Unico ابتدا راهحلهای مختلف را مشاهده میکند و سپس سعی در همگرایی آنها دارد، ممکن است باعث شود که برخی تیمها برای مدت طولانی از مسیر طلایی خارج باشند. آیا بهتر نیست Unico راهحلهای طلایی را زودتر ارائه دهد و تیمها را به سمت آنها هدایت کند؟
این سخنرانی یکی از جامعترین و کاربردیترین ارائههایی بود که در زمینه توسعه بازی در مقیاس بزرگ دیدهام. Riot Games با ایجاد اکوسیستم Core SDK، نشان داده است که چگونه میتوان با استانداردسازی، اشتراکگذاری فناوری و ایجاد یک تیم مرکزی توانمند، هزینههای توسعه را کاهش داد و بهرهوری را افزایش داد.
مهمترین درسی که از این سخنرانی گرفتم، اهمیت تعادل بین استانداردسازی و انعطافپذیری است. Riot با ارائه ساختار استاندارد و افزونههای آماده، از یک سو، و اجازه مشارکت و سفارشیسازی به تیمهای بازی، از سوی دیگر، این تعادل را به خوبی برقرار کرده است.
همچنین، چالشهای پیش روی Unico مانند سربار پشتیبانی، نابالغی فرآیندهای تضمین کیفیت، و پیچیدگی ادغامها، نشان میدهد که ایجاد یک اکوسیستم مشترک یک سرمایهگذاری بلندمدت است و نیازمند تعهد مستمر و بهبود مداوم میباشد.
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است.
- Riot Games. (2024). Riot's Multi-Game Unreal-Based Development Ecosystem. Unreal Fest Seattle 2024. Retrieved from https://youtu.be/9xxwQVdwcTQ?si=V6SekznnI8KYQVGw