Tramway SDK – Half-Life और Morrowind इंजनों का अपवित्र मेल
(racenis.github.io)- Tramway SDK पिछले 3 वर्षों से विकसित किया जा रहा एक graphics package/framework/game engine है, जिसका लक्ष्य mainstream engines की ऊँची system requirements और monolithic editor flow के खिलाफ एक lightweight engine बनना है
- Unity और Godot जैसे mainstream engines को साधारण low-poly games के लिए भी जरूरत से ज्यादा hardware मांगने वाला माना गया है, इसलिए यह हाल के 15 वर्षों के भीतर के hardware और software rasterization तक को run target बनाता है
- बनाने का तरीका node GUI और code के बीच आने-जाने के बजाय Entity class inheritance से code लिखने और सिर्फ जरूरी editors चुनकर इस्तेमाल करने की संरचना अपनाता है
- Level creation Quake-style brush workflow पर आधारित है और
.mapconverter, lightmaps, Gouraud shading, और Source-style input/output system का उपयोग करता है - इसका लक्ष्य open-world streaming और 3D RPG Maker के करीब RPG framework है, लेकिन यह अभी early development stage में है, इसलिए API instability और unimplemented elements को ध्यान में रखना होगा
Tramway SDK जिस समस्या को निशाना बनाता है
- Tramway SDK एक graphics package, framework और game engine है, और “T̈ra̦m̊ẅa̦ÿ SD̈K” जैसी heavy metal-style notation भी साथ में इस्तेमाल करता है
- Mainstream engines की आलोचना Turbobloat पर केंद्रित है
- Unity को बहुत powerful hardware और ज्यादा बिजली मांगने वाला माना गया है
- Godot को Unity से थोड़ा बेहतर, लेकिन फिर भी अपेक्षाकृत capable hardware की जरूरत वाला माना गया है
- यह रुख है कि low-poly horror roguelite deckbuilder simulator जैसे games 15 साल पुराने hardware पर भी आराम से चलने चाहिए
- Tramway SDK दावा करता है कि Turbobloat न होने के कारण यह हाल के 15 वर्षों के भीतर के लगभग सभी hardware पर चल सकता है
- Graphics card के बिना भी चलने के लिए software rasterization पर switch किया जा सकता है
- toaster या refrigerator जैसे devices पर graphics दिखाने के उदाहरण तक दिए गए हैं
- “बेहतर computer खरीद लो” वाली आपत्ति का जवाब तीन कारणों से दिया गया है
- कई लोगों के पास powerful hardware खरीदने की क्षमता नहीं होती—यह affordability की समस्या है
- Computer chips का उत्पादन पर्यावरण के लिए खराब है, और अगर software bloated न हो तो नया hardware केवल तब खरीदना चाहिए जब पुराना खराब हो जाए और repair न हो सके—यह e-waste की समस्या है
- जब पहले से अच्छा चल रहा computer मौजूद है, तो किसी और के Turbobloat की वजह से नया computer खरीदने का कोई कारण नहीं है
बनाने का तरीका और features
- Node-based creation approach की आलोचना इसलिए की गई है कि इसमें “एक चीज जैसा दिखने वाली कई चीजों” को संभालना पड़ता है और node GUI व code के बीच आना-जाना पड़ता है
- Tramway SDK में Entity class को inherit करके code लिखा जाता है और फिर level editor से level बनाए जाते हैं
- Nodes का उपयोग किए बिना entity-centric संरचना अपनाई जाती है
- Code और node GUI के बीच आने-जाने वाले flow से बचा जाता है
- Mainstream engines के monolithic editors को भी समस्या माना गया है
- माना जाता है कि जिन features का इस्तेमाल नहीं करना है, उनके साथ भी पूरा editor load होने का इंतजार करना पड़ता है
- Tramway SDK के सभी editors optional हैं
- अगर केवल framework के रूप में इस्तेमाल करना हो, तो सिर्फ C++ runtime का उपयोग किया जा सकता है
- अगर केवल level creation चाहिए, तो सिर्फ level editor इस्तेमाल किया जा सकता है
- Data files whitespace-separated values format में होती हैं, इसलिए editor के बिना हाथ से भी बदली जा सकती हैं
- Graphics के मामले में lightmaps और Gouraud shading भर से भी example images बनाई जा सकती हैं
- यह example Direct3D 7-level graphics card के fixed-function pipeline पर भी render किया जा सकता है
- Level creation Quake-family brush-based workflow को support करता है
- Tramway SDK
.mapfile converter देता है और brushes को triangular mesh में बदलता है - Trenchbroom में level बनाकर Tramway SDK level editor में configure करने का flow दिखाया गया है
- Engine के अंदर lightmapped level render किया जाता है
- Source जैसा input/output system level के भीतर entities के बीच interactions set करने देता है
- आगे चलकर पूरे Source logic entity को implement करने की योजना है, ताकि level editor के अंदर visual scripting संभव हो सके
- Tramway SDK
- RPG के लिहाज से, RPG Maker जैसे tools और Morrowind-based mods/total conversions में कई चीजें data changes से बनाई जा सकती हैं—इसे एक दिलचस्प उदाहरण माना गया है
- Tramway SDK में 3D के लिए RPG Maker के करीब एक RPG framework extension है
- Engine को शुरुआत से level streaming support करने के लिए design किया गया है, जिससे open-world RPG-style games बनाना तेज और आसान हो सकता है
- संक्षेप में, Tramway SDK Quake/Source-style entity-based game engine है और open-world streaming तथा RPG framework जैसे optional extensions देता है
- Development status अभी बहुत early stage में है
- API unstable है
- Features टूट सकते हैं या काम नहीं कर सकते
- अभी कई elements implement नहीं हुए हैं
- बताया गया है कि इसमें तेजी से सुधार हो रहा है
- GitHub repository: racenis/tram-sdk
1 टिप्पणियां
Hacker News की राय
कुछ लोग कह सकते हैं “बस बेहतर कंप्यूटर खरीद लो”, लेकिन इसी वजह से मैं पूरी तरह सहमत हूँ कि बेहतर कंप्यूटर खरीदना बुरा है। बहुत से लोग, खासकर विकासशील देशों के लोग, Turbobloat चलाने लायक hardware खरीदने की क्षमता नहीं रखते, और chip production का पर्यावरण पर बुरा असर पड़ता है
अगर आधुनिक software इतना फूला हुआ न होता, तो लोग नया hardware तभी खरीदते जब मौजूदा hardware खराब हो जाए और repair न हो सके। जब कोई कंप्यूटर ठीक-ठाक चल रहा है, तो किसी और के bloated software की वजह से नया कंप्यूटर खरीदने की कोई वजह नहीं है; उतने पैसों में Dr. Pepper के 1000 cans भी खरीदे जा सकते हैं। यह सच में अच्छा project है, उम्मीद है वे इसकी progress लगातार post करते रहेंगे
बेशक अगर बात entertainment की हो तो फैसला मुश्किल है, और कोई पुराना Game Boy शायद 1000W वाले modern gaming PC से भी ज्यादा मजेदार हो सकता है
“एक को एक ही होना चाहिए। वह कई चीजें नहीं होनी चाहिए जो एक होने का नाटक करें। nodes का इस्तेमाल करने पर आपको कई चीजों के समूह को एक होने का नाटक कराना पड़ता है” — यह वाक्य सच में Terry Pratchett जैसा लगता है और शानदार है
मुझे यह इसलिए पसंद है कि Sam Vimes किसी जटिल investigation के दौरान ऐसा सोच सकता था, और उम्मीद है यह आगे विकसित होता रहे। मैंने अभी इसे खुद try नहीं किया है, लेकिन मेरे AI project में इस्तेमाल करने के लिए मेरे पास एक idea है
इंसान body parts का समूह है, body parts chemicals का समूह हैं, chemicals molecules का समूह हैं, और molecules atoms का समूह हैं, फिर भी हर स्तर पर हम उन्हें एक मानते हैं। ऐसा करने से रोकना बेवकूफी है। फिर भी project अच्छा दिखता है
और Vetinari का entity component system जटिल दिखता है, लेकिन ठीक से काम करता है और इस धत्त शहर को चलाए रखता है
मेरा अंदाजा है कि node editor का user experience
FingerकेVectorजैसी चीजों को properties और relationships देने के लिए प्रेरित करता है, लेकिन आखिर मेंVectorसिर्फ “चीजों का समूह” है, अपने behavior वाली कोई “type” नहीं, इसलिए उस पर code attach करना मुश्किल है।क्या “सब कुछ Entity है और बस code लिखो” का मतलब यह है कि
Vectorके बजाय Fingers रखने वाली, अपनी state और behavior वाली Hand class बनाने की तरफ जाना चाहिए? या फिर किसी खास static values और relationship members को पहले से बांधकर node instance बनाने के बजाय, Entity subclass को फिर inherit करके और specific बनाना चाहिए?Godot की Node/GDScript संरचना को इस दावे का एक तरह का जवाब माना जा सकता है।
$operator और autocomplete जैसी चीजों के जरिए उस “आना-जाना” को जितना हो सके seamless और integrated बनाने की कोशिश है। फिर भी अंत में game release करना होता है, इसलिए मुझे लगता है “एक, एक ही है” वाली सोच आखिरकार जीतती हैसमय बीतने के साथ ऐसा लगता है कि कोई बाहरी ताकत game engine quality को कम कर रही है। टेक्नोलॉजी में आम तौर पर वही चीज़ें व्यापक होती हैं जिनका curriculum बनाना आसान होता है
Unity जैसे node-based editors को कई classes में समझाने के लिए structure बिल्कुल फिट बैठता है। इसके उलट raylib जैसे engines को एक दोपहर में समझा जा सकता है, इसलिए university level की raylib class बन पाना मुश्किल है। इसी वजह से bootcamp जैसे schools से ऐसे amateur developers निकलते हैं जो सिर्फ Unity/Unreal जानते हैं, companies Unity/Unreal talent hire करती हैं, और universities फिर वही पढ़ाती हैं—ऐसा cycle बन जाता है। यह Java की popularity वाले phenomenon जैसा भी है।
साथ ही, हर company की Unity project requirements अलग होती हैं, इसलिए Unity को किसी असंतुष्ट programmer की तरह नहीं, बल्कि customers से deal करने वाली for-profit company के रूप में engine को लगातार adjust करना पड़ता है, और अंततः वह Turbobloat बन जाता है। Half-Life और Morrowind engines एक अनोखी situation में बने थे, जहाँ passionate programmers को वे चीज़ें develop करने के लिए पैसे मिल रहे थे जिन्हें वे cool मानते थे; इसलिए professional game developers के लिए उपयुक्त न्यूनतम engine और बेहतरीन technology निकली।
यह project raylib और Unity के बीच कहीं लगता है। चिंता है कि amateur programmers को appeal करने के लिए यह कम पड़ सकता है, और छोटे engine चाहने वाले programmers के लिए शायद यह बहुत ज़्यादा काम कर रहा हो। उम्मीद है मैं गलत साबित होऊँ; performance और polish अच्छे दिखते हैं। Unity से थके हुए developers निश्चित रूप से हैं, और nostalgia का cycle 2000s की ओर बढ़ने के साथ Half-Life 2 से कम graphically complex games खेलने और बनाने की demand भी सच में है। web design और documentation का tone भी अच्छा है
दोनों को साथ design करने पर added features का actively इस्तेमाल किया जा सकता है, और जो features अच्छे से नहीं चलते उनसे बचा जा सकता है, या art style को ही engine के हिसाब से ढाला जा सकता है। Minecraft के pixelated, angular mobs engine के साथ अच्छी तरह fit होते हैं, लेकिन अगर उन्हें ज़्यादा refined बनाना शुरू करें, तो जब तक वे पर्याप्त polygons के साथ ठीक से render न होने लगें, वे Minecraft से भी ज़्यादा पुराने और awkward दिखने वाली uncanny valley में गिर जाते हैं
मुझे नहीं लगता कि लोग complexity पसंद करने वाले professors से गलत सीखकर Unity इस्तेमाल कर रहे हैं
Epic Games ने Fortnite के साथ जो किया, वही देख लीजिए। smooth चलने वाले competitive scene-centric game को Turbobloat graphics और skins के कारण खत्म कर दिया
turbo bloat की समस्या से पूरी तरह सहमत हूँ। आज की machines कहीं ज़्यादा powerful हैं, फिर भी ज़्यादातर programs पहले से धीमे महसूस होते हैं
project भी बेहद cool है और website design A+ है
Windows 98/2000/XP के समय ordinary hardware इस्तेमाल करने वाले के नज़रिए से, SSD वाले low-end modern laptop पर Windows 10/11/KDE/Gnome आदि चलाना—vscode या Slack जैसे bloated माने जाने वाले web apps चलाने पर भी—कहीं ज़्यादा responsive है
सोच रहा हूँ कि क्या इसका मतलब बस “बहुत bloated” है। site को और पढ़ने पर “hyperrealistic physics simulation” जैसे expressions भी दिखे, इसलिए लगता है कि आखिरकार इसका मतलब “बहुत ज़्यादा bloat” ही है
“ज़्यादातर Unity गेम, भड़कीले shaders, normal mapping और दूसरी तकनीकें इस्तेमाल करने के बावजूद, बहुत खराब दिखते हैं” — यह नज़रिया एक खास पीढ़ी के बीच धीरे-धीरे आम होता दिख रहा है
यह तय है कि किसी तरह की texture mapping तकनीक गायब हो गई है। Ikaruga का background ज़रूरत से ज़्यादा शानदार है, खासकर शुरुआती हिस्से का साधारण-सा जंगल effect। PS2 दौर के कुछ train simulator भी यह कर पाए थे।
हालांकि, अगर सूरज जैसा तेज़ directional light source किसी चमकीली object पर पड़े और player हिले, तो यह तरीका टूट जाता है। अगर environment धुंधला हो और dynamic objects बिल्कुल न हों, तो आधुनिक tricks को काफी हद तक bypass किया जा सकता है
मूल Silent Hill की setting असल में optimization tricks को सही ठहराने के लिए बनाई गई थी। स्क्रीन पर objects manage करना आसान हो, इसलिए “fog space” नाम की स्थायी धुंधली जगह रखी गई थी, लेकिन remake ने supernatural दिखने वाली fog के बजाय realistic fog बनाने में बहुत सारी processing बर्बाद कर दी
अच्छा दिखाने वाली art skills बिल्कुल गायब नहीं हुई हैं; वे बस बेहद असमान रूप से बंटी हुई हैं। अगर किसी team के पास अच्छे modelers, texture artists, animators और visual programming की क्षमता है, तो game Unreal में हो, Unity में हो या custom engine में—वह शानदार दिख सकता है
Super Mario Sunshine में GameCube जिन “sharp” shadows को render नहीं कर सकता था, उनके लिए असल में flat mesh इस्तेमाल हुआ था। Delfino Plaza में Shine Gate के पास awning के नीचे की shadow texture नहीं, बल्कि mesh है। वहीं जिस tiled plaza पर वह mesh shadow पड़ी है, वह इसलिए अच्छा दिखता है क्योंकि वहाँ एक विशाल texture नहीं, बल्कि दर्जनों 128x128px textures को सही तरीके से UV map किया गया है।
कोई modern game होता तो दो brick textures और उन्हें mix करने के लिए noise pattern इस्तेमाल करता, और तीनों 2048x2048px के होते; shadows ray tracing से sharp edges बनातीं। विडंबना यह है कि VRAM और bus speed बढ़ने के बावजूद हमने ज़्यादा textures के बजाय बड़े textures चुन लिए। normal mapping के साथ भी यही है: इसे ज़्यादा subdivided models के साथ इस्तेमाल करने के बजाय यह गलतफहमी है कि normal maps पुराने हो गए हैं और सारी details को सचमुच model करना ही technically advanced रास्ता है। कम angular sphere ठीक है, लेकिन sphere की हर दरार और खरोंच को सचमुच model करना बेवकूफी और compute की बर्बादी है
Factorio जैसे “2D” game में भी initial release, 1.0 और current version के बीच polishing का फर्क बहुत बड़ा है। modded game में भी यह फर्क साफ दिखता है; mod assets आम तौर पर “कामचलाऊ” होते हैं, लेकिन main game जितने polished नहीं दिखते
हाल ही में Half-Life 2 फिर से खेला, और high-resolution texture pack के बिना भी यह आज कितना शानदार दिखता है, देखकर हैरानी हुई
चमकीली surfaces भी ज़्यादातर बहुत ज़्यादा glossy नहीं हैं, जिससे मदद मिलती है। ये choices एक पुराने, कब्ज़े में लिए गए extreme dystopian world के साथ अच्छी तरह फिट होती हैं और believable लगती हैं, जबकि muted colors वाली textures पूरी चीज़ को एकजुट रखती हैं
Valve ने technical constraints के भीतर details डालने और उनसे अधिकतम निकालने पर resources लगाए, और 20 साल बाद भी यह cohesive और well-designed दिखता है
Godot में low poly game बनाने वाली एक छोटी team में काम करने के नाते, यह अच्छा लगा
“nodes से कुछ बनाते समय node GUI और code के बीच लगातार आना-जाना पड़ता है”, “mainstream engines में एक विशाल monolithic game editor होता है, और कोई भी feature इस्तेमाल करें, सब कुछ load होने तक 10 मिनट इंतज़ार करना पड़ता है” — ये बातें बहुत relate हुईं। Godot में भी मैं flashy features लगभग इस्तेमाल नहीं करता, फिर भी debug loop मुझे दूसरे environments में programming करने की तुलना में काफी धीमा लगा।
एक data file specification के इर्द-गिर्द कई editors के साथ काम करने का idea भी अच्छा है। integrated IDE कई developers के लिए merge conflicts बनाना आसान कर देता है, इसलिए ज़्यादा specific-purpose editors role-based developers को changes की scope और nature सीमित रखने में भी मदद कर सकते हैं। engine कैसे आगे बढ़ेगा, यह देखने की उत्सुकता है
कम performance वाले netbook से भी मैं अपना योगदान दे सका। मैंने C# की एक भी line पहले नहीं लिखी थी, लेकिन command line पर TDD छोड़ने का कोई इरादा नहीं था। मुझे पता चला कि यह संभव है और आखिरकार इसे काम करा लिया। सबको लगा मैं पागल हूँ, और sponsor के developer relations वाले भी कोई मदद नहीं कर पाए।
उस weekend की सबसे बड़ी friction अब भी यही थी कि सबसे अच्छे computer को भी उस कमबख्त Unity IDE को खोलने और फिर से खोलने में युगों जितना समय गंवाना पड़ता था। लोग जिन बेड़ियों को सह लेते हैं, वह हैरान करने वाला है
“Turbobloat” और engine के “bloated” होने की बात की गई है, और कुछ हद तक यह सही है। लेकिन यह बताना ठीक रहेगा कि इसका उनके लिए क्या मतलब है, किन features को वे bloat मानते हैं, और Tramway project से क्या हटाया गया है
उदाहरण के लिए, कुछ लोगों को RPG framework शामिल करना भी bloat लग सकता है, जबकि Tramway में वह मौजूद है
मुझे C++ का “केवल उसी चीज़ की कीमत चुकाओ जिसे इस्तेमाल करते हो” वाला सिद्धांत पसंद है
लिखा है कि यह “उन beginners के लिए framework इस्तेमाल करने का तरीका है जिन्हें C++ से डर लगता है या जो बस इसमें अच्छे नहीं हैं”; मैं दूसरी category में आता हूँ, और Getting Started पेज के लिए आभारी महसूस हुआ
चायदान दिखा, और जिन चीज़ों को मैं समझ नहीं पाऊँगा सोच रहा था, उन्हें समझ गया। अभी lunch break में सिर्फ 30 मिनट हैं, इसलिए tutorial पूरा करने का समय नहीं है, लेकिन इसे जारी रखने का मन हो गया—यह अच्छी तरह दिखाता है कि यह document कितना मज़ेदार और approachable है
क्या किसी को Design Patterns पेज मिला? यह 100% target वाला scoreboard है, और मुझे बहुत पसंद आया