مضلعات بلاي ستيشن دووم

صورة

سوني بلاي ستيشن



بدأت قصة PlayStation في عام 1988 عندما بدأ Nintendo و Sony في العمل معًا على قارئ أقراص مضغوطة اختياري لوحدة تحكم SNES. بموجب شروط الاتفاقية ، تمكنت سوني من تطوير الألعاب لهذه المنصة بشكل مستقل واحتفظت بالسيطرة على تنسيق Super Disc - وهما امتيازان غير عاديين من قبل Nintendo.

تم تطوير المشروع قبل معرض CES '91 ، الذي أعلنت فيه سوني عن تعاون في Play Station. في اليوم التالي ، في نفس المعرض ، أعلنت Nintendo ، لمفاجأة شركة Sony ، أنها دخلت بدلاً من ذلك في اتفاقية شراكة مع Philips (بشروط أكثر ملاءمة). حاولت شركة Sony الموالية والإهانة علنا ​​التماس مجلس إدارة Sega ، الذي رفض الفكرة على الفور. في مقابلة مع 2013 ، أشار الرئيس التنفيذي لشركة SEGA Tom Kalinske إلى قرار المجلس.

"هذه فكرة غبية ، سوني لا تعرف كيفية تطوير المعدات. إنهم لا يعرفون كيفية كتابة البرامج. لماذا نعبث معهم؟ " - مجلس إدارة SEGA

ولم يخطئوا ، كانت سوني لديها خبرة قليلة في العمل مع الألعاب. كادت لا تظهر اهتمامًا بهم ، باستثناء مبادرة شخص واحد - كين كوتاراجي. منذ اللحظة التي رأى فيها ابنته تلعب في Nintendo Famicom ، أقنع كين شركة Sony بأنه بحاجة لدخول هذا السوق. على الرغم من توصيات نواب الرئيس لشركة Sony ، فقد طور لشركة Nintendo الشريحة الصوتية (SPC700) المستخدمة في SNES.

اعتبر معظم المديرين التنفيذيين لشركة Sony هذا رهانًا محفوفًا بالمخاطر ، لكن Kutaragi وجد دعمًا في شخص الرئيس التنفيذي لشركة Sony Norio Oga. في يونيو 1992 ، سُمح لكين ببدء إنشاء نظام ألعاب من الصفر. لتهدئة مجلس الإدارة ، تم نقل "والد PlayStation" ، كما دعوه لاحقًا ، إلى الشركة الأم المستقلة مالياً Sony Music ، وبدأ العمل على ما سيصبح في نهاية المطاف "PlayStation" (بالفعل بدون مساحة في الاسم).

في البداية ، لم يتمكن المطورون من تحديد ما إذا كان يجب أن تركز الهندسة على sprite ثنائية الأبعاد أو رسومات ثلاثية الأبعاد مضلعة. ومع ذلك ، فإن نجاح لعبة Virtua Fighter التي تم إصدارها في أكتوبر 1993 بواسطة Sega على آلات الممرات اليابانية دمر كل الشكوك: سيتبع PSX المسار ثلاثي الأبعاد.

جاء ذروة المشروع بعد ذلك بعامين ، عندما تم إنشاء Sony Computer Entertainment في 3 ديسمبر 1994 وتم إصدار وحدة التحكم في اليابان. حقق نجاحًا فوريًا وتم بيعه في اليوم الأول بتداول 100 ألف جهاز ، و 2 مليون جهاز بعد ستة أشهر ، و 102 مليون جهاز طوال حياتهم.


سوني PSX (PS1 ، بلاي ستيشن). الصورة: ويكيبيديا

هندسة معمارية



قلب الجهاز هو معالج MIPS RISC R3000A 32 بت بتردد 33.8688 ميجاهرتز [3] مع 2 ميجابايت DRAM. من الجدير بالذكر أن هذه الشريحة تحتوي أيضًا على وحدة فك ترميز الحركة (MDEC) ، والتي توفر تشغيل الفيديو بدقة 320 × 240 بتردد 30 إطارًا في الثانية. بجانب MDEC ، نرى المعالج المشترك لمحرك تحويل الهندسة (GTE) ، المستخدم لأداء العمليات الرياضية السريعة الثابتة على المتجهات والمصفوفات. النظام ككل غير قادر على العمل مع أرقام الفاصلة العائمة.

وحدة معالجة الرسومات عبارة عن "صندوق أسود" يتم التحكم فيه بواسطة المعالج المركزي باستخدام "أوامر". يحتوي على 1 ميغابايت VRAM ، غير متوفر لوحدة المعالجة المركزية. في نواح كثيرة ، يشبه عمله عمل الوضع الفوري الرائع OpenGL: فهو يرسم مضلعات مزخرفة يمكن "تظليلها" باستخدام ألوان الذروة. خط الأنابيب الرسومي ثابت ولا يمكن برمجته. لا يوجد مخزن Z (المخزن المؤقت للعمق).

