komeil majidi
komeil majidi
خواندن ۸ دقیقه·۴ سال پیش

چالش فرشته ها در اقامتگاه شیطان !

میخوایم چالش ها و راه حل های گروه توسعه دهنده ی Resident Evil 2 برای N64 یعنی استدیو آنجل رو بررسی کنیم ( نوامبر ۲۰۰۳ شرکت Take-two استدیو آنجل و خرید و الان به اسم Rockstar San Diego میشناسیمش )

حدود ۲۳ سال پیش دومین شماره از بازی Resident Evil 2 برای کنسول PlayStation 1 منتشر شد که این بازی یکی از تاثیر گذار ترین بازی های سبک Survival Horror توی زمان خودش بود.این بازی با دو دیسک برای کنسول PlayStation 1 منتشر شد .

قابلیت انتخاب دو کارکتر با روایت متفاوت . کات سین های ویدویی نسبتا طولانی و موزیک بازی همگی باعث شده بود که این نسخه با دو دیسک برای PS1 منتشر بشه اما حالا قرار بود این بازی برای کنسول Nintendo64 پورت بشه کنسولی که بعد از PS1 معرفی شده اما هنوز داشت برای بازی ها از کارتریج استفاده میکرد کارتریج هایی که نهایت ظرفیت 512 Mbit یعنی 64 MB دارن .

حالا اول بریم ببینیم تفاوت های این دو کنسول بازی چی هست . در چه مواردی باهم اختلاف دارن و نقاط قوت و ضعف هرکدوم چی بوده چون توی ادامه ی این داستان کمکمون میکنه سعی میکنم خیلی طولانی دربارش ننویسم که از حوصلتون برای خوندن خارج نشه .

مقایسه ی سریع طراحی سخت افزاری

پردازنده N64 کاملا بالاتر بود

پردازنده ی نینتندو-۶۴ 64-bit NEC VR4300 @ 93.75 MHz بود و پردازنده ی PS1 <br/>R3000 @ 33.8688 MHz

معماری هردوی این پردازنده ها برپایه ی MIPS هست و N64 از یک پردازنده ی قوی تر 64 بیتی استفاده میکرد.
یه مورد مهمی هم که توی تفاوت سخت افزار این کنسول ها هست بخش Motion Detector برای کنسول PS1 هست که روی پردازنده اصلی پیاده شده و این امکان و میده به توسعه دهنده که FMV ( Full Motion Video تعریف سادش میشه : تکنیک روایت بازی به صورت فیلم های از قبل ضبط شده) با کیفیت بالا و تمام صفحه پخش بشن اما روی کنسول N64 چنین امکان سخت افزاری وجود نداره .

البته نینتندو برای FMV ها راه حل خودشو داشت و راه حل هوشمندانه ای هم بود . در کل معماری سخت افزار N64 برای اون زمان بی نظیر بوده
نینتندو از پردازشگر گرافیک stand alone خودش استفاده میکرد ASIC کاستومی بود که توسط SGI ساخته شده بود : Reality Co-Processor با نشان مخفف RCP که خودش از دو بخش RSP و RDP تشکیل میشه
RSP یا همون Reality Signal Processor برای Geometry transformations
RDP یا همون Reality Display Processor برای Per-pixel calculations
بعد از این یه مقاله ی جدا درباره ی این ASIC جادویی SGI مینویسم چون خیلی مفصل میشه دربارش صحبت کرد به طور کلی پردازش گرافیک N64 کامل روی این ASIC بود همچین به خاطر معماری این ASIC بود که جز اولین کنسول هایی هست که وکتور و ساپورت میکنه .
همچنین بخش RSP امکان قبول میکروکد هم داشت توسعه دهنده ها میتونستن تو سطح پایین برای بهینه سازی و ایجاد افکت های بصری کار کنن .
پردازش گرافیک PS1 یه GPU 32 bit بود که توسط توشیبا طراحی شده و اون بخشی که بالاتر دربارش صحبت کردیم بخش Motion Detector روی CPU وظیفه ی decompress عکس و ویدیو برای بخش پردازش گرافیک و داره .

مموری این دو کنسول هم باز تفاوت های زیادی داره . PS1 از یک DRAM 2 MB استفاده میکرد و 1 MB VRAM و N64 از یک RDRAM 4.5 MB که 4MB برای CPU و بقیه برای RCP که بالاتر دربارش صحبت کردیم بود . درباره ی تفاوت DRAM و RDRAM هم توی مقاله ی بعدی صحبت میکنیم در زیر هم تصویر بخش های مختلف سخت افزار کنسول N64 و میذارم.

