संपादित करें: यह केवल मेरे स्वयं के सीखने के अनुभव के लिए है, यह प्रदर्शन कारणों से नहीं है कि मैं यह प्रश्न पूछूं।
यह एक Minecraft जैसे इलाके इंजन के संबंध में है। मैं विखंडू में खंडों (16x256x16 ब्लॉकों को एक चंक) में संग्रहीत करता हूं। जब मैं एक चंक उत्पन्न करता हूं, तो मैं इलाके और जगह की वस्तुओं को सेट करने के लिए कई प्रक्रियात्मक तकनीकों का उपयोग करता हूं। उत्पन्न करते समय, मैं पूर्ण चंक (ठोस या नहीं) के लिए एक 1D सरणी और ठोस ब्लॉकों का एक अलग 1D सरणी रखता हूं।
पीढ़ी के बाद, मैं अपने पड़ोसियों की जाँच करने वाले ठोस ब्लॉकों के माध्यम से पुनरावृत्ति करता हूं इसलिए मैं केवल ऐसे ब्लॉक चेहरे उत्पन्न करता हूं जिनके पास ठोस पड़ोसी नहीं हैं। मैं स्टोर करता हूं जो अपनी सूची में उत्पन्न होता है (यह 6 सूचियां हैं, एक प्रति संभव चेहरा / सामान्य)। जब मैं एक चंक को प्रस्तुत करता हूं, तो मैं सभी सूचियों को कैमरे के वर्तमान चंक में रेंडर करता हूं और केवल उन सभी सूचियों का सामना करता हूं, जो अन्य सभी विखंडू में होती हैं। मैं एक बफर में सभी 6 सूचियों को संग्रहीत करके ऐसा करता हूं, फिर मैं बस वही बदलता हूं जो मैं आकर्षित करता हूं।
इस छोटे से shader चाल एंड्रयू रसेल के साथ एक 2D एटलस का उपयोग करने का सुझाव दिया, मैं समान चेहरे को एक साथ पूरी तरह से मर्ज करना चाहता हूं। यही है, यदि वे एक ही सूची (समान सामान्य) में हैं, एक-दूसरे से सटे हुए हैं, एक ही प्रकाश स्तर है, आदि। मुझे पता है कि मैं अभी भी आयतों के साथ समाप्त हो जाऊंगा, लेकिन यह आसानी से मेरे कोने की गिनती को 50% तक कम कर सकता है या बेहतर अगर मेरा अनुमान सही है।
मेरी धारणा 6 अक्षों में से प्रत्येक के आधार पर छांटनी होगी जो वे आराम करते हैं, फिर अन्य दो कुल्हाड़ियों द्वारा (एक ब्लॉक के शीर्ष के लिए सूची को वाई मान, फिर एक्स, फिर जेड) द्वारा क्रमबद्ध किया जाएगा।
इस अकेले के साथ, मैं चेहरे के स्ट्रिप्स को आसानी से मर्ज कर सकता था, लेकिन जब संभव हो तो मैं सिर्फ स्ट्रिप्स को एक साथ विलय करने के लिए देख रहा हूं। मैं इस लालची जाल एल्गोरिथ्म पर पढ़ा है, लेकिन मुझे इसे समझने में बहुत परेशानी हो रही है।
तो, मेरा सवाल: वर्णित के रूप में चेहरे का विलय करने के लिए (यह देखते हुए कि क्या यह गतिशील इलाके / प्रकाश व्यवस्था के लिए एक बुरा विचार है), वहाँ शायद एक एल्गोरिथ्म है जो लागू करने के लिए सरल है? मैं भी बहुत खुशी से एक उत्तर को स्वीकार करता हूं जो बहुत सरल तरीके से (एक लिंक या स्पष्टीकरण) में लालची एल्गोरिथ्म के माध्यम से मुझे चलता है।
अगर इसे लागू करना आसान है या भले ही यह केवल स्ट्रिप्स करने की तुलना में थोड़ा बेहतर है, तो मुझे मामूली प्रदर्शन में कमी नहीं आती है। मुझे चिंता है कि अधिकांश एल्गोरिदम क्वाड्स के बजाय त्रिकोणों पर ध्यान केंद्रित करते हैं और 2 डी एटलस का उपयोग करते हुए जिस तरह से मैं कर रहा हूं, मुझे नहीं पता कि मैं अपने वर्तमान कौशल के आधार पर कुछ त्रिकोण को लागू कर सकता हूं।
पुनश्च: मैं पहले से ही चंक प्रति कुंठित करता हूं और जैसा कि वर्णित किया गया है, मैं भी ठोस ब्लॉकों के बीच चेहरे को ढंकता हूं। मैं अभी तक अशक्त नहीं है और कभी नहीं हो सकता।
* संपादित करें: मैंने अपनी छोटी तकनीक को लागू किया है, जिसमें शायद एक नाम है, लेकिन मैं अपनी 6 सूचियों के माध्यम से जाता हूं, जो कि वे कुल्हाड़ियों द्वारा छांटे जाते हैं, जिन पर वे आराम करते हैं, इसके बाद ब्लॉक प्रकार, और फिर प्रकाश स्तर द्वारा। मैं उनके माध्यम से पुनरावृत्ति करता हूं, जैसा कि मैं जाता हूं, नई आयतें बनाता हूं और उन्हें एक साथ विकसित करता हूं (एक निश्चित अक्ष की ओर एक भारी पूर्वाग्रह के साथ)। यह निश्चित रूप से इष्टतम नहीं है, लेकिन यह वास्तव में काफी तेज है और यह औसतन 50% के करीब मेरी शीर्ष गणना को कम करता है। Byte56 की टिप्पणी एक कोठरी है जो मैं एक वास्तविक उत्तर के बारे में सोचता हूं, लेकिन मैं उस उत्तर / इनाम के लिए चयन नहीं कर सकता।
यहाँ मेरा तेज़ और सरल तरीका है जो मैं इस समस्या को संभाल रहा हूँ किसी भी अनुकूलन के बिना पूर्ण प्रारंभिक इलाके का निर्माण। दिए गए सभी चौकों को एक ही छवि, प्रकाश स्तर, सामान्य, आदि मानते हैं। प्रत्येक रंग एक अलग क्वाड है जिसे मैं प्रस्तुत करता हूं। मेरी सूचियों के साथ वे जिस तरह से हैं, यह एक बहुत आसान / तेज़ तरीका है।