وحدة معالجة الصوت وحدة معالجة الصوت (SPU) ، مثل GPU ، هي صندوق أسود. يمكنه معالجة 24 قناة ، ولديه 512 كيلوبايت من SRAM لتخزين الصوت (بتنسيق ADPCM) وقادر على خلط مسارات الصوت المضغوطة مع قنوات الصوت الخاصة به. لا يعني الاختصار SRAM "ذاكرة الوصول العشوائي الثابتة" ، ولكن "ذاكرة الوصول العشوائي".

كان القرار الأكثر جرأة لمهندسي سوني هو اختيار حامل البيانات. اختاروا ليس خراطيش ، ولكن وحدة CD-ROM مزدوجة السرعة ، مما قلل من تكلفة الألعاب وزاد بشكل كبير الحجم المتاح (حتى حوالي 650 ميجا بايت). العيوب هي معدل نقل منخفض (300 كيلو بايت / ثانية) ووقت تثبيت الرأس الكبير بشكل كبير (300 مللي ثانية).

لا يوجد أي خلل في وحدة التحكم. كان نموذج البرمجة للآلة هو أن المطورين لم يلمسوا المكواة "العارية". ومع ذلك ، هناك وحدة تحكم DMA لنقل البيانات من CD / DRAM إلى VRAM / SRAM.

نظام الفيديو


على الرغم من حقيقة أن نظام الفيديو يدعم ألوان 24 بت ، إلا أن عددًا قليلاً جدًا من الألعاب قد استخدمها (باستثناء خلفيات Heart Of Darkness [4] ). من الناحية العملية ، يمكن القول بضمير جيد أن معظم الألعاب تستخدم ألوان 16 بت مع قناع 1 بت.



مساحة ألوان PSX بعمق 15 بت لكل بكسل

من الميزات المذهلة لنظام الفيديو هي تنظيم VRAM ، والذي يعتمد تمامًا على المطور. تعتبر 1 ميغابايت VRAM مجموعة من 1024 × 512 × 16 بت يمكن استخدامها بحرية. يتم تنفيذ التخزين المؤقت المزدوج أو الثلاثي بطريقة تافهة ، لأن المنطقة ببساطة كافية للحجز والرسم والتحويل إلى نظام الإخراج. المواد موجودة أيضًا في VRAM ، بجوار مخازن الإطار. للكتابة على المخزن المؤقت للإطارات ، يتم تشغيل أوامر GPU لعرض المثلثات / الزوايا الرباعية.

يمكن أن تحتوي القوام على تنسيقات مختلفة. هناك مصدران مباشران للألوان 16 بت و 24 بت ، بالإضافة إلى المصادر القائمة على لوحة تسمى جدول البحث عن الألوان (CLUT). يتم دعم CLUTs 8 بت و 4 بت.

من حيث الدقة ، اقتصرت وحدة التحكم على معايير التلفزيون NTSC و PAL. بالنسبة إلى أسواق الولايات المتحدة واليابان ، يمكن للمطور اختيار دقة أفقية 256 أو 320 أو 384 أو 512 أو 640 بكسل. كانت الدقة الرأسية إما 240 بكسل (عند تخطي كل خط نقطي ثانٍ) أو 480 بكسل عند التبديل. يعمل كلا الوضعين الرأسيين بتردد 60 هرتز. كان الفرق الوحيد بين NTSC و PAL هو زيادة الدقة الرأسية (256/512 بدلاً من 240/480) ومعدل تحديث أقل (50 هرتز).

وضع NTSC (60 هرتز) PAL (50 هرتز) ملاحظة
=================================================== ========

0 256 × 240 256 × 256 غير متشابك
1 320 × 240 320 × 256 غير متشابك
2 512 × 240 512 × 256 غير متشابك
3 640 × 240 640 × 256 غير متشابك
4 256 × 480256 × 512 معشق
5 × 320 × 480 320 × 512 معشق
6 512 × 480 512 × 512 معشق
7 640 × 480 640 × 512 معشق
8384 × 240384 × 256 غير متشابك
9384 × 480384 × 512 معشق


انتبه للأوضاع بدقة أفقية 384 بكسل (8 و 9) ، والتي ، بناءً على معرفها ، تمت إضافتها لاحقًا.

DOOM على PSX


تم نقل DOOM إلى PSX بواسطة Williams Entertainment بدعم من id Software. استغرق الأمر فريقًا من خمسة أشخاص أقل بقليل من عام [5] [6] لنقل المحرك وتغيير الموارد وتعديل اللعبة بحيث يعمل كل شيء "فقط" على 3.5 ميغابايت من ذاكرة الوصول العشوائي.

"لقد تدهورت الرسومات: تم تقليل حجم القوام ، والعفاريت ، والوحوش والأسلحة أيضًا. [...] في بعض الأحيان نقطع إطارات الرسوم المتحركة. " - هاري تيسلي

تم إصدار النتيجة النهائية في 16 نوفمبر 1995. يعتبر أفضل منفذ لوحدة التحكم في اللعبة ، وتتجاوز بعض الجوانب إصدار الكمبيوتر الشخصي بسبب قمم الألوان والموسيقى بجودة الأقراص المضغوطة.

