मैं एक बड़ी जगह की पृष्ठभूमि कैसे बना सकता हूं जो दोहराए जाने योग्य तरीके से दोहराती है


14

मैं एक बड़े स्थान की पृष्ठभूमि कैसे बना सकता हूं जो एक आरटीएस गेम के लिए दोहराता है। मैं जटिल नेबुला और धूल क्षेत्र भी रखना चाहता हूं, लेकिन चूंकि इकाइयों में यह पता लगाने के लिए बहुत जगह होगी कि मेरे पास 12000000px जेपीईजी द्वारा 120000px नहीं हो सकता है, इसलिए मैं छवि को दोहराना चाहता हूं, लेकिन खंडों के बीच परिवर्तन लाइनें नहीं हैं।

मैं वेब GL कैनवास के लिए Microsoft द्वारा बेबीलोन फ्रेमवर्क के साथ इसका उपयोग कर रहा हूं


8
क्या आपने किसी छवि के बजाय सिर्फ एक प्रक्रियात्मक shader का उपयोग करने पर विचार किया? एक साधारण वेब खोज इसको
LeFauve

@LeFauve वास्तव में मैं इस विचार बहुत पसंद है। जब आप उस पर वापस यात्रा करते हैं तो क्या खेल पिछली बार उत्पन्न सामान को याद करता है? मैं इसे ब्राउज़र मेमोरी में कैसे प्रबंधित कर सकता हूं?
SuperUberDuper

@SuperUberDuper: जब तक यह एक नियतात्मक और स्थानीय तरीके से उत्पन्न होता है, तब तक कुछ भी "याद" करने की कोई आवश्यकता नहीं है। जब भी डेटा की जरूरत हो, बस उसे फिर से तैयार करें।
आर .. गिटहब स्टॉप हेल्पिंग ICE

@LeFauve: यह वास्तव में एक जवाब होना चाहिए। यह दिए गए उत्तरों से बहुत बेहतर है।
आर .. गिटहब स्टॉप हेल्पिंग ICE

@ आर .. मैं सहमत हूं, वेबलॉग में इसके लिए कुछ कोड रखना भी अच्छा होगा;)
सुपरब्यूपरड्यूपर

जवाबों:


19
  1. लंबन स्क्रॉलिंग का उपयोग करें। कई पृष्ठभूमि परतें हैं जो मुख्य दृष्टिकोण की गति के विभिन्न अंशों के साथ स्क्रॉल करते हैं। निचली परत, इसे धीमा करता है। यह केवल गहराई का भ्रम प्रदान करने का एक शानदार तरीका नहीं है, यह पृष्ठभूमि को कम दोहरावदार भी बनाता है क्योंकि विभिन्न परतों पर ऑब्जेक्ट अलग-अलग रचनाओं में दिखाई देंगे, क्योंकि परतें सिंक में नहीं हैं।

  2. प्रक्रियात्मक रूप से अपनी पृष्ठभूमि बनाएं। एक विशाल पृष्ठभूमि ग्राफिक के बजाय, कई अलग-अलग छोटे तत्व हैं और उन सभी को गेम की दुनिया में यादृच्छिक रूप से कई बार रखें।

और वैसे: JPEG का उपयोग न करें जब आप इससे बच सकते हैं। यह एक हानिपूर्ण प्रारूप है जो हर बार आपके द्वारा संशोधित और सहेजने के लिए अधिक गुणवत्ता खो देता है, यह फ़ोटोग्राफ़ी के लिए भारी अनुकूलित है और पारदर्शिता का समर्थन नहीं करता है। PNG जैसे अल्फा चैनल के साथ दोषरहित प्रारूप का उपयोग करें। एकमात्र अच्छा कारण तब होगा जब आपकी स्रोत छवि केवल JPEG में उपलब्ध हो (NASA ने बहुत सारे अच्छे खगोल चित्र प्रकाशित किए जो सभी सार्वजनिक डोमेन में हैं) और आप उन पर कोई संशोधन नहीं करना चाहते हैं।


7

2 डी गेम के लिए अनंत पृष्ठभूमि बनाने का एक तरीका निम्नलिखित है:

  1. एक ग्राफिक्स संपादक सॉफ्टवेयर (मैक के लिए iDraw की तरह) का उपयोग करते हुए एक छवि बनाने के एक है कि अपनी पृष्ठभूमि के एक हिस्से का प्रतिनिधित्व करता है। इस छवि का एक सीमित आकार होना चाहिए।
  2. A को डुप्लिकेट करें और इसे Y अक्ष पर मिरर करें, यह B है
  3. अब पेस्ट (क्षैतिज रूप से) ए और बी को टॉगल करें, यह एबी है
  4. अंत में अपने खेल में छवि एबी आयात करें और इसे कोड के माध्यम से क्षैतिज रूप से दोहराएं जितनी बार आप चाहते हैं।

