प्लेम पर कयामत में लौ को कैसे लागू किया गया था


मेरे गेम इंजन ब्लैक बुक का एक पूरा अध्याय : DOOM DOOM कंसोल पोर्ट्स और उनके डेवलपर्स के सामने आने वाली चुनौतियों के बारे में है। 3DO में पूर्ण विफलता के बारे में आप लंबे समय तक बात कर सकते हैं, एफाइन टेक्सचर मैपिंग के कारण शनि की कठिनाइयों के बारे में और सुपर निंटेंडो के लिए रैंडी लिंडेन द्वारा किए गए अद्भुत "स्क्रैच से रिवर्स इंजीनियरिंग" के बारे में।

प्रारंभ में क्रैश [1] की ओर बढ़ते हुए, Playstation 1 (PSX) के लिए पोर्ट के डेवलपर्स बाद में पाठ्यक्रम बदलने और आलोचकों और बाजार के बीच सफल रहने वाले पोर्ट बनाने में सक्षम थे। अंतिम DOOM पीसी संस्करण के लिए तुलनीय पहला सच पोर्ट था। अल्फा सम्मिश्रण वाले रंग क्षेत्रों ने न केवल दृश्य गुणवत्ता में सुधार किया, बल्कि वांछित रंग की कुंजी को इंगित करके गेमप्ले में भी सुधार किया। PSX कंसोल के ऑडियो प्रोसेसिंग यूनिट के रीवरब इफेक्ट्स के लिए भी धन्यवाद, ध्वनि में सुधार किया गया है।

विकास टीम ने इस तरह के उच्च-गुणवत्ता वाले काम का प्रदर्शन किया कि इसमें अभी भी कुछ मुफ्त सीपीयू चक्र थे जो उन्होंने इंट्रो और गेमप्ले में एनिमेटेड आग उत्पन्न करने के लिए उपयोग करने का निर्णय लिया था। इसने मुझे इतना विस्मयकारी बना दिया कि मैंने यह पता लगाने का फैसला किया कि प्रभाव का एहसास कैसे हुआ। जब पहली खोजों ने कोई उत्तर नहीं दिया, तो मैं निष्पादन योग्य फ़ाइल को क्रैक करने के लिए एक MIPS पुस्तक से धूल उड़ाने की तैयारी कर रहा था, लेकिन सैमुअल विलारियल ने ट्विटर पर जवाब दिया कि उन्होंने निंटेंडो 64 [2] के लिए संस्करण का रिवर्स विकास पहले ही पूरा कर लिया है। यह मेरे लिए काफी था कि मैं इसे थोड़ा साफ करूं, सरल करूं और इसे अनुकूलित करूं।

इस क्लासिक डिमोसिन प्रभाव को फिर से देखना दिलचस्प था; यह अंतर्निहित विचार पहले जल तरंग के समान है, जिसे 90 के कई डेवलपर्स के कार्यक्रमों के अनिवार्य सेट में शामिल किया गया था। अग्नि का प्रभाव उस समय का एक जीवित गवाह बन गया जब ध्यान से चयनित रंग पैलेट का संयोजन और एक सरल चाल वांछित परिणाम प्राप्त करने का एकमात्र तरीका था।

मूल विचार




इसके मूल में, अग्नि प्रभाव एक सरल उन्नयन मानचित्र का उपयोग करता है। एक सरणी स्क्रीन का आकार 0 से 36 तक की सीमा में 37 मानों से भरा है। प्रत्येक मूल्य सफेद से काले रंग से जुड़ा है, और उनके बीच सड़क के साथ पीले, नारंगी और लाल रंग को पकड़ता है। विचार एक लौ कण के तापमान को अनुकरण करना है जो उगता है और धीरे-धीरे ठंडा होता है।


फ़्रेम बफ़र को पूरी तरह से काले (शून्य से भरा) के साथ नीचे (36) पर सफेद पिक्सल की एक सफेद लाइन के साथ आरंभीकृत किया जाता है, जो कि लौ का "स्रोत" है।


हर बार स्क्रीन अपडेट होने के बाद, "हीट" बढ़ जाता है। फ्रेम बफर में प्रत्येक पिक्सेल के लिए, एक नया मान गणना की जाती है। प्रत्येक पिक्सेल को सीधे उसके नीचे स्थित मूल्य को ध्यान में रखते हुए अद्यतन किया जाता है। कोड में, निचले बाएँ कोने में सरणी का शून्य सूचकांक है, और ऊपरी दाएँ कोने में सूचकांक FIRE_HEIGHT * FIRE_WIDTH - 1 है।

function doFire() { for(x=0 ; x < FIRE_WIDTH; x++) { for (y = 1; y < FIRE_HEIGHT; y++) { spreadFire(y * FIRE_WIDTH + x); } } } function spreadFire(src) { firePixels[src - FIRE_WIDTH] = firePixels[src] - 1; } 

ध्यान दें कि लाइन 0 कभी भी अपडेट नहीं की जाती है (y पर पुनरावृत्ति 0 से शुरू नहीं होती है, लेकिन 1 के साथ होती है)। यह शून्य-भरा लाइन आग का "जनरेटर" है। रैखिक शीतलन (- = 1) के साथ एक सरल संस्करण हमें एक उबाऊ वर्दी उत्पादन देता है।


हम फैलफायर () फ़ंक्शन को थोड़ा संशोधित कर सकते हैं और गर्मी मानों की क्षय दर को संशोधित कर सकते हैं। यादृच्छिकता जोड़ना एक अच्छा फिट है।

  function spreadFire(src) { var rand = Math.round(Math.random() * 3.0) & 3; firePixels[src - FIRE_WIDTH ] = pixel - (rand & 1); } 


यह पहले से ही बेहतर है। भ्रम को पूर्ण करने के लिए, कोई व्यक्ति न केवल यादृच्छिक रूप से वितरित कर सकता है, बल्कि बाएं और दाएं भी।

  function spreadFire(src) { var rand = Math.round(Math.random() * 3.0) & 3; var dst = src - rand + 1; firePixels[dst - FIRE_WIDTH ] = firePixels[src] - (rand & 1); } 


[नोट। लेन: Youtube वीडियो को बहुत बेहतर बनाता है, मूल लेख में जावास्क्रिप्ट पर डेमो देखना या स्पॉइलर के नीचे GIF को खोलना बेहतर है।]

GIF लौ एनिमेशन (23 मेगाबाइट)
छवि

देखा! ध्यान दें कि लौ प्रसार प्रक्रिया को बदलकर, हवा को भी नकली बनाया जा सकता है। मैं इसे उन पाठकों के लिए एक अभ्यास के रूप में छोड़ दूंगा जो लेख पढ़ने में कामयाब रहे हैं।

पूर्ण स्रोत कोड




शमूएल का संस्करण (तार्किक रूप से) एक कोडांतरक संस्करण की तरह दिखता था । यदि आप इसे देखना चाहते हैं, तो एक साफ और सरल संस्करण है।

संदर्भ सामग्री




[१] स्रोत: गेम इंजन ब्लैक बुक में विस्तृत कहानी: डीओएमएम

[२] स्रोत: २५ मार्च २०१ March ट्विटर पोस्ट

Source: https://habr.com/ru/post/hi435122/


All Articles