"حتى الآن ، هذا أفضل دوامة!" - جون روميرو

خطة دراسية



نظرًا لطبيعة التطوير ، يعتمد هيكل DOOM على نواة تستخدم ستة أنظمة فرعية للإدخال / الإخراج. في معظم الوقت ، درست الأجزاء الثلاثة التي وجدتها أكثر إثارة للاهتمام ، وهي نظام الملفات المستند إلى القرص المضغوط ، والصوت المستند إلى SPU ، والفيديو القائم على GPU ، لأنها فريدة من نوعها في بنية PSX.

لم يتم نشر كود مصدر DOOM لـ PSX مطلقًا ، ولكن تبين أنه لا توجد مشكلة على الإطلاق. المعلومات المتاحة كافية.

المصدر الأول هو PSY-Q SDK الرائع ، والذي كان الأداة "الرسمية" التي استخدمها مطورو PSX في ذلك الوقت. هناك الكثير من الوثائق حولها ، مقدمة كمجموعة من ملفات PDF. تؤكد وفرة المعلومات هذه فقط كل الخير الذي سمعته عن صداقة PSX للمطورين. المكتبة (أي libcd ، libds) التي طورها Psygnosis موثقة جيدًا أيضًا. كان من اللطيف جدًا رؤية تفسيرات واضحة ، خاصةً مقارنة بالنقص شبه الكامل في المعلومات حول وحدات التحكم الأخرى (نعم ، أنا أتحدث عن SNES).

مصدر آخر للمعلومات هو الأدوات الخارجية العديدة المتاحة اليوم. لقد سمح لي ISOBuster بفتح محتويات القرص المضغوط. ساعد PSound في فحص ملفات LCD. أصبحت القدرة المذهلة لمحاكي PSX لا $ لتتبع أوامر GPU و SPU ذهبية حقيقية.

ولكن ربما أعجبت أكثر بالحب الكبير لـ DOOM لـ PSX من مجتمع المعجبين. تم إجراء هندسة عكسية كاملة للعبة. تبرز PSXDOOM-RE بشكل خاص لأنها قاعدة تعليمات برمجية C يمكن تجميعها باستخدام PSY-Q SDK في لعبة PSX كاملة. الكود موثوق للغاية لأنه تم الحصول عليه عن طريق إعادة كتابة كل وظيفة من كود الآلة في C.

العالم المدهش للأقراص المدمجة


قبل البدء في دراسة تنفيذ نظام الملفات ، قمت برحلة قصيرة لفهم العالم الرائع للأقراص المدمجة بشكل أفضل.

لمدة 20 عامًا ، من 1980 إلى 2000 ، تم إصدار العديد من المواصفات التي تكشف عن هذا الموضوع. يُطلق عليها معًا "كتب قوس قزح". يحتوي الكتاب الأول في السلسلة ، "Red Book" ، على مواصفات القرص المضغوط الصوتي (CD). يعد "الكتاب الأصفر" مكملاً لـ "الكتاب الأحمر" ، حيث يضيف مواصفات البيانات للأقراص المضغوطة و ISO-9600. أضاف الكتاب البرتقالي مواصفات CD-DA و CD-R (قابل للتسجيل) و CR-WR (قابل لإعادة الكتابة). الكتاب الأبيض مخصص لفيديو CD (VCD). يتحدث الكتاب الأخضر عن CD-Interactive (CD-I). يقدم الكتاب الأزرق بيانات القرص المضغوط المحسن (ECD) لدعم الوسائط المتعددة. كتاب Scarlet مخصص لـ Super Audio (SACD) ، والذي يضيف صوتًا عالي الوضوح. يسرد الكتاب الأرجواني مواصفات المضغوطة المضغوطة مزدوجة الكثافة (DDCD) ، والتي زادت من سعة القرص من 650 ميجابايت إلى 1.3 جيجابايت. أخيرا،تفاصيل كتاب سماوي 9660 مواصفات نظام الملفات[7] .


تحتوي كتب Rainbow على كل ما نعرفه عن القرص المضغوط.

كحد أدنى مطلق ، نحتاج إلى أن نفهم أن أقراص PSX المضغوطة تتكون عادةً من قطاعات ، يحتوي كل منها على 2048 بايت من البيانات. يتم تجميع القطاعات في المسارات (التي قد تكون بيانات أو صوت). يتم تجميع المسارات في جلسة. يمكن ترتيب معلومات مسارات البيانات باستخدام نظام الملفات القياسي ISO-9660 ، ومع ذلك ، يمكن أن تحتوي اللعبة أيضًا على عناوين قطاع مشفرة.

داخل القرص المضغوط لعبة DOOM



