পুরানো গেমগুলিতে বিবর্ণ। অ্যালগরিদম কীভাবে উত্পন্ন হয়েছিল তা নির্ধারণে কিছু সহায়তা দরকার


12

দুঃখিত, এই প্রশ্নটি কিছুটা রহস্যজনক, তবে আমি কেবল এটি আমার মাথা থেকে বের করতে পারি না!

আমি তোরণ গেম ডডনপাচি (পাশাপাশি আরও অনেক পুরানো গেমস) এ ব্যবহৃত বিবর্ণ অ্যালগরিদমটি দেখছি:

এখানে চিত্র বর্ণনা লিখুন

আমি কয়েক পিক্সেল বাছাই করতে এবং বিবর্ণ সময়কালের জন্য সেগুলি ট্র্যাক করতে পাইথন স্ক্রিপ্ট লিখেছিলাম। এখানে ফলাফলগুলির একটি প্রতিনিধি নমুনা। প্রতিটি গ্রুপের প্রথম সারিটি হ'ল রঙিন মান, যখন প্রতিটি পরবর্তী সারিটি বর্তমান ফ্রেমের রঙ মান এবং পূর্ববর্তী ফ্রেমের রঙ মানের মধ্যে পার্থক্য।

Starting Value: (132, 66, 189)
Frame 1:    [9, 9, 8]
Frame 2:    [8, 8, 8]
Frame 3:    [8, 8, 8]
Frame 4:    [8, 8, 9]
Frame 5:    [9, 9, 8]
Frame 6:    [8, 8, 8]
Frame 7:    [8, 8, 8]
Frame 8:    [8, 8, 9]
Frame 9:    [9, 0, 8]
Frame 10:   [8, 0, 8]
Frame 11:   [8, 0, 8]
Frame 12:   [8, 0, 9]
Frame 13:   [9, 0, 8]
Frame 14:   [8, 0, 8]
Frame 15:   [8, 0, 8]
Frame 16:   [8, 0, 9]
Frame 17:   [0, 0, 8]
Frame 18:   [0, 0, 8]
Frame 19:   [0, 0, 8]
Frame 20:   [0, 0, 9]
Frame 21:   [0, 0, 8]
Frame 22:   [0, 0, 8]
Frame 23:   [0, 0, 8]
Frame 24:   [0, 0, 0]
Frame 25:   [0, 0, 0]
Frame 26:   [0, 0, 0]
Frame 27:   [0, 0, 0]
Frame 28:   [0, 0, 0]
Frame 29:   [0, 0, 0]

Starting Value: (132, 0, 0)
Frame 1:    [9, 0, 0]
Frame 2:    [8, 0, 0]
Frame 3:    [8, 0, 0]
Frame 4:    [8, 0, 0]
Frame 5:    [9, 0, 0]
Frame 6:    [8, 0, 0]
Frame 7:    [8, 0, 0]
Frame 8:    [8, 0, 0]
Frame 9:    [9, 0, 0]
Frame 10:   [8, 0, 0]
Frame 11:   [8, 0, 0]
Frame 12:   [8, 0, 0]
Frame 13:   [9, 0, 0]
Frame 14:   [8, 0, 0]
Frame 15:   [8, 0, 0]
Frame 16:   [8, 0, 0]
Frame 17:   [0, 0, 0]
Frame 18:   [0, 0, 0]
Frame 19:   [0, 0, 0]
Frame 20:   [0, 0, 0]
Frame 21:   [0, 0, 0]
Frame 22:   [0, 0, 0]
Frame 23:   [0, 0, 0]
Frame 24:   [0, 0, 0]
Frame 25:   [0, 0, 0]
Frame 26:   [0, 0, 0]
Frame 27:   [0, 0, 0]
Frame 28:   [0, 0, 0]
Frame 29:   [0, 0, 0]