उम्मीद है की यह मदद करेगा।


2
सीमित आकार, लेकिन बहुत सीमित नहीं । टाइल जितनी छोटी होगी, पुनरावृत्ति उतनी ही स्पष्ट होगी।
काओ

1
या, मिरर करने के बजाय, फ़ोटोशॉप में ऑफसेट फ़िल्टर का उपयोग करें और सीमाओं पर क्लोन करें, या बस GIMP के "मेक सीमलेस" फ़िल्टर (फ़िल्टर → मैप → सीमलेस) का उपयोग करें।
वचर्जिन

5

परतें अच्छी तरह से काम करती हैं।

यहाँ कुछ गणित हैं:

मान लीजिए कि आपके पास एक रेलवे ट्रैक है जो खराब तरीके से बनाया गया है जैसे कि __ __उनके बीच की खाई को नोटिस करता है। जब पहिया उनके ऊपर लुढ़कता है तो यह एक छोटा सा पायदान बनाता है।

यदि ट्रैक की लंबाई है lऔर पहिया में त्रिज्या है, rतो पहिया की परिधि 2pi rहै, ration=l/(2pi r)यदि अनुपात 10.25 है, तो पहिया को प्रत्येक तिमाही में एक पायदान मिलेगा क्योंकि यह एक लंबी सवारी करता है।

यह सबसे आसान तरीका है जो मैं रिक्त स्थान को समझाने के बारे में सोच सकता हूं।

तो मान लीजिए कि आपके पास दो चित्र हैं, यदि इस तिमाही अनुपात में आपको 4-चरण पैटर्न मिलेगा, तो यह 4 टाइलों के बाद दोहराएगा। मान लीजिए कि आपके पास m और n चरणों के साथ 1 मुख्य पृष्ठभूमि और 2 ओवरले हैं। फिर एम * एन टाइल्स के बाद पैटर्न दोहराएगा।

हालांकि यह बहुत मायने नहीं रखता है कि पैटर्न सबसे अच्छा लगेगा यदि संख्याएं सह-प्रधान हैं, तो यह सबसे बड़ा सामान्य विभाजक है। 1. उदाहरण के लिए, हमारे पास चरण 6 में से कुछ है और चरण 4 का कुछ है, हर दूसरे चरण में ये "लाइन अप" होंगे। " एक अर्थ में।

आप बहुत कम प्रयासों के साथ "अद्वितीय" सामान बनाने के लिए इस तकनीक (विशेष रूप से कणों और सामान के साथ) का उपयोग कर सकते हैं।

ट्रेन के पहिये पर वापस जाएँ, यदि अनुपात अपरिमेय है, तो पहिये पहिया को कवर कर देंगे! लेकिन यह वास्तव में कोई बात नहीं है।


5

यहाँ एक और विचार है जो याद आ रहा है:

लंबी दूरी की पृष्ठभूमि के मामले में, आकाश बक्से की तरह, लंबन परतें वास्तव में अच्छा महसूस नहीं करती हैं। उदाहरण के लिए सितारों के बारे में सोचें, जब पृथ्वी पर चलते हैं, या रात के दौरान भी बेहतर होते हैं, तो सभी सितारे एक साथ चलते हैं, हालांकि हम जानते हैं कि वे सैकड़ों हैं या विचार एक दूसरे से प्रकाश वर्ष दूर हैं। बात यह है कि वे अपनी दूरियों को नोटिस करने के लिए हमसे बहुत दूर हैं। कहा कि हम अभी भी एक बहुत बड़ी बनावट (120k * 120k कहते हैं) चाहते हैं, हमारी सीमित कम्प्यूटेशनल शक्ति (जो 8k * 8k को अधिक से अधिक संभाल सकती है) के साथ तैयार की जाए। कई लंबन परतों का उपयोग करने की तरह, आपको अलग-अलग बनावट, प्रत्येक को विभिन्न प्रकार के विवरणों के साथ बनाना चाहिए। उदाहरण के लिए, एक आकाशगंगाओं का प्रतिनिधित्व करता है, एक अन्य सितारों का एक समूह है, आदि लेकिन इस बार उन्हें अलग-अलग गति के साथ स्थानांतरित करने के बजाय, उन्हें अपने आकार में भिन्न होना चाहिए। यहाँ एक उदाहरण है: 3 बनावट का उपयोग करने पर विचार करें, एक 2048 * 2048 है, दूसरा एक 729 * 729 है और तीसरा एक 625 * 625 है। चूँकि ये संख्याएँ एक-दूसरे के साथ मैथुन करते हैं, इन 3 बनावटों को 3 परतों में मिलाते समय, एक ही चीज़ को देखने के लिए मूल से lcm (2048,729,625) = 764M पिक्सेल को स्थानांतरित करना चाहिए, जो थोड़े अनन्तता की तरह महसूस करता है। वास्तव में आप अन्य परतों को जोड़ सकते हैं या प्रत्येक बनावट के आकार को बदल सकते हैं और आप हमेशा एक परिणाम के रूप में बड़े होंगेकम से कम कई बनावट आकार।