إذا نظرت داخل القرص المضغوط باستخدام ISOBuster ، يمكنك أن ترى أن DOOM يتكون من جلسة واحدة تحتوي على ثمانية مسارات [8] . سبعة منها عبارة عن مسارات صوتية بجودة القرص المضغوط يتم تشغيلها بين المهام وفي المشهد الأخير. المسار النهائي (# 7) يستخدم حتى أصوات الشياطين الرقمية. المسار رقم 6 جدير بالملاحظة بشكل خاص لأنه يبدو أنه تم نقله مباشرة من حفلة الهذيان. اتضح أن هذه هي الموسيقى التي يتم تشغيلها على البطاقة فائقة السرية 59 “Club DOOM” (بطاقة سرية لا يمكن الوصول إليها إلا من خلال بطاقة سرية) [9] . دعني اسمح لك بتقدير جنونها. قبل البدء ، تحقق من مستوى الصوت.


المسار المتبقي (رقم 1) هو ISO-9660 ، والذي يحتوي على محرك اللعبة ومعظم الموارد. بعد استكشاف العديد من منافذ DOOM ، توقعت بسذاجة محركًا يسمى DOOM.EXE ، ملف موارد PSXDOOM.WAD ، وربما بيانًا. كنت مخطئا جدا. تم العثور على 287 ملفًا [10] [11] على المسار ، بما في ذلك 60 .WAD و 120 .IMG وعدد لا يحصى من ملفات .LCD.

البيانات مرتبة حسب المستوى (خمسة ملفات لكل بطاقة).

وصف اسم الملف
=================================================== =====

MAPDIR0 / MAP01.WAD هندسة قياسية (BSP / رفض / ...)
MAPDIR0 / MAPTEX01.IMG قوام الطائرات / الجدران
MAPDIR0 / MAPSPR01.IMG جميع النقوش المتحركة التي تم إنشاؤها بواسطة الأشياء
MUSIC / MUSLEV1.LCD موسيقى قابلة للتشغيل
SNDMAPS1 / MAP01.LCD جميع الأصوات التي يصدرها THINGS

عندما سُئل لماذا تم ترتيب كل شيء بطريقة جديدة ، أجاب مطور Crash Bandicoot Andy Gavin جزئيًا في مقابلة مع Ars Technica. [ ترجمة حبري]

"يستغرق تحريك الرأس إلى أي نقطة على القرص المضغوط حوالي 1/3 من الثانية."

نظرًا لحقيقة أن سرعة وضع الرأس كانت قريبة من 300 مللي ثانية (وهو ما تؤكده وثائق PSY-Q [12] ) ، لم يتمكن المطورون في Williams Entertainment من حفظ البنية الواضحة لمحرك DOOM ، الذي قام بتخزين جميع الموارد في ملف واحد (على سبيل المثال ، DOOM.WAD) وتحميلها عند الطلب. على PSX ، سيؤدي ذلك إلى معدل إطار رهيب.

قام المطورون بحل المشكلة عن طريق إلقاء عدد لا نهائي من البايت على القرص المضغوط. تم تخزين جميع الموارد اللازمة للمستوى في خمسة ملفات تحتوي على هندسة الخريطة والملمس. العفاريت والمؤثرات الصوتية والموسيقى. هذا أمر مكلف للغاية ، ولكنه يلغي الحاجة إلى الوصول إلى القرص المضغوط أثناء عملية اللعبة.

حقيقة مثيرة للاهتمام:في قائمة الملفات على مسار البيانات يوجد ملف يسمى PSXDOOM.WAD (4 806 088 بايت) ، ولكنه يستخدم فقط لتحميل لوحات الصور والعديد من صور القائمة. ربما تستخدم بنشاط أكبر في عملية التطوير.

خذ الخريطة الأولى كمثال: تم تخفيض إجمالي كمية البيانات التي تم تنزيلها من 4 ميجا بايت إلى 900 كيلو بايت.

حجم اسم الملف (بالبايت)  
=====================================  	
MAPDIR0 / MAP01.WAD 28 196
MAPDIR0 / MAPTEX01.IMG 90744
MAPDIR0 / MAPSPR01.IMG 590344
MUSIC / MUSLEV1.LCD 61232
SNDMAPS1 / MAP01.LCD 143 632
=====================================
المجموع: 914،148

مع العلم أن الموارد تحتل 914 كيلو بايت ، قد تعتقد أنه كان هناك الكثير من DRAM غير المستخدمة المتبقية. ولكن عليك أن تتذكر أنه كان عليها أيضًا احتواء ملف قابل للتنفيذ بحجم 428 كيلوبايت ، بالإضافة إلى رصة تتغير في وقت التشغيل. في الواقع ، كان حوالي 1 ميغابايت فقط من DRAM متاحًا في وقت التشغيل.

حقيقة مثيرة للاهتمام: أثناء فحص شفرة المصدر لـ PSXDOOM-RE ، وجدت وظيفة P_LoadBlocks ، التي تحاول القراءة من القرص المضغوط حتى أربع مرات [13] ، وبعد ذلك تستسلم. هذه واحدة من متع العمل مع وسائل الإعلام المخدوشة بسهولة.

لم أكن أتوقع أن يؤثر وقت تثبيت رأس القرص المضغوط بشكل كبير على بنية اللعبة. تم إنشاء بعض الألعاب ، مثل Crash Bandicoot ، من الصفر باستخدام نظام الصفحة لدفق البيانات من قرص مضغوط في وقت التشغيل. في حالة DOOM ، لم يكن المحرك قادرًا على ذلك. لا يتم استخدام القرص المضغوط أثناء اللعبة ، باستثناء أغنية واحدة معينة (نعم ، من مستوى Club DOOM).

لم يكن رفاق برنامج id من المعجبين بالمقايضة بين السعة والسرعة التي تقدمها الأقراص المضغوطة.

« - . , CD. - , Crash 'n Burn — ? . , CD , 3DO . - CD- DOOM, „ DOOM“. , . .

, CD. ». — (ATARI EXPLORER ONLINE, 22 1994 )

حقيقة مثيرة للاهتمام: تم تشغيل الأحداث داخل لعبة DOOM باستخدام "علامات التمدد". عند عبور خط مع خاصية خاصة ، تم استدعاء وظيفة خاصة. في الإصدار "القديم" من المحرك ، لم يكن هناك خاصية تسمح لك بتشغيل الأغاني. للعب Club DOOM ، تم إنشاء إجراء خاص linedef (رقم 142) [14] . إنه لأمر مدهش كم من الجهد الإضافي الذي استغرقه لإنشاء هذا المستوى. ربما كان المطورون يحبون حقًا الاستمتاع بالمرح.

قضية القوس المفقود



من خلال إجراء بحث في كتابي Game Engine Black Book ، لم أتمكن من معرفة هذه العبارة بالكامل من قبل المصمم Harry Teesley:

"كان لدى Archvile ضعف عدد إطارات الرسوم المتحركة مقارنة بأي وحش آخر ، ولم نتمكن من وضعه في PSX. لا يمكن أن يضيع هجومه ولا تأثير القيامة. لقد كان كبيرا جدا ". - هاري تيسلي (مصمم) في مقابلة مع doomworld.com

كان من الواضح أن المشكلة لم تكن سعة القرص المضغوط 650 ميغا بايت ، لكنني لم أفهم ما هو العامل المقيد - DRAM أو VRAM.

بعد أن فهمت قيود القرص المضغوط ، أدركت أن المشكلة ليست في تخزين العفريت على قرص مضغوط ، أو حتى نقله من DRAM إلى VRAM. تكمن المشكلة في احتواء كل شيء في DRAM.

حقيقة مثيرة للاهتمام: تمت إزالة ArchVile بالكامل من التعليمات البرمجية المصدر لـ PSXDOOM-RE. حتى تعليقه #DEFINE تم التعليق عليه [15] .

#define CC_ZOMBIE  "Zombieman"
#define CC_SHOTGUN  "Shotgun Guy"
#define CC_HEAVY  "Heavy Weapon Dude"
...
#define CC_HELL   "Hell Knight"
//#define CC_ARCH "Arch-Vile"
#define CC_SPIDER "The Spider Mastermind"
#define CC_CYBER  "The Cyberdemon"
#define CC_HERO   "Our Hero"

برمجة SPU


لا تفهم شريحة SPU سوى تنسيق واحد ، وهو ADPCM. وهي قادرة على مزج ما يصل إلى 24 قناة (بما في ذلك مسار صوت القرص المضغوط) ولها وظائف معالجة صوتية قوية.

لترويض هذا الوحش ، يستخدم DOOM PSX مكتبة libWESS (نظام الصوت ويليامز للترفيه) ، التي كتبها مهندس الصوت سكوت باترسون. المكتبة قوية جدًا ، فهي قادرة على إعادة إنشاء نظام MiDI ، حيث يتم التحكم في مجموعة ثقيلة من الملاحظات (تسمى خط الصوت) من خلال تسجيل موسيقي يشغل مساحة صغيرة. ويمكنه أيضًا التلاعب بسمات الصوت في الوقت الفعلي مثل حجم الصوت ونغمة الصوت وسرعة الملاحظة ووظائف ADSR (Attack و Decay و Sustain و Release). يتم إنشاء جميع الموسيقى التي يتم تشغيلها أثناء اللعب باستخدام libWESS. مع استثناء واحد ، خمنت ذلك ، هذا هو كلوب دووم ، الذي يتم لعبه من مسار القرص المضغوط رقم 6.

يستخدم WESS تنسيقين للملفات الخاصة. هذه هي ملفات .WMD التي تحتوي على درجات الموسيقى والمؤثرات الصوتية ، وملفات .LCD ، وهي تنسيق PSX VAG (بدون عنوان) وتحتوي على عينات ADPCM. عند بدء تشغيل DOOM ، تقوم مكتبة libWESS بتحميل جميع المؤثرات الصوتية (SFX ، 89 قطعة) والنتائج الموسيقية (19 قطعة) المخزنة في ملف صغير (55 كيلوبايت) يسمى DOOMSND.WMD. وتحمل أيضًا عينات SRAM "المستخدمة دائمًا" التي تنشرها الشخصية والأبواب وما إلى ذلك.

MUSIC / DOOMSFX.LCD -> سرام
MUSIC / DOOMSND.WMD -> DRAM

بعد تحميل الخريطة ، يفتح libWESS MUSIC / MUSLEV٪ .LCD ، الذي يحتوي على عينات ADPCM المستخدمة في موسيقى هذه البطاقة ، و SNDMAPS٪ / MAP ٪٪. LCD ، الذي يحتوي على عينات ADPCM اللازمة للأعداء على هذا المستوى. يتم تحميل جميع عينات ADPCM مباشرة في SRAM ولا تشغل مساحة في DRAM.

DOOM على PSX: GPU


في مجال إنشاء الفيديو ، كانت ويليامز إنترتينمنت بحاجة إلى حل مشكلتين: كمية صغيرة من VRAM (سنعود إلى هذا لاحقًا) وعدم وجود رسم خرائط نسيج مناسب مع مراعاة المنظور.

"لقد عملنا أنا وآرون سيلر على إصدارات لـ Nintendo 64 (كانت هذه اللعبة مختلفة تمامًا) وللبلاي ستيشن. كانت هذه هي الإصدارات الأولى التي لم تتم كتابتها على المعدن ، لأن كل من Sony و Nintendo أجبروا المطورين (على الأقل من طرف ثالث) على كتابة واجهات برمجة التطبيقات ولم يقدموا لهم وثائق حول تسجيلات الأجهزة. في البداية ، كانت ثقافة SGI محدودة بشكل خاص للمطورين ، لكن Nintendo خفف قبضتها تدريجيًا.

قصة مضحكة حول تطوير نسخة للبلاي ستيشن: بدأنا أنا وآرون ببنية محرك مختلفة ، والتي جعلت مثلثات العالم ، لأن وحدة التحكم زودتهم بتسريع كامل للأجهزة. في حالة N64 ، عمل هذا بشكل مثالي ، لأنه كان لديه عرض صحيح للمنظور بدقة البكسل الفرعي (نتيجة لتأثير SGI) ، ولكن على خريطة البلاي ستيشن ، تم تنفيذ تخطيط نسيج أفقي بإحداثيات صحيحة ، لذلك تبدو مثلثات الحائط الكبيرة والأرضية رائعة. " - جون كارماك (Game Engine Black Book: DOOM)

لفهم كيف تبدو "رهيبة" ، أدناه عرضت ثلاثة جدران مصنوعة من زخرفة متداخلة وصحيحة مستقبليًا.


زخرفة المنظور


Affine (PSX)

لاحظ أنه لا توجد مشكلة في الجدار المستقيم ، ومع زيادة زاوية المنظور ، يصبح التشويه أكثر وضوحًا.

واجهت مشكلة التصور نفسها مطوري Rage Software عند نقل DOOM إلى SEGA Saturn.

« , id Software. , WAD Saturn, , 3D-. , , 3D- . , PC. , , : SH2 , PC, 68000 .

, » — ( DOOM Saturn) RetroGamer №134.

ربما ، بما أن مطوري PSX كان لديهم المزيد من الوقت ، فقد تمكنوا من حل مشكلة تعيين النسيج الصحيح مستقبليًا عن طريق تحويل عارض المضلع GPU إلى عارض الخطوط.

"قلت: النسخ الاحتياطي لكل شيء (ثم لم يكن هناك أنظمة تحكم في الإصدار حتى الآن!) ، سنجعل اللعبة مختلفة تمامًا." استخدمنا المعدات التي قدمت المثلثات التي تمثل أعمدة أو صفوف بعرض بكسل واحد ، تمامًا كما هو الحال في رمز المجمع على جهاز كمبيوتر ، وعملت بشكل رائع. اتضح أن الحل الأكثر شيوعًا على Playstation هو التغطية بالفسيفساء الهندسية على محورين ، لكنني أحب حقًا أن Doom بدت أقل "ارتعاشًا" من معظم الألعاب في Playstation في ذلك الوقت. "- John Carmack (Game Engine Black Book: DOOM)

بفضل مشروع PSXDOOM-RE [16] ، يمكننا معرفة كيف تم تنفيذه. تمت إعادة كتابة خط الأنابيب بالكامل وتقسيمه إلى مرحلتين. سيتم مناقشة هذا بمزيد من التفصيل أدناه ، ولكن يمكننا أن نرى في الواقع أن وظيفة R_Render_Wall تقوم بإرسال أوامر رسم محددة بدقة بعرض 1 بكسل.

void R_Render_Wall(...) {
  .
  int x1 = ... ; // Left end of wall.
  int x2 = ... ; // Right end of wall.
  .
  while(x1 < x2) {
    .
    setRGB0(wallpoly);

    setXY3(wallpoly,
      x1    , ypos1 - 1,
      x1 + 1, ypos2 + 1,
      x1    , ypos2 + 1);		

    setUV3(wallpoly,
         upos, v0,
         upos, v1,
         upos, v1);  
    .
    x1 += 1;
  }
}

يتم تقديم الجدران في أعمدة بعرض بكسل واحد. تحقق من واجهة برمجة التطبيقات ، التي تشبه الوضع الفوري في OpenGL.

حقيقة مثيرة للاهتمام: احتفظ مصمم الأجهزة من Sony بذاكرة التخزين المؤقت i لمعالج MIPS ، ولكنه عطل ذاكرة التخزين المؤقت d لتحويلها إلى مسودة 1K عالية السرعة. استخدمت إجراءات التقديم على الحائط / الطائرة هذه المسودة على نطاق واسع.

إدارة VRAM GPU


لمعرفة كيفية إجراء التحكم في VRAM ، اخترت طريقة غريبة: لقد استخدمت وظيفة عرض محاكي VRAM في الوقت الفعلي لا $ PSX. تعرض هذه الوظيفة مجموعة كاملة من وحدات البكسل 1024 × 512 × 16 بت (وإن كانت في شكل مشوه). تُظهر وظيفة العرض أيضًا القائمة الكاملة لتعليمات GPU المرسلة بواسطة المعالج المركزي في كل إطار.


لا $ PSX - أرسل لنا الله محاكيًا يسمح لك بالنظر داخل GPU.

تسمح لك دراسة متأنية لإطار VRAM الأول بتعلم الكثير.


عرض الإطار الأول للعبة بلا $ PSX.

الأكثر وضوحًا هي منطقتين من 256 × 240 × 16 بت في الزاوية العلوية اليسرى ، وهما مخازن الإطار (وبالتالي ، تستخدم اللعبة التخزين المؤقت المزدوج). من الجدير بالذكر أن 256 × 240 هي أقل دقة ممكنة على PSX.

تحت المخازن المؤقتة للإطار مجموعة ملونة من البكسلات - لوحة CLUT. لاحظ ظلال اللون الأحمر ، فهي تعني أنه عندما تتحول الشاشة إلى اللون الأحمر عند تعرض اللاعب للضرر ، يتم استخدام اللوحات المحسوبة مسبقًا.

في الزاوية اليمنى العليا نرى أنسجة مضغوطة بشكل غريب أفقيا ولها ألوان "خاطئة". حدث ذلك لأن الأنسجة تستخدم مؤشرات 8 بت من CLUT الموضحة أعلاه.

لنتحدث عن حريق في DOOM على PS1 مرة أخرى


في عام 2018 ، درست كيف تم تحقيق تأثير الحريق [17] [ الترجمة على حبري]. كان من الرائع أن أعود إليه مرة أخرى عند البحث عن أوامر GPU. لاحظ أنه لا يوجد $ PSX يمثل المنطقة المستهدفة لكل أمر باللون الأحمر.

المرحلة 1: يتم تحديث الشعلة في ذاكرة الوصول العشوائي وتحميلها في VRAM (أمر CpuToVram).


المرحلة 2: يتم رسم نسيج اللهب أربع مرات على طول الشاشة (أمر QuadTex). يبلغ عرض نسيج اللهب 32 texels ، ولكن يتم استخدام GPU لرسمه بعرض 64 بكسل. لا يمكن إجراء تصفية ثنائية الخط هنا ، حيث يتم أخذ عينات من أقرب أنواع النصوص.


المرحلة 3: يتم رسم لوحة DOOM النهائية (أمر QuadTex) فوق كل شيء.


إطار كامل ، فريق بفريق


أظهرت دراسة للأوامر المرسلة في الإطار أن المحرك مختلف تمامًا عن إصدار الكمبيوتر الشخصي. في ذلك ، تم تحريك العالم من مسافة قصيرة إلى المسافة. أولاً ، يتم رسم جميع الجدران. في الممر الثاني ، يتم ملء فجوة رأسية بينهما (الرؤية) (بما في ذلك السماء). في المقطع الثالث (الأخير) ، يتم تقديم العفاريت ، بدءًا من الأبعد. كل هذا تم بدون إعادة رسم بكسل.

على PSX ، يكون العرض أكثر وقاحة. يتم تقديم كل شيء في تمريرة واحدة ، تبدأ من بعيد. نظام Visplane الذي يستخدمه الكمبيوتر لملء الفراغ بين الجدران ليس هنا. بفضل مفهوم جديد يسمى "أوراق الشجر" ، يتم تقديم الطائرة والجدران بترتيب القطاعات الفرعية. أصبحت مثل هذه العمليات في "3D الحقيقي" ممكنة بسبب الاستخدام النشط لوظائف الإسقاط مصفوفة GPE. يتم أيضًا تقديم العفاريت في وقت واحد مع الجدران / الطائرات دون تداخل وفحص الاقتطاع ، مما يؤدي إلى كمية صغيرة من إعادة الرسم.

void R_RenderPlayerView(void) {
  R_BSP();         // Phase 1
  R_RenderSKY();   // Phase 2
  for (all subsectors from phase 1) {
    R_RenderAll(subsector)
  }
  R_Render_Hud_Weapons();
}

دعونا نلقي نظرة على كل خطوة بالتفصيل ، بدءًا من السماء ، التي يتم تقديمها أولاً باستخدام CopyRectRaw. لا يظهر PSX $ VRAM في نهاية الإطار ، ولكنه يسمح لك بالعودة إلى سجل الأوامر. وحدات بكسل السماء مرئية فقط لأنه لا يوجد $ PSX يواجه مشاكل في إدراك هذا الاختراق مع أعمدة بعرض بكسل واحد (لا يمكن لمحاكيات أخرى ، مثل ePSXe ، التعامل بشكل أفضل [18] ) ، ولكن سيتم إعادة كتابة جميع وحدات البكسل هذه. لاحظ أنه تحت قوام السماء ، يتم جمع جميع علامات مفاتيح الأبواب في الأطلس.


ثم يتم اجتياز BSP بالترتيب من بعيد إلى قريب. لكل قطاع فرعي ، يتم تقديم جميع الجدران / الطائرات / العفاريت. إذا كنت معتادًا على DOOM BSP ، فربما تذكر أن مترجم doombsp احتفظ فقط بأجزاء صلبة من القطاعات الفرعية. لضمان تقديم الطائرات ، تمت إضافة مفهوم جديد "للأوراق" إلى إصدار PSX ، حيث تم تخزين مقاطع فصل BPS (غير مرئية). يتم عرض هذه الأجزاء في مساحة الشاشة لتوليد حدود المستوى. هذا نهج "نظيف" أكثر بكثير ، لأنه يسمح لك بالتخلص من الاختراق مع مساحة الشاشة والبق ، على سبيل المثال ، من "درب البزاق" المعروف.


في لقطة VRAM التالية ، يتم عرض الطائرات من نفس القطاع الفرعي للجدار الذي رأيناه أعلاه على شكل مثلثات بارتفاع 1 بكسل. انتبه أيضًا إلى نسيج الجدران / الطائرات ، فكلها لها نفس الحجم. تعمل هذه الميزة على تبسيط اختيار مواد VRAM وتجنب التجزئة.


نحن ما زلنا في نفس القطاع الفرعي. الآن يتم تقديم النقوش المتحركة على شكل رباعي الزوايا (رباعي). تشمل هذه العفاريت الأعداء والقذائف والجدران الشفافة جزئيًا.


للمتعة ، سنعرض قذائف البلازما.


نحن نقترب من نهاية أوامر التقديم. هنا ، من خلال مزج المستطيل ، يتم تقديم السلاح.


الخطوة الأخيرة: تقديم الواجهة (HUD).


تجاوز VRAM!



كان العمل مع GPU تمرينًا على تخصيص مساحة في VRAM. في حالة المخازن المؤقتة للإطارات ، و CLUT ، والمحتوى الثابت (الواجهة) ، وحتى الجدران / المستويات ، تكون المهمة أولية ، لأنها كلها بنفس الحجم. ولكن مع العفاريت ، تصبح الأمور أكثر تعقيدًا.

نظرًا لحقيقة أن العفاريت لها أحجام مختلفة ، فإنها تؤدي إلى التجزئة. علاوة على ذلك ، يمكن أن تغطي القوام مساحات كبيرة من الشاشة وتكررها ، وغالبًا ما تكون النقوش المتحركة فريدة من نوعها وقد يلزم عدد كبير منها بشكل غير متوقع في كل إطار. في أسوأ الحالات ، يتطلب الإطار عددًا معينًا من النقوش المتحركة التي لا يمكن وضعها في VRAM. يُسمى هذا تجاوز سعة ذاكرة التخزين المؤقت للنسيج ، ولا يمكن حل هذه المشكلة. عند حدوث ذلك ، تتعطل اللعبة وتعرض رسالة خطأ مشفرة [19]لتذكير البعض منا "المشؤومة لا أكثر".


كلما رأيت المزيد من النقوش المتحركة في نفس الوقت ، زاد استخدام VRAM.

الفرق بين PAL و NTSC


في ختام فصل الفيديو ، قررت أن أرى كيف يتم تحويل NTSC إلى PAL. لسوء الحظ ، كما هو الحال في العديد من الألعاب الأخرى ، لم يأخذ DOOM PSX في الاعتبار الزيادة في الدقة الرأسية. عند تشغيل لعبة DOOM على PS1 في أوروبا ، رأيت صورة مضغوطة رأسيًا بحدود سوداء ملحوظة.

بعد أن علمت بمبادئ VRAM ، يصعب عليّ إلقاء اللوم على المطورين. إذا نظرت عن كثب إلى مخطط VRAM في NTSC ، فستلاحظ أن زيادة الدقة الرأسية لمخزن الإطار المؤقت تنتهك بنية تخصيص البيانات بالكامل. سيكون من المستحيل تخزين القوام تحته. أو يجب عليك نقل CLUT إلى موقع آخر. الكثير من التكلفة مع فائدة قليلة نسبيًا ، وعلى الرغم من حقيقة أن الحدود السوداء تدخلت في اللعبة ، أوافق على أنها لا تستحق ذلك.

شكر وتقدير


بفضل Eric Vazquez (مؤلف PSXDOOM-RE) ، و Samuel Villarreal (أحد مطوري PSXDOOM-RE) و Dan Leslie (المطور المحترف للألعاب في PlayStation 1) لتقاسم معرفتهم بسخاء معي.


All Articles