CPU , RCP Nintendo64
CPU , RCP Nintendo64
RCP ( RSP+RDP)
RCP ( RSP+RDP)


RDRAM Nintendo 64
RDRAM Nintendo 64


برد اصلی PS1 و N64
برد اصلی PS1 و N64


تقریبا از هر نظر N64 از PS1 بهتر بود و تنها مشکلش استفاده ار کارتریج به جای دیسک بود .
قبلا کارتریج ها نسبت به دیسک ها برای اجرای بازی سریع تر بودن چون که کارتریج توی حافظه ی آدرس پذیر CPU میشینه (نگاشت میشه فک میکنم معادل mapping توی فارسی نگاشت باشه) یعنی بدون نیاز به بارگیری دیتایی روی رم میشه دسترسی مستقیم به دیتای کارتریج داشت برای همین سریع تر بودن ولی خب مشکلشون حجم خیلی پایین در مقابل دیسک بود که نهایتا میتونست 64 MB فضای ذخیره سازی داشته باشه .

حالا میخوایم چالش ها و راه حل های گروه توسعه دهنده ی Resident Evil 2 برای N64 یعنی استدیو آنجل رو بررسی کنیم ( نوامبر ۲۰۰۳ شرکت Take-two استدیو آنجل و خرید و الان به اسم Rockstar San Diego میشناسیمش )
پورت کردن بازی ای که روی دو دیسک ۷۰۰ مگابایتی منتشر شده برای کنسولی که با کارتریج 64 MB بازی هارو اجرا میکنه .

چالش های استدیوی آنجل

اولین چالش این استدیو فیلم ها صداها و تصاویر بودن که بخش زیادی از فایل های بازی رو تشکیل میدن
که اصلی ترینشون هم فیلم ها بودن. درباره ی FMV صحبت کردیم بالاتر RE2 سرجمع ۱۵ دقیقه FMV داشت که نیتیو روی PS1 راحت و با کیفیت اجرا میشدن به خاطر همون فضای کافی روی دیسک ها و همچین Motion Detector سخت افزاری .
کیفیت FMV ها 320p 24bit color بودن که اگر بیایم محاسبه کنیم حجم uncompress ویدیو هارو میشه؛
320x160x3x30+1048576=4.394
4.394x60x15+1024=3.8 GB
میشه حدود ۴ گیگابایت . اینجوری محاسبه میشه :
widthxheigt pixels × 3 bytes per pixel × 30 frames per second ÷ (1024 × 1024 bytes per megabyte)
24bit حدودا ۳ بایت بر پیسکل در نظر گرفتم
برای میزان حجم فایل بر اساس زمان هم :
result1 MB/s × 60 seconds per minute × 15 minutes ÷ (1024 megabytes per gigabyte)

خب حالا N64 سخت افزاری مشابه PS1 برای decompress ویدیو ها نداره و این بخش باید نرم افزاری توسعه داده بشه و این یکی از اصلی ترین چالش های استدیو آنجل بود . توسعه دهنده ها هم فقط ۲۴ مگابایت از فضای ذخیره سازی ۶۴ مگابایتی کارتریج و برای FMV داشتن پس اومدم سراغ روش Chroma subsampling برای کم کردن حجم تصویر ها و ویدیو ها .
ساده بخوام بگم این روش بر مبناس یه اصل کار میکنه. میگه که چشم انسان تغییرات توی روشنایی و سخت تر از تغییر رنگ متوجه می شه. پس این تکنیک داده ها و اطلاعات روشنایی و حفظ می کند اما بعضی از اطلاعات رنگ ها و حذف می کنه البته به این سادگی تعریف نیست و الگوریتم پیچیده ای داره حس میکنم اگر بخوام کامل بگم خیلی طولانی میشه این نوشته باید درباره ی لوما و کروما و .. صحبت کنیم میتونید از این لینک با مثال درباره ی کارکرد این روش بخونید .
خب با این روش هم همچنان حجم ویدیو ها زیاد بود .درباره ایده های مختلفی صحبت شد مثل کم کردن bitrate که ایده آل نبود و قبول نشد .

حالا اینجا نوبت اینه که از امکانات RSP پشتیبانیش از وکتور و امکان نوشتن میکروکد روی بخش RCP کنسول استفاده کنن . پس میکروکد هایی نوشتن که امکان resolution scaling و بازنویسی میکرو کد تبدیل فضای رنگ بعد از decompress ویدیو به rgb (اینجا یه امکان خوبی هم همین RCP به توسعه دهنده ها میداد این بود که امکان رندر اطلاعات RGB مستقیم روی فریم بافر میداد بدون استفاده از مموری یا کش که کمک بزرگی میکرد ) .