2
यह और @ एलेकटेल का उत्तर सिकाडा सिद्धांत नामक एक तकनीक का वर्णन करता है । यह बहुत ही कम संसाधनों के साथ गैर यादृच्छिक, बहुत बड़ी गैर दोहराई जाने वाली पृष्ठभूमि बनाने का एक आसान तरीका है।
रेयान

4

यह एक प्रक्रियात्मक पिक्सेल shader के लिए एक नौकरी लगती है।

एक छवि का उपयोग करने पर लाभ हैं:

  • आपको विशाल बिटमैप प्रदान करने की आवश्यकता नहीं है
  • यह प्रक्रियात्मक है, इसलिए इसे एक निश्चित छवि को दोहराना नहीं है (यह असीम रूप से भिन्न हो सकती है)
  • यदि आप एक लंबन प्रभाव चाहते हैं, तो आप हजारों विमानों का अनुकरण कर सकते हैं, जो छवियों का उपयोग करके अव्यावहारिक होगा
  • आप गतिशील प्रकाश व्यवस्था की तरह, बहुत अग्रिम प्रभाव कर सकते हैं
  • अधिकांश प्रसंस्करण आपके GPU द्वारा किया जाता है, जो आपके खेल के अन्य भागों के लिए सीपीयू को मुक्त करता है

एक साधारण वेब खोज इस shader को http://casual-effects.blogspot.com.au/2013/08/starfield-shader.html पर लाती है जो आप जैसा चाहते हैं वैसा ही दिखता है।

मैं WebGL का विशेषज्ञ नहीं हूं, लेकिन इस पृष्ठ के अनुसार , ऐसा लगता है कि यह नियमित GLSL भाषा का उपयोग करता है (यह ग्राफिक कार्ड द्वारा प्रोग्राम शेड्स के लिए प्रयुक्त सी-लाइक भाषा है)। इसका मतलब है कि आपके पास काम करने के लिए शायद कोई बदलाव नहीं होगा।

हालाँकि, आप यह समझने के लिए कि यह कैसे काम करता है, एक और बुनियादी shader के साथ शुरू करने की कोशिश कर सकता है।

यह ब्लॉग पेज WebGL में एक शेडर लागू करने के सभी चरणों को सूचीबद्ध करता है। यह शुरू करने के लिए एक अच्छी जगह है।

अद्भुत shader उदाहरण खोजने के लिए एक और अच्छी जगह https://www.shadertoy.com/ है


बहुत बहुत धन्यवाद !!! मेरे पास अब जवाब देने के लिए कठिन समय है!
सुपरयूपरड्यूपर

2
ठीक है, अगर आपके पास शेडर्स देने की कोशिश करने का मौका है, तो निश्चित रूप से कुछ ऐसा है जो लंबे समय तक उपयोगी होगा यदि आप अच्छे दिखने वाले खेल करना चाहते हैं। पहला कदम थोड़ा ऊँचा है (मुझे अपना पहला शेडर बनाने में 2 सप्ताह का समय लगा, जिस तरह से मैं चाहता था) लेकिन यह लंबे समय तक इसके लायक था।
LeFauve

2

आप अपने बड़े jpeg को एक छोटे सेगमेंट में काट सकते हैं और उन्हें (दृश्य भाग) रख सकते हैं, आपको हर समय इसे मेमोरी में स्टोर करने की भी आवश्यकता नहीं है।

और एक पुराने खेल की तरह कुछ 'टाइल' दोहरा सकते हैं। एनईएस कंसोल के लिए थॉट्स आम समाधान था, जो कि हार्डवेयर द्वारा भी समर्थित था।


1
यह बेहद मुश्किल है, अगर असंभव नहीं है, तो जेपीईजी को छोटे जेपीईजी में कटौती करने के लिए जो बिना नुकसान के संपीड़न के दृश्य glitches के बिना सिलाई करेगा। यदि आप टाइलों के लिए जाते हैं, तो आपको पीएनजी की तरह दोषरहित संपीड़न फ़ाइल प्रारूप का उपयोग करना होगा।
लेफॉवे

1
मैं मानता हूं कि पीएनजी बेहतर हो सकता है, दूसरे हाथ में, जेपीईजी बनावट 3 डी ग्राफिक्स में आम है, और अधिक महत्वपूर्ण जेपीईजी 16x16 ब्लॉकों का उपयोग कोडिंग के लिए करते हैं ।wikipedia.org/wiki/Macroblock सही कटौती नहीं देखी जा सकती है जो सबसे कम में कोडिंग नहीं करते हैं मूल्यांकन करें।
एलेक्सी शस्टाकोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.