1 पॉइंट द्वारा GN⁺ 2024-02-26 | 1 टिप्पणियां | WhatsApp पर शेयर करें

Amiga पर animation "woosh" स्क्रीन कोड करना

  • 1985 में लॉन्च के समय Amiga ने ग्राफिक्स और साउंड के मामले में अद्भुत अनुभव दिया।
  • Amiga पर रंगीन इमेज दिखाना सरल है, लेकिन game engine के संदर्भ में इसमें कई चुनौतियाँ हैं।

चुनौती 1: RAM आवश्यकताएँ

  • एक सामान्य Amiga 500 में 512KB "chip RAM" और 512KB expansion RAM होता है।
  • केवल chip RAM का उपयोग ग्राफिक्स और साउंड दिखाने के लिए किया जा सकता है, इसलिए इसकी कीमत अधिक है।
  • फुल-स्क्रीन character graphics (CG) 320x240 bitmap है जो 32 रंगों का उपयोग करता है, और uncompressed स्थिति में 48KB RAM लेता है।
  • asset compression को सपोर्ट करने के लिए ZX0 compression format जोड़ा गया, जिससे CG compress होकर 8KB रह गया और इसे रखना संभव हो गया।
  • level assets लोड होते समय compressed CG को expansion RAM में लोड किया जाता है, और display से ठीक पहले chip RAM में decompress किया जाता है।
  • 48KB chip RAM अलग से खोजने के बजाय, screen memory के अन्य हिस्सों का पुन: उपयोग किया जाता है।

चुनौती 2: "screen split" प्रभाव

  • शुरुआत में screen transition के लिए vertical wipe पर विचार किया गया।
  • लेकिन उसे अच्छा दिखाने के लिए एक gradient wipe चाहिए था, जिसमें हर scanline पर color palette को समायोजित करना पड़ता।
  • screen split effect को implement करना आसान है और सामान्य दर्शक को यह ज्यादा शानदार लगता है।
  • Amiga की दो विशेष क्षमताएँ मिलकर इस effect को संभव बनाती हैं:
    1. coprocessor (copper) CPU के साथ parallel में काम करता है और उसे इस तरह निर्देशित किया जा सकता है कि वह screen की खास lines पर hardware registers बदले।
    2. hardware registers में screen pointers सेट करके screen memory को chip RAM के किसी भी हिस्से पर बदला जा सकता है।

चुनौती 3: "motion lines"

  • animation effect को पूरा करने के लिए background में "woosh" करती lines चाहिए।
  • lines खींचने के लिए sprites का उपयोग अच्छा विकल्प है, क्योंकि वे screen memory से स्वतंत्र रूप से draw और move किए जा सकते हैं।
  • Amiga sprites बहुत सीमित और जटिल हैं।

sprite colors

  • sprites bitplanes और color palette साझा करते हैं, इसलिए संभव हो तो कम से कम colors का उपयोग करना चाहिए।
  • sprites केवल 3 colors का उपयोग करते हैं, जिससे CG के लिए 28 colors और background के लिए 1 color बचता है।
  • अलग-अलग sprites palette में अलग colors का उपयोग करते हैं।

sprite graphics का पुन: उपयोग

  • sprite graphics के पहले 4 bytes "control bits" होते हैं, जो sprite की position और height बताते हैं।
  • जब एक ही graphics को कई positions पर draw करना हो, तो यह समस्या बन जाती है।
  • इसके बजाय 8 fake sprites बनाए गए, जिनमें केवल control bits हैं, और sprite pointers को इन fake sprites पर सेट किया गया।

bitplanes बंद होने पर sprites draw नहीं होते

  • CG के screen के शीर्ष तक पहुँचने से पहले, screen top और CG start के बीच काफी खाली जगह होती है।
  • इस दौरान अगर bitplanes active रहें, तो screen पर garbage data draw हो जाता है।
  • bitplanes को disable करने पर sprites भी draw नहीं होते।
  • इसका समाधान है केवल 1 bitplane को active रखना और screen pointers को खाली data पर सेट करना।