Starting Value: (165, 156, 222)
Frame 1:    [9, 8, 8]
Frame 2:    [8, 8, 8]
Frame 3:    [8, 8, 8]
Frame 4:    [8, 9, 9]
Frame 5:    [9, 8, 8]
Frame 6:    [8, 8, 8]
Frame 7:    [8, 8, 8]
Frame 8:    [8, 9, 9]
Frame 9:    [9, 8, 8]
Frame 10:   [8, 8, 8]
Frame 11:   [8, 8, 8]
Frame 12:   [8, 9, 9]
Frame 13:   [9, 8, 8]
Frame 14:   [8, 8, 8]
Frame 15:   [8, 8, 8]
Frame 16:   [8, 9, 9]
Frame 17:   [9, 8, 8]
Frame 18:   [8, 8, 8]
Frame 19:   [8, 8, 8]
Frame 20:   [8, 0, 9]
Frame 21:   [0, 0, 8]
Frame 22:   [0, 0, 8]
Frame 23:   [0, 0, 8]
Frame 24:   [0, 0, 9]
Frame 25:   [0, 0, 8]
Frame 26:   [0, 0, 8]
Frame 27:   [0, 0, 8]
Frame 28:   [0, 0, 0]
Frame 29:   [0, 0, 0]

Starting Value: (156, 90, 206)
Frame 1:    [8, 8, 8]
Frame 2:    [8, 8, 9]
Frame 3:    [8, 8, 8]
Frame 4:    [9, 9, 8]
Frame 5:    [8, 8, 8]
Frame 6:    [8, 8, 9]
Frame 7:    [8, 8, 8]
Frame 8:    [9, 9, 8]
Frame 9:    [8, 8, 8]
Frame 10:   [8, 8, 9]
Frame 11:   [8, 8, 8]
Frame 12:   [9, 0, 8]
Frame 13:   [8, 0, 8]
Frame 14:   [8, 0, 9]
Frame 15:   [8, 0, 8]
Frame 16:   [9, 0, 8]
Frame 17:   [8, 0, 8]
Frame 18:   [8, 0, 9]
Frame 19:   [8, 0, 8]
Frame 20:   [0, 0, 8]
Frame 21:   [0, 0, 8]
Frame 22:   [0, 0, 9]
Frame 23:   [0, 0, 8]
Frame 24:   [0, 0, 8]
Frame 25:   [0, 0, 8]
Frame 26:   [0, 0, 0]
Frame 27:   [0, 0, 0]
Frame 28:   [0, 0, 0]
Frame 29:   [0, 0, 0]

আপনি দেখতে পাচ্ছেন, প্রতিটি ফ্রেমের প্রতিটি রঙ উপাদান থেকে 8 বা 9 টি বিয়োগ করা হয়। তদ্ব্যতীত, একটি 9 সর্বদা 8 এর পরে তিনটি ফ্রেম প্রদর্শিত হয়, যদিও প্রতিটি রঙের উপাদানগুলির জন্য শুরু বিয়োগের মান আলাদা is এছাড়াও লক্ষ করুন যে প্রতিটি বর্ণ উপাদান 8 বা 9 এর পার্থক্যের সাথে 0 (যা কালো) পৌঁছেছে, কিছু স্বেচ্ছাসেবী অবশিষ্ট নয়। এর অর্থ 8,8,8,9 এর বিয়োগের চক্রটি কখনই ভাঙা যায় না! (এই অ্যালগরিদম সম্ভবত বিবর্ণের শেষ ফ্রেমটি অন্যদের মতো মসৃণ ছিল তা নিশ্চিত করার জন্য লেখা হয়েছিল))

