Don’t Starve·Diablo शैली की ‘Parallax 7’ तकनीक
(simonschreibt.de)- जब वास्तविक 3D बनाना कठिन था, उस 2D गेम युग में भी डेवलपर्स ने parallax scrolling और SNES Mode 7 का उपयोग करके गहराई का अहसास बनाया, और Diablo 2 का Perspective Mode उसी परंपरा को 2D ARPG के भीतर दिखाता है
- Don’t Starve झाड़ियों, पेड़ों और दुश्मनों को flat assets के रूप में संभालते हुए भी त्रि-आयामी दृश्य बनाता है, और Diablo 2 ने 2000 के 2D गेम में floor rendering और sprite deformation को मिलाकर ऐसा ही प्रभाव दिया
- Diablo 2 का Perspective Mode सिर्फ sprites को साधारण रूप से खिसकाने वाला effect नहीं है, बल्कि यह ऐसा deformation बनाता है मानो पूरी स्क्रीन क्षितिज की ओर झुकी हुई हो, जिससे vanishing point और perspective उभरते हैं
- Blizzard ने DT1 sprites को 32×32px टुकड़ों में बाँटा और orientation value के अनुसार दीवार, बाड़ जैसी objects को अलग-अलग deform किया ताकि दृश्य में gaps कम हों
- बाद में सार्वजनिक हुई Gamasutra सामग्री के अनुसार Perspective Mode के लिए 3D graphics card चाहिए था, mini tile textures को थोड़ा rotate, scale और stretch करके depth और parallax effect बनाए गए, और इसे लागू करने में लगभग 1–2 हफ्ते लगे
2D को 3D जैसा दिखाने वाली शुरुआती तकनीकें
- 1990 के दशक के गेम 2D से 3D की ओर बढ़ने लगे थे, लेकिन वास्तविक 3D से पहले भी डेवलपर्स 3D जैसे दिखने वाले दृश्य बनाने के लिए कई tricks इस्तेमाल करते थे
- इनमें एक प्रमुख तरीका parallax effect था
- दूरी के हिसाब से कुछ elements तेज़ और कुछ धीमे चलते हैं, जिससे गहराई का एहसास बनता है
- 1982 का Moon Patrol सिर्फ कई layers को अलग-अलग गति से चलाकर भी मज़बूत depth पैदा करता था
- SNES युग का Mode 7 वास्तविक 3D नहीं था, लेकिन floor texture को manipulate करके दृश्य को perspective वाला दिखाता था
- GBA के विवरण के अनुसार, वास्तविक 3D hardware के बिना भी हर scanline पर scale और movement values बदलकर 3D जैसा illusion बनाया जा सकता था
- यह तरीका ऊँचाई को depth जैसा दिखाने वाली texture manipulation के अधिक करीब था
Don’t Starve और Diablo 2 में flat assets का उपयोग
- आज सभी assets को वास्तविक 3D में render किया जा सकता है, लेकिन हर दृश्य में त्रि-आयामी models ज़रूरी नहीं होते
- Don’t Starve की झाड़ियाँ, पेड़ और दुश्मन flat assets हैं, फिर भी दृश्य रूप से काफी आकर्षक परिणाम देते हैं
- Diablo 2 2000 में आया 2D ARPG है, जो Moon Patrol शैली के parallax और Mode 7 शैली के floor presentation दोनों की याद दिलाता है
- डिफ़ॉल्ट सेटिंग में Diablo 2 पूरी तरह 2D स्क्रीन दिखाता है
- कोई perspective नहीं होता
- parallax effect भी नहीं होता
- Perspective Mode चालू करने पर वही floor pixels स्तंभों से लगातार ढँकते नहीं रहते, और Don’t Starve की तरह flat assets गहराई वाले space में चलते हुए दिखाई देते हैं
Diablo 2 Perspective Mode का विश्लेषण कैसे किया गया
- Diablo 2 के बारे में आधिकारिक जानकारी लगभग न के बराबर थी, इसलिए MPQ और DT1 files को extract और analyze करने वाले tools से Perspective Mode को देखा गया
- MPQ Editor का उपयोग MPQ से DT1 files निकालने के लिए किया गया
- DT1 Tools का उपयोग DT1 से PCX files निकालने के लिए किया गया
- DT1 Tutorial का उपयोग DT1 format को समझने के लिए किया गया
- Perspective Mode sprites को थोड़ा-थोड़ा खिसकाने वाला साधारण effect नहीं है
- mode on और off वाले दृश्य को एक ही स्थान से तुलना करने पर हर element में क्षितिज की दिशा में झुका हुआ-सा deformation दिखाई देता है
- floor texture पर check pattern डालने से यह deformation और स्पष्ट हो जाता है
- चूँकि दृश्य बहुत से sprite fragments से बना है, deformation के दौरान borders पर gaps बनना आसान है
- Diablo 2 इन टुकड़ों को मिलाए रखते हुए भी perspective वाला दृश्य बनाए रखता है
32×32 टुकड़े और orientation value
- Blizzard ने sprites को 32×32px हिस्सों में बाँटा
- यह संभवतः सिर्फ ज़रूरी image parts लोड करने वाली optimization जैसा लगता है
- Perspective Mode में deformation लागू करते समय भी यह उपयोगी दिखता है
- अगर pillar texture पर 32px अंतराल वाली lines खींचकर उसे नकली wireframe की तरह देखा जाए, तो vertical lines ज़मीन की गहराई में मौजूद vanishing point की ओर जाती हुई लगती हैं
- कुछ sprites में निचली border मुड़ी हुई दिखाई देती है
- सिर्फ perspective को देखें तो ऐसी curvature अनिवार्य नहीं लगती
- यह deformation sprite को देखने के angle या player/camera position के अनुसार बदलता है
- DT1 format में sprites के पास orientation value हो सकती है
- Paul Siramy के दस्तावेज़ के अनुसार direction value के आधार पर sprite deformation का तरीका बदल सकता है
- उदाहरणों में Left Wall, Upper Wall, Lower-Left corner जैसी wall directions शामिल हैं
- दीवार या बाड़ जैसे अलग दिशा वाले sprites अलग-अलग तरीके से deform होते हैं
- कुछ मामलों में ऊपर-नीचे की borders नहीं मुड़तीं, और boundary lines बाईं ओर के vanishing point की तरफ जाती हुई लगती हैं
- game gaps से बचने के लिए deformation को थोड़ा बढ़ा-चढ़ाकर लागू करता हुआ लगता है, और fence sprites आपस में अच्छी तरह fit हो जाते हैं
- उसी wall को गलत orientation value देने पर sprites के बीच gap पैदा हो जाता है
सार्वजनिक अतिरिक्त जानकारी और मिलते-जुलते उदाहरण
- Perspective Mode को Diablo 2 में सिर्फ D3D fullscreen पर ही सक्रिय किया जा सकता था
- Diablo 2 Glide और Software Rendering को भी support करता था
- पुरानी DirectX documentation में अतिरिक्त जानकारी खोजने की कोशिश की गई, लेकिन खास नतीजा नहीं मिला
- बाद के update में image distortion से जुड़ा link जोड़ा गया
- image aberration में दिखने वाला distortion, Diablo 2 के Perspective Mode में दिखने वाले विरूपण से बहुत मिलता-जुलता लगता है
- Diablo 2 के डेवलपर ने वास्तव में इसका उपयोग किया था या नहीं, यह पता नहीं है
- Paul Siramy द्वारा साझा किए गए Gamasutra लेख में Perspective Mode के implementation का अधिक सीधा विवरण मिलता है
- Perspective Mode चालू करने के लिए 3D graphics card आवश्यक था
- Diablo II बड़े diamond tiles को कई छोटे diamond tiles से बनाकर अधिक बारीक grid का उपयोग करता था
- हर mini tile की texture को थोड़ा rotate किया जाता था, फिर video card उसे दो polygons पर paint करके vertical और horizontal दिशा में stretch करता था ताकि character की position के अनुसार वह बड़ा या छोटा दिखाई दे
- पेड़ और इमारतें पास आने या दूर जाने पर आकार में बदलती हुई दिखती हैं, और foreground/background objects से अलग गति पर scroll होकर parallax effect पैदा करती हैं
- objects में हल्की shimmer दिखाई देना graphics card की bilinear filtering का परिणाम बताया गया है
- characters, items, और Act I की huts तथा towers जैसी संरचनाएँ भी Perspective Mode में scale up/down होती हैं
- Dave के विवरण के अनुसार वास्तविक 3D math का उपयोग करके grid को थोड़ा scale और stretch किया गया ताकि depth का एहसास बने
- implementation में लगभग 1–2 हफ्ते लगे, और wall alignment तथा lighting processing की ज़रूरत पड़ी; artists को objects को फिर से काटना और अलग तरह से render करना पड़ा
- Update 3 में Cultures को भी इसी तरह की 2D perspective trick इस्तेमाल करने वाले उदाहरण के रूप में जोड़ा गया
1 टिप्पणियां
Hacker News की टिप्पणियाँ
यह पहले मेरी जिज्ञासा वाली सूची में था, तो अब इसे हटा सकता हूँ। अगर किसी को पता हो कि World of Warcraft का आसमान कैसे बनाया गया था, और कुछ हद तक Warcraft 3 का terrain कैसे बना था, तो बताएं
मुझे हमेशा लगा कि Warcraft 3 का terrain शायद marching squares का कोई चतुर इस्तेमाल था। 10 साल से ज़्यादा समय से यह सोचता रहा हूँ; दिन/रात/बादल/चाँद/तारे जैसे फीचर कमाल के हैं, सुंदर और हल्के हैं, और ऐसा लगता है कि हर दूसरे frame पर update होते हैं, फिर भी बहुत natural लगते हैं। render-to-texture जैसा नहीं लगता, polygons या texels दिखें इतना भी नहीं, इतना smooth है, और 2002 के computers पर भी चलता था—इस लिहाज़ से यह tech art का चमत्कार है
https://simonschreibt.de/gat/homeworld-2-backgrounds/
http://simonschreibt.de/gat/homeworld-2-backgrounds-tech/
[1] https://www.hiveworkshop.com/attachments/wc3search-tutorial0...
[2] https://www.hiveworkshop.com/attachments/15-jpg.7734/
सार यह है कि यह कई skybox meshes को layer करके बनाया गया structure है
Project Diablo 2[1] चलाने वाले लोगों की वजह से मैं अब भी D2 खेलता हूँ। perspective mode 144fps पर सचमुच खूबसूरत लगता है, और original LoD client के 30fps पर वापस जाना काफी मुश्किल है
आज भी Pandemonium Fortress में घुमावदार सीढ़ियाँ उतरते हुए उन सुंदर—शायद डरावने कहना ज़्यादा सही होगा—graphics से अभिभूत होने की याद और nostalgia बाकी है
[1] https://www.projectdiablo2.com/
मुझे लगता है Mode 7 मूल रूप से एक आदिम 3D accelerator जैसा है। यह कई transformations लगाए हुए एक single texture plane render करता है, इसलिए सिद्धांततः यह modern GPU जितना ही “असली 3D” कहा जा सकता है, बस बहुत सीमित और कम सटीक है
ज़्यादा convincing 3D hacks cartridge के auxiliary processor से आते थे। Super Mario Kart जैसे games में extra chip हर scanline के लिए नए Mode 7 parameters तेज़ी से compute करता था, और हर line पर scale और move बदलकर, rotation को वैसा ही रखते हुए, ऊपर की lines छोटी और नीचे की lines बड़ी दिखती थीं, जिससे tilted 3D का एहसास बनता था
यह “हर scanline पर scale बदलने” का तरीका modern GPU से बहुत अलग है और arbitrary transformation भी नहीं है। उदाहरण के लिए इस technique से plane को सिर्फ horizontal axis के हिसाब से rotate किया जा सकता है; vertical axis के हिसाब से rotation संभव नहीं है
शुरुआती computer graphics जब भी देखता हूँ, हैरान कर देते हैं। मुझे यकीन है कि शुरुआती animation और computer graphics के योगदान के बिना software और hardware दोनों आज से कई generations पीछे होते
NVIDIA को देखें तो, शुरुआती रूपों के machine learning और “artificial intelligence” के लिए वही architecture उपयोगी निकला—यह लगभग किस्मत जैसी बात थी—लेकिन कंपनी खुद computer graphics की नींव पर बनी थी
sprites के नीचे के किनारे इतने मुड़े हुए क्यों हैं—शायद vertical sprites के लिए जमीन “के नीचे” वाले vanishing point की नकल करने के लिए यह ज़रूरी था। अगर तीन खूँटे ऊपर की ओर बाहर फैलते हुए rotate करें, तो नीचे का हिस्सा भी कुछ हद तक साथ घूमना चाहिए, और simple skew transform अजीब लगता
3ds Max scene में viewport के सामने रखा होने और square texture होने की वजह से skew ठीक दिखता होगा, इसलिए फर्क साफ नहीं दिखा होगा। moving example में, अगर वास्तविकता के करीब देखें, तो पास आने पर तीनों खूँटे viewpoint के हिसाब से फैलने चाहिए, और 3ds Max render इसे ठीक से नहीं दिखा पाता
यह लेख games में parallax पर focus करता है, लेकिन parallax effect का animation में लंबा इतिहास है
Disney का multiplane camera और उसके predecessors लगभग 100 साल पहले से मौजूद थे। 2D images से भी depth वाले scenes बनाने की कई तरह की tricks संभव हैं
https://en.wikipedia.org/wiki/Multiplane_camera
लगता है developers parallax effect से काफी खुश थे, लेकिन मुझे याद नहीं कि मैंने इसे असल में इस्तेमाल किया हो। शायद default settings की आदत पड़ जाने के बाद यह बस अजीब लगा होगा
इन पुराने games के 3D को लोग “असली नहीं” कहते हैं, लेकिन modern 3D games भी आखिरकार flat screen पर ही दिखते हैं। तो क्या मूल रूप से उसी अर्थ में वे भी असली 3D नहीं हैं?
एक और महत्वपूर्ण फर्क pre-rendered sprites का है। Roller Coaster Tycoon या Diablo जैसे games में महंगे dedicated computers पर models बनाए जाते थे और उन्हें sprite sheets में render किया जाता था। objects 3D जैसे दिखते हों, फिर भी वे आम तौर पर flat assets के रूप में ship होते थे। कुछ modern pixel art games 2D sprites पर dynamic lighting लगाने के लिए normal maps भी साथ में रखते हैं
modern games में parallax effect को 3D scene के भीतर flat objects render करके आसानी से implement किया जा सकता है, लेकिन 20 साल पहले graphics pipelines काफी अलग थे, इसलिए 3D effects पाने के लिए कहीं ज़्यादा clever होना पड़ता था
यह Mode 7 system द्वारा render की जा सकने वाली 3D situations की limitation है, इसका मतलब यह नहीं कि जो render किया जा सकता है वह अपने-आप ज़्यादा fake है। आखिरकार सभी 3D rendering methods screen की 2D pixel grid को manipulate करके virtual objects देखने जैसा illusion बनाते हैं