تقديم اللون الصحيح من retroconsoles في المحاكيات



تقوم جميع وحدات التحكم في الألعاب تقريبًا بإنشاء ألوان في بعض خيارات تشفير RGB.

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

أكثر أنواع شاشات العرض شيوعًا اليوم هي لوحات LCD. ومن المعروف أن لديهم مستويات سوداء سيئة للغاية. الاختلافات بين TN و PVA و IPS لا تؤثر على هذا كثيرًا.

تلعب بعض المعجبين على شاشات CRT ، وتكتسب شاشات OLED المزيد والمزيد من الشعبية ، لا سيما على الهواتف والأجهزة اللوحية. ولكن في هذه المقالة سننظر بشكل أساسي في شاشات LCD ، على الرغم من أن هذه التقنية مهمة بالنسبة لشاشات العرض من أي نوع.

دقة اللون


أول التفاصيل المهمة: تعمل معظم أجهزة الكمبيوتر في وضع ألوان 24 بت ، مما يوفر تفاصيل ألوان 8 بت للقنوات الأحمر والأخضر والأزرق. ولكن في معظم أنظمة الألعاب القديمة ، لا يتم ضبط الألوان بهذه الدقة.

على سبيل المثال ، يقوم Sega Genesis بتشفير ألوان 9 بت ، والتي تعطي 3 بتات لكل قناة.

سيكون الحل الأكثر سذاجة هو وضع 3 بتات في أعلى 3 بتات من الإخراج ، وترك البتات الخمسة السفلية فارغة ، لكن اللون الأبيض يصبح رماديًا قليلاً.

مثال:

  000 000 000 -> 000'00000 000'00000 000'00000
 111 111 111 -> 111'00000 111'00000 111'00000 



إذا ملأتهم وحدات ، يصبح اللون الأسود فاتحًا جدًا.

مثال:

  000 000 000 -> 000'11111 000'11111 000'11111
 111 111 111 -> 111'11111 111'11111 111'11111 



يكمن الحل في تكرار البتات الأصلية بحيث تملأ جميع وحدات بت الإخراج.

مثال:

  000 -> 000 000 00 ...
 010 -> 010 010 01 ...
 011 -> 011 011 01 ...
 111 -> 111 111 11 ... 

في شكل رمز:

  uint8 الأحمر = ص << 5 |  ص << 2 |  ص >> 1
 // rrr00000 |  000rrr00 |  000000rr -> rrrrrrrr 

مضاهاة الشاشة


أنظمة ألعاب الرجعية لم تكن مصممة للعمل على شاشات الكمبيوتر LCD الحديثة. عادة ، تم تصميم لوحات المفاتيح المنزلية لشاشات CRT ، وتستخدم لوحات المفاتيح المحمولة لوحات LCD الأقدم والأقل دقة.

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

شاشات الكمبيوتر


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

إنبوب أشعة القطب السالب مضاهاة: Super Nintendo


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

  ألوان // SNES بتنسيق RGB555 ، لذلك هناك 32 مستوى لكل قناة
 ثابت ثابت uint8 gammaRamp [32] = {
   0x00،0x01،0x03،0x06،0x0a 0x0f 0x15،0x1c
   0x24 ، 0x2d ، 0x37 ، 0x42 ، 0x4e ، 0x5b ، 0x69 ، 0x78 ،
   0x88، 0x90، 0x98، 0xa0، 0xa8، 0xb0، 0xb8، 0xc0،
   0xc8، 0xd0، 0xd8، 0xe0، 0xe8، 0xf0، 0xf8، عشرية 0xFF،
 }؛ 

تم استعارة هذا الجدول من التحميل الزائد لـ Super Sleuth / Kindred. تحجب النصف السفلي من لوحة الألوان ، تاركة الجزء العلوي دون تغيير.

هذا له تأثير مدهش على الصورة أثناء المحاكاة: يتم عرض الأصل على اليسار ، ويتم تطبيق الصورة مع تصحيح غاما على اليمين:





مضاهاة LCD: لعبة Boy Advance


كان لدى Game Boy Advance واحدة من أسوأ شاشات LCD بألوان باهتة بالكامل. أدرك مطورو الماكرة أنه من خلال المبالغة في الألوان بشكل كبير ، يمكن للمرء الحصول على نتائج ممتعة على المعدات الحقيقية.

بالطبع ، إذا استخدمت هذه الألوان على شاشة LCD قياسية ، فستكون النتيجة كابوسًا ملونًا. لحسن الحظ ، يمكننا تعويض ذلك عن طريق إنشاء ألوان طبيعية إلى حد ما:

  lcdGamma مزدوج = 4.0 ، outGamma = 2.2 ؛
 رطل مزدوجة = الأسرى (B / 31.0 ، lcdGamma) ؛
 lg المزدوج = الأسرى (G / 31.0 ، lcdGamma) ؛
 مزدوج lr = الأسرى (R / 31.0 ، lcdGamma) ؛
 r = pow ((0 * lb + 50 * log + 255 * lr) / 255، 1 / ​​outGamma) * (0xffff * 255/280)؛
 g = pow ((30 * lb + 230 * lg + 10 * lr) / 255، 1 / ​​outGamma) * (0xffff * 255/280)؛
 b = pow ((220 * lb + 10 * log + 50 * lr) / 255 ، 1 / ​​outGamma) * (0xffff * 255/280) ؛ 

كتبت هذه الشفرة بواسطة تالاروبي.

تباين أكثر وضوحًا مقارنةً بـ CRT - الجزء العلوي هو الأصل ، والجزء السفلي هو الإصدار مع تصحيح الألوان:





مضاهاة LCD: Game Boy Color


كانت شاشة Game Boy Color أفضل بشكل مدهش في إعادة إنتاج الألوان ، وقد يكون هناك ضبابية طفيفة فقط في الصورة النهائية.

الخوارزمية التالية تحظى بشعبية كبيرة في محاكيات Game Boy Color:

  R = (r * 26 + g * 4 + b * 2) ؛
 G = (g * 24 + b * 8) ؛
 B = (r * 6 + g * 4 + b * 22) ؛
 R = دقيقة (960 ، R) >> 2 ؛
 G = دقيقة (960 ، G) >> 2 ؛
 B = دقيقة (960 ، B) >> 2 ؛ 

لسوء الحظ ، أنا لا أعرف من كتب الخوارزمية. إذا كنت تعرف ذلك ، أخبرني حتى أتمكن من الإشارة إلى التأليف!

كما كان من قبل ، الأصلي على اليسار ، الإصدار مع تصحيح الألوان - على اليمين:



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

على الأرجح ، كانت رقابة من جانب المطورين ، لأنه في اللعبة الحقيقية
يتم تظليل ألوان Boy Color البيضاء مع دمج لونين مختلفين من اللون مع بعضهما البعض تقريبًا بلا عيوب.

في الختام


هناك العديد من الأنظمة التي لا تزال تفتقر إلى مرشحات مضاهاة الألوان الجيدة.
أنها صعبة للغاية لتكوين. من بين أهم الأمثلة ، WonderSwan و Neo Geo Pocket ، والتي في وقت كتابة هذا التقرير لم يكن لديها مرشحات جيدة لتقريب الألوان.

لا تزال لوحات المفاتيح المحمولة أكثر تعقيدًا لأنها تفتقر غالبًا إلى الإضاءة الخلفية (وفي بعض الأحيان الإضاءة الأمامية!) وهناك طرق لتغيير التباين ، لذلك لا توجد قيمة لونية حقيقية لقيمة RGB محددة.

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

محاكاة الألوان هي مجال يحتاج إلى مزيد من الاهتمام ، لذلك إذا كنت متخصصًا في تحليل الرياضيات واللون ، فستكون مساعدتك مفيدة للغاية في مشهد المحاكاة!

Source: https://habr.com/ru/post/ar467581/


All Articles