• 1999 में आया RollerCoaster Tycoon लगभग पूरी तरह Assembly में लिखा गया simulation game था, जो हज़ारों guests को real time में प्रोसेस करते हुए भी स्थिर performance बनाए रखता था
  • डेवलपर Chris Sawyer ने high-level language के बजाय low-level control चुना और CPU computation efficiency को अधिकतम करने वाली आख़िरी पीढ़ी के Assembly games में से एक तैयार किया
  • फैन प्रोजेक्ट OpenRCT2 के ज़रिए मूल गेम के सटीक optimization patterns और memory-saving techniques का reverse engineering के माध्यम से विश्लेषण किया गया
  • गेम ने bit shift operations और data type granularity का उपयोग करके computation speed और cache efficiency बढ़ाई, और pathfinding depth limitscollision calculations को हटाकर बड़े पैमाने की simulation संभव बनाई
  • यह संरचना तकनीकी सीमाओं का रचनात्मक उपयोग करने वाले optimization का एक क्लासिक उदाहरण है, और आज भी दिखाती है कि design phase में अनावश्यक computations हटाने का दृष्टिकोण कितना महत्वपूर्ण है

RollerCoaster Tycoon की optimization संरचना का विश्लेषण

  • 1999 में रिलीज़ हुआ RollerCoaster Tycoon(RCT) लगभग पूरी तरह Assembly में लिखा गया था, और इसे ऐसा गेम माना जाता है जो हज़ारों agents को real time में simulate करते हुए भी उस समय के hardware पर स्थिर frame rate बनाए रखता था
  • जर्मन गेम podcast Stay Forever में की गई चर्चा के आधार पर, यह विस्तार से विश्लेषण किया गया है कि Chris Sawyer ने इतनी चरम स्तर की optimization कैसे हासिल की
  • मूल source code सार्वजनिक नहीं है, लेकिन फैंस द्वारा बनाए गए OpenRCT2 प्रोजेक्ट के माध्यम से code structure और optimization techniques को reverse engineering से देखा जा सकता है
  • Assembly आधारित performance maximization

    • RCT को C या C++ के बजाय Assembly में लिखा गया था, जिससे उस समय के दूसरे games की तुलना में कहीं अधिक सूक्ष्म performance control संभव हुआ
      • उदाहरण के लिए, Doom (1993) का अधिकांश हिस्सा C में लिखा गया था, जबकि RCT लगभग पूरी तरह Assembly में implement किया गया था
      • 1990 के दशक के उत्तरार्ध तक यह तरीका पहले ही दुर्लभ हो चुका था, और RCT को आख़िरी बड़े Assembly games में से एक माना जाता है
    • उस समय compiler की automatic optimization सीमित थी, इसलिए manual optimization performance में बड़ा अंतर पैदा कर सकती थी
  • OpenRCT2 के माध्यम से code analysis

    • OpenRCT2 फैंस द्वारा बनाया गया एक open source प्रोजेक्ट है, जिसने मूल गेम को पूरी तरह reimplement किया है और मूल assets का उपयोग करते हुए भी 100% compatibility बनाए रखता है
      • शुरुआती versions ने मूल code के लगभग समान behavior को reproduce किया, और बाद में कई तरह के improvements जोड़े गए
    • इस प्रोजेक्ट के माध्यम से मूल code के सूक्ष्म optimization patterns को देखा जा सका
  • Data types का सूक्ष्म विभाजन — memory savings

    • RCT में राशि से जुड़े data का size स्थिति के अनुसार अलग-अलग रखा जाता है
      • उदाहरण: पूरे पार्क की value के लिए 4-byte variable, जबकि दुकान की कीमत के लिए 1-byte variable
    • यह विभाजन memory बचाने और cache efficiency बढ़ाने के लिए था, लेकिन आधुनिक CPU पर performance का अंतर लगभग नहीं के बराबर है, इसलिए OpenRCT2 में इसे एक ही 8-byte variable में एकीकृत किया गया
  • Bit shift से mathematical operations की optimization

    • code में NewValue = OldValue >> जैसे operations का उपयोग 2 की power से division को replace करने के लिए किया गया
    • इस तरह की optimization केवल तब संभव है जब multiplication या division 2 की power हो, इसलिए लगता है कि गेम के formulas को भी इसी शर्त के अनुरूप design किया गया था
    • यानी, game design phase से ही CPU computation efficiency को ध्यान में रखकर mathematical structure बनाई गई थी
  • Performance को ध्यान में रखकर game design

    • RCT में Chris Sawyer programmer और एकमात्र game designer दोनों थे, इसलिए वे design phase से ही performance-aware structure बना सके
    • इसका प्रमुख उदाहरण guest pathfinding system है
      • अधिकांश simulation games में guests किसी destination को चुनकर उसका path खोजते हैं, लेकिन RCT में guests यूं ही random चलते रहते हैं और संयोग से rides खोज लेते हैं
      • यह तरीका बड़े पैमाने की pathfinding calculations से बचने वाली संरचना है, जिससे हज़ारों guests को एक साथ संभालना संभव हुआ
    • जहाँ pathfinding आवश्यक होती है (जैसे कोई mechanic खराब ride तक जाए), वहाँ search depth limit रखी गई ताकि frame drops रोके जा सकें
      • सामान्य guests केवल 5 intersections तक खोजते हैं, mechanic 8 तक
      • map खरीदने वाले guests के लिए search limit 7 तक बढ़ जाती है
    • ये सीमाएँ सिर्फ तकनीकी समझौता नहीं थीं, बल्कि optimization को gameplay element के रूप में स्वाभाविक रूप से integrate करने वाली संरचना थीं
  • Crowd handling और collision avoidance को छोड़ना

    • RCT में guests के बीच collision या avoidance calculations को पूरी तरह हटा दिया गया
      • हज़ारों guests एक ही path tile को share कर सकते हैं
    • इसके बजाय आसपास की population density को track किया जाता है, ताकि भीड़ बढ़ने पर guests की happiness कम हो
      • इससे player को अब भी भीड़ को manage करना पड़ता है, लेकिन computation बहुत कम हो जाती है
    • यह तरीका जटिल physics calculations हटाकर भी game experience बनाए रखने का एक प्रतिनिधि उदाहरण माना जाता है
  • आधुनिक development के लिए संकेत

    • RCT की optimization को तकनीकी सीमाओं का रचनात्मक उपयोग करने वाले उदाहरण के रूप में देखा जाता है
    • आज भी ऐसा दृष्टिकोण संभव है, लेकिन इसके लिए programmers और designers के बीच घनिष्ठ सहयोग ज़रूरी है
    • कई बार तकनीकी समस्या को हल करने से बेहतर, समस्या को ही design phase में हटा देना कहीं बड़ा performance improvement दे सकता है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.