এখন, এই ধাঁধা আমাকে। আমার গণনা অনুসারে, যদি আপনি প্রক্রিয়াটি বিপরীত হন - অর্থাৎ 8,8,8,9 চক্রটি নিন এবং 29 ফ্রেমের সমস্ত সম্ভাব্য সংমিশ্রণগুলি অনুসন্ধান করার জন্য এটি যোগ করুন - আপনি কেবল 52 টি অনন্য নম্বর পাবেন। তবে এটি যেমন ঘটে থাকে তেমনি প্রতিটি রঙ উপাদান এই সেটটির সদস্য! এর অর্থ হ'ল হয় রঙগুলি নির্দিষ্টভাবে এই বিবর্ণ অ্যালগরিদম (অসম্ভব) জন্য বাছাই করা হয়েছে, বা বিবর্ণ অ্যালগরিদমটি গেমের রঙ প্যালেটটির চারপাশে নকশা করা হয়েছিল। তবে পৃথিবীতে কেউ কীভাবে বুঝতে পেরেছিল যে আপনি যদি 8,8,8,9 নেন, তাহলে চক্রটি যথাযথভাবে স্থানান্তরিত করুন এবং আপনার প্যালেটের প্রতিটি রঙের উপাদান থেকে সংখ্যাগুলি বিয়োগ করা অবশেষে আপনি প্রতিটি রঙের জন্য শেষ পর্যন্ত 0 এ পৌঁছবেন? ! কিছু গাণিতিক কৌশল আছে যা আমি মিস করছি। এটা কি?


2
শুধু আলফা দিয়ে খেলবেন না কেন? ফিড-ইন / আউট অ্যানিমেশনগুলির জন্য আমি এটিই করি।
ডগডগ

আমি আমার নিজস্ব কোডে অ্যালগরিদমটির প্রতিলিপি দেওয়ার চেষ্টা করছি না, কেবল এটি কীভাবে উদ্ভূত হয়েছিল তা বের করার চেষ্টা করছি।
আর্চাগন

আমার মনে হচ্ছে আপনি যা বলেছিলেন তা হ'ল, রঙগুলি 8,8,8,9 অনুক্রমের উপর ভিত্তি করে বেছে নেওয়া হয়েছে। সেই ধারাবাহিকতায় তারা 52 * 52 * 52 টি রঙ চয়ন করতে সক্ষম হয়েছিল। একটি আকর্ষণীয় নোট, আপনি যদি 0 থেকে শুরু করেন এবং 8,8,8,9 অনুক্রমটি যুক্ত করেন তবে আপনি 255 এ পাবেন Which যা তাদের কালো এবং সাদা ব্যবহার করতে দেয়।
লুইস এস্ট্রাডা

@ অ্যাপোক: বিবর্ণ আউট স্টাইল আলফা ফ্যাড থেকে দৃশ্যমান পৃথক। প্রতিটি বর্ণের মানটি তার প্রাথমিক মানের শতাংশের চেয়ে একটি নির্দিষ্ট সংখ্যার (সংখ্যা প্যাটার্ন) দিয়ে কীভাবে নীচে নেমে যায় দেখুন? এর অর্থ হ'ল এমন পরিস্থিতি রয়েছে যেখানে আপনি আরও সাধারণ পদ্ধতির চেয়ে এটি ব্যবহার করতে পছন্দ করতে পারেন। বিপরীতমুখী শৈলী, উদাহরণস্বরূপ।
AlbeyAmakiir

উত্তর:


20

আসলে, 8-8-8-9 ধরণের পিছনে একটি সাধারণ যুক্তি রয়েছে। এটি স্বাভাবিকভাবেই উত্থাপিত হয় যদি আপনি কেবলমাত্র 32 টি তীব্রতা স্তর (প্রতিটি উপাদান 5 বিট) ব্যবহার করেন তবে এটি 8-বিট-প্রতি-উপাদান উপাদান প্রদর্শন করতে চান।

আপনার যদি 5-বিটের তীব্রতা স্তর থাকে এবং এটি 8 বিটে প্রসারিত করতে চান তা বিবেচনা করুন। সবচেয়ে সহজ কাজটি হ'ল কেবল বামে শিফট করা এবং কম তিনটি বিট শূন্য ছেড়ে যাওয়া। সমস্যাটি হল, তবে এটি খাঁটি সাদা পর্যন্ত পুরোপুরি যায় না। আপনি যে সর্বাধিক তীব্রতার স্তরে পৌঁছতে পারবেন তা 11111000 বা 248 So তাই আপনি 8-বিট ডিসপ্লেটির সম্পূর্ণ তীব্রতা পরিসরটি ব্যবহার করছেন না।