निष्कर्ष

  • शुरुआत में RAM आवश्यकताओं की वजह से यह निश्चित नहीं था कि game में CG शामिल किया जाए या नहीं।
  • data compression लागू होने से यह साबित हुआ कि overhead काफी व्यावहारिक है।
  • Amiga hardware की अनोखी विशेषताओं का उपयोग करना खास तौर पर दिलचस्प है।

GN⁺ की राय:

  • यह लेख Amiga कंप्यूटर की graphics processing क्षमता और game development के दौरान memory optimization तकनीकों को अच्छी तरह दिखाता है।
  • यह बताता है कि data compression और hardware की विशेष क्षमताओं का उपयोग करके सीमित संसाधनों में शानदार effects कैसे बनाए जा सकते हैं।
  • Amiga जैसे classic computers के hardware को समझना और उसका उपयोग करना, retro game developers या computer history में रुचि रखने वालों के लिए बहुत दिलचस्प विषय है।

1 टिप्पणियां

 
GN⁺ 2024-02-26
Hacker News टिप्पणियाँ
  • "Racing the beam" पर टिप्पणी का सार:

    • एक उपयोगकर्ता ने याद किया कि वह 'beam racing' तकनीक से अच्छी तरह परिचित था, और उसने इस तकनीक का उपयोग करके प्रति फ़्रेम CPU समय की गणना की थी.
    • उसने बताया कि स्क्रीन के किनारे पर रंग सेट करने के लिए address $dff180 का उपयोग किया जाता था, और यह तकनीक उसने इंटरनेट से नहीं बल्कि लोगों से सुनकर सीखी थी.
    • उसने यह भी सोचा कि क्या आज भी लोग इस chipset का अधिकतम उपयोग करने की कोशिश कर रहे हैं, और Amiga कंप्यूटर के लिए गेम विकसित करने वाले लोगों की प्रोफ़ाइल कैसी होती है, इस पर सवाल उठाया.
    • Amiga में रुचि साझा करने के लिए उसने धन्यवाद भी दिया.
  • Amiga 500 की memory configuration पर टिप्पणी का सार:

    • एक उपयोगकर्ता ने बताया कि Amiga 500 में डिफ़ॉल्ट रूप से 512kB chip RAM होता था, और कई उपयोगकर्ता अतिरिक्त 512kB fast RAM का विस्तार लगाते थे.
    • उसने समझाया कि यह expanded RAM graphics hardware द्वारा सीधे एक्सेस नहीं किया जा सकता था, और यह असली fast RAM से भी धीमा था.
  • Amiga पर Japanese-style console games की संभावनाओं पर टिप्पणी का सार:

    • एक उपयोगकर्ता ने सोचा कि Amiga पर Japanese-style console games कैसे दिखते, और यह सवाल उठाया कि क्या Amiga में performance की कमी थी या फिर बस ज़्यादातर game design उसे पसंद नहीं आते थे.
    • उसने Factor 5 द्वारा बनाए गए Bonk game conversion का उदाहरण दिया और उनकी तारीफ़ करते हुए कहा कि वे मानो जादूगर जैसे developers थे.
  • constraints के भीतर coding के आकर्षण पर टिप्पणी का सार:

    • एक उपयोगकर्ता ने कहा कि constraints के भीतर coding करना उसे बेहद आकर्षक लगता है.
  • Amiga के साथ व्यक्तिगत अनुभव और animation बनाने के तरीकों को साझा करने पर टिप्पणी का सार:

    • एक उपयोगकर्ता ने कहा कि उसने जो Amiga इस्तेमाल किया था, वह दूसरों के अनुभवों से अलग लगा, और Nintendo NES से तुलना करते हुए कहा कि उसे उतनी nostalgia महसूस नहीं होती.
    • फिर भी, उसने माना कि यह दिखाना बहुत शानदार है कि ऐसी animations कैसे बनाई गईं.