ولی خب اینم کارو مشکل و کامل حل نکرد و هنوزم فضای زیادی برای FMV ها نیاز بود پس مجبور شدن framerate رو به 15 fps کاهش بدن ولی سعی کردن با استفاده از RSP امکان Triple buffering و شبیه سازی کنن برای ویدیو ها . به این صورتی که یسری فریم میانگین از فریم های قبلی ایجاد میشه که احساس حرکت رو به بیننده بده . در اصل همون فریم قبلی هست ولی به جای فریم جدید برای بیننده نمایش داده میشه . توی تصویر زیر میتونید ببیند توی پاز شدن FMV بازی روی هردو کنسول چه اتفاقی میفته و فرم های میانگین روزی N64 کاملا مشخص میشه . این فریم در اصل میاد جایگزین فریم اصلی ای که قزار بوده بین این دو فریم قرار بگیره قرار میگیره و این امکان هم با یه میکرو کد نوشته شد و تقریبا حجم فیلم هارو به نصف رسوند ( یعنی بعد از تمام بهینه سازی های قبلی این تریک آخر حجم فیلم بهینه شده رو نصف کرد ) و تونستن توی ۲۴ مگابایت فضا ازش استفاده کنن.

مقایسه ی fmv ها در دو کنسول ps1 و N64
مقایسه ی fmv ها در دو کنسول ps1 و N64
مقایسه ی fmv ها در دو کنسول ps1 و N64
مقایسه ی fmv ها در دو کنسول ps1 و N64

چالش بعدی تکسچر های بازی بود که سعی کردن همشو برای N64 بهینه کنن که توی تصویر پایین کامل مشخصه .

ترفند بعدی در رابطه با تکسچر محیط هست اگر بازی رو روی simulator اجرا کنید مبینید رزلوشن صحنه های مختلف بازی باهم فرق میکنن . دلیل این مورد تعداد زامبی های تو صحنه یا دلیل مشابه نیست
تمام بک گراند های بازی تکسچر های ساده هستن مدل سه بعدی با پالیگان نیستن پس توسعه دهنده ها اومدن تو بعضی از صحنه هایی که تعداد زامبی ها بیشتر هست و تمرکز گیمر روی بک گراند کم هست کیفیت تکسچر هارو تغییر دادن . برای همین روی بعضی از صحنه ها شما بک گراند رو تار میبینید مثل تصاویر پایین که هر کدوم تو رزلوشن خاصی هستن .

حتی صداها و گفتار کارکترها هم توی N64 بهینه کردن و کاهش کیفیت صدای و دیالوگ ها کاملا محسوس میشه دید .

https://www.aparat.com/v/0kNOC

چالش بعدی ساند ترک های بازی بود . ساند ترک های RE2 در زمان خودش واقعا خوب بودن . برای همین توسعه دهنده ها نمیخواستن تغییری توش به وجود بیاد یا حذف بشه ( اصلا حذف شدنش شدید بازی رو تحت تاثیر قرار میداد و خرابش میکرد ) و مشکل اصلی هم این بود که N64 چیپ اختصاصی برای صدا نداشت و وظیفه ی این بخش کامل روی دوش RSP بود پس توسعه دهنده ها مجبور بودن به نوشتن و توسعه ی sound engine روی RSP یا پیدا کردن یه ابزاری که این امکان و توسعه داده باشه
که خوب یه ابزار خوب برای این کار توسط factor 5 که یه گروه بازی ساز مستقل توی آلمان بودن توسعه داده شده بود اسم ابزار Musy x بود و ابزاری بود که فاصله ی بین cd audio و midi رو پر میکرد خیلی در موردش نخوندم ولی یه pdf کامل هست درباره کارکردش که میتونید اینجا بخونید . نتیجه ی نهایی عالی بود بدون نویز و با کیفیت خوب کار ساندترک ها کامل شد .

https://www.aparat.com/v/UytOC

در نهایت استدیو آنجل نتیجه ی فراتر از انتظاری توی این پورت به دست آورد که حاصل خلاقیت و البته کمک های خود نینتندو بود .
من دارم یه مقدار روی خود کنسول و کارتریج کار میکنم تا ببینم میتونم بخش هایی از این تریک هارو به صورت تخصصی تر نشون بدم و یه فیلم ازش بگیرم . اگر کامل بشه حتما توی یوتیوب آپلود میکنم



رزیدنت اویلرزیدنت اویل 2نینتندونینتندو64resident evil2
شاید از این پست‌ها خوشتان بیاید