সত্যিই, আপনি যা করতে চান তা হ'ল একটি গণনা intensity8 = round(intensity5 * 255.0 / 31.0), [0, 31] এর পরিধি [0, 255] এর পুনরুদ্ধার করার জন্য। যাইহোক, কোনও ভাসমান-পয়েন্ট গণিত বা বিভাজন ছাড়াই এটি সম্পাদন করার জন্য একটি ঝরঝরে কৌশল রয়েছে: নিম্ন তিনটি বিটকে উচ্চ তিন বিটের সমান সেট করুন। যা হ'ল তীব্রতা 5-বিট থেকে 8-বিটে রূপান্তরিত করতে আপনি করতে চান

intensity8 = (intensity5 << 3) | (intensity5 >> 2);

তারপরে 11111 এর তীব্রতা 11111111 (31 মানচিত্র 255) এ মানচিত্র করবে এবং মধ্যবর্তী ফলাফলগুলি বুদ্ধিমান কিছু করবে, যেমন 10000 -> 10000100 (16 -> 132)।

এই সংখ্যার সেটটি আপনার কাছে ঠিক তাই। আপনার প্রথম উদাহরণের লাল উপাদানটি গ্রহণ করে আপনার কাছে:

132    10000100
123    01111011
115    01110011
107    01101011
 99    01100011
 90    01011010
 82    01010010
 74    01001010

কম তিনটি বিট কীভাবে সর্বদা শীর্ষ তিনটি বিটের সমান হয় তা নোট করুন। 9 এর পার্থক্য তখন ঘটে যখন বিট 0 এবং বিট 3 উভয় একই সময়ে ফ্লিপ হয়।

আমি অনিশ্চিত কেন এই পরিস্থিতিতে 5-বিট তীব্রতার স্তর ব্যবহার করা হত; সম্ভবত এটিই ছিল আরকেড মেশিনের হার্ডওয়ারের সীমা? এটি উল্লেখযোগ্য যে একটি 5-বিট আরজিবি মান 15 বিট, যা 16 বিট শব্দের সাথে দুর্দান্তভাবে ফিট করে। যাইহোক, এটি বিজোড় 8-8-8-9 প্যাটার্নটি ব্যাখ্যা করে।


1
প্রতি পিক্সেলটিতে 16 বিটকে 'হাই রঙ' বলা হত। (যে সব আমি এটা সম্পর্কে মনে রাখা সম্পর্কে এর) en.wikipedia.org/wiki/High_color
টাগ

1
উইকিপিডিয়া মাধ্যমে একটি দ্রুত ট্রিপ পর Sega শনি ( en.wikipedia.org/wiki/Sega_Saturn#Video ) 15-বিট রঙ প্রদর্শন মোডে, সেইসাথে gameboy অগ্রিম (উল্লেখ en.wikipedia.org/wiki/Game_Boy_Advance )
টাগ

1
উজ্জ্বল! সব কিছু এখন অর্থপূর্ণ মনে হচ্ছে। ধন্যবাদ!
আর্চাগন

গেমটির অবশ্যই 16-বিট রঙ থাকতে হবে এবং শিল্পীরা সম্ভবত একটি আরজিবিএ 5551 রঙের স্কিম দিয়ে স্বচ্ছতার ব্যয় করে তাদের খেলা থেকে আরও রঙ বের করতে চেয়েছিলেন।
আর্চাগন

0

আপনার 13h মোডে বা 256 রঙের প্যালেট বিবর্ণ হওয়া উচিত। তারপরে, আপনার অনেকগুলি রঙ ছিল এবং আপনি যা করেছিলেন তা পুরো প্যালেটটি নিয়ে ঘোরাঘুরি করছে, যেহেতু আপনি যে নতুন রঙগুলিতে ছিলেন না তা গণনা করতে পারেন না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.