एक Minecraftian दुनिया में प्रकाश व्यवस्था


10

Minecraft एक ऐसा खेल है जो काफी हद तक एक ऊंचाई पर आधारित है और दुनिया को रोशनी से भर देने के लिए उस हीगेटमैप की जानकारी का उपयोग करता है। मेरी समझ से ऊंचाई में उच्चतम बिंदु सूरज की रोशनी से प्रभावित क्षेत्र का अंत है। ऊपर की सब कुछ जो सूरज की रोशनी से जलाया जाता है, उसके नीचे सब कुछ बस 8 ब्लॉकों के त्रिज्या में पास के प्रकाश से प्रभावित होता है।

इस प्रकार यदि आपके पास अपनी दुनिया के शीर्ष पर एक तैरता द्वीप है, तो नीचे दी गई हर चीज को एक गुफा के रूप में देखा जाएगा। जब दो रोशनी एक ही बिंदु को प्रभावित करती हैं तो उज्जवल प्रकाश जीतता है (उस बारे में अनिश्चित)।

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

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

3 डी ग्राफिक्स की मेरी अभी भी सीमित समझ से दुनिया भर में मिनीक्राफ्ट की तरह प्रकाश करना सबसे बड़ा मुद्दा नहीं होना चाहिए। आप समस्या से कैसे निपटेंगे?

मुझे लगता है कि एक voxel दुनिया में प्रकाश व्यवस्था के लिए बुनियादी आवश्यकताएं होंगी

  1. तेजी से अपडेट करें कि यह एक फ्रेम में हो सकता है। एक ग्राफिक्स डिवाइस में प्रकाश व्यवस्था करने में सक्षम हो सकता है और परिवर्तित प्रकाश जानकारी को मुख्य रैम पर डाउनलोड कर सकता है।
  2. मुख्य खेल तर्क के लिए प्रकाश की जानकारी जल्दी से उपलब्ध होनी चाहिए ताकि पूरी तरह से ग्राफिक्स डिवाइस पर आधारित न हो: तर्क: प्रकाश घास के विकास को प्रभावित करता है, राक्षसों की स्पॉनिंग आदि।
  3. लाइट अपडेट को एक स्थान पर स्थानीय होना चाहिए या कुछ अन्य सीमाएं होनी चाहिए ताकि किसी को पूरी दुनिया को न छुड़ाना पड़े जो आकार में बहुत बड़ा हो।

मुख्य विचार यह होगा कि प्रकाश अपडेट तेजी से किए जाएं, जरूरी नहीं कि यह अधिक सुंदर हो। सामान्य प्रकाश प्रतिपादन प्रदर्शन में सुधार के लिए एक SSAO को आसानी से जोड़ा जा सकता है जिसके परिणामस्वरूप बहुत अच्छे संसार बनने चाहिए।

जवाबों:


7

Minecraft में प्रकाश की गणना अतुल्यकालिक रूप से की जाती है और इसे ज्यामिति में बेक किया जाता है। यह realtime में नहीं किया जाता है।

प्रत्येक वॉक्सेल उस वॉक्सेल के लिए प्रकाश व्यवस्था करता है, संभवतः एक बाइट (या 2, पायदान दिन और रात के चक्र को संभव बनाने के लिए एक स्तरित दृष्टिकोण का उपयोग करता है)। प्रकाश के केवल 16 स्तर हैं। दुनिया को रोशन करने के लिए, Minecraft 2 पास करता है। एक सूर्य के प्रकाश के लिए, और दूसरा प्रकाश को गुफाओं में फैलाने या भरने के लिए। प्रकाश व्यवस्था स्थानीयकृत है क्योंकि कोई भी प्रकाश स्रोत अधिकतम 16 खंडों पर ही अपनी रोशनी फैला सकता है। पानी और लावा लगभग एक ही तरह से काम करता है।

अधिक जानकारी उनके ब्लॉग पर उपलब्ध है: http://notch.tumblr.com/post/434902871/per-request-this-is-how-the-new-lighting-will-work


मुझे पता है। मुझे लगता है कि मैंने ऊपर लिखा है (चमक 4 बिट रिज़ॉल्यूशन घटा)।
अरमान रौनाकर

1

क्या आप अपने परिणामों को GPU रेंडर टू टेक्सचर और डबल-बफर का उपयोग नहीं कर सकते हैं, ताकि आपके पास हमेशा प्रत्येक फ़्रेम को पढ़ने-वापस करने के लिए उपलब्ध प्रकाश की जानकारी उपलब्ध हो?

आप प्रकाश व्यवस्था के लिए इस डेटा को कैसे व्यवस्थित करेंगे, यह पूरी तरह से आप पर निर्भर करता है, लेकिन मैं यह नहीं देखता कि यह जांच का पहला विकल्प क्यों नहीं होना चाहिए अगर आप जो करना चाहते हैं वह आपके प्रकाश एल्गोरिथ्म की गति में सुधार है ..?


मैं बिल्कुल यहीं सोच रहा था। अधिकांश सीपीयू के विपरीत बहुत सारे जीपीयू, इस तरह के बड़े पैमाने पर समानांतर कम्प्यूटेशनल अभ्यास के लिए डिज़ाइन किए गए हैं।
पीटर्स

1

वास्तविक समय प्रतिपादन लोगों को Minecraft के साथ एक प्रेम संबंध है। इस बारे में कुछ टिप्पणी की गई थी कि कैसे उन्होंने अभी तक प्रकाश का पता नहीं लगाया है .. लेकिन आप आगे के घटनाक्रम / लिंक के लिए बने रहना चाहते हैं।

http://www.realtimerendering.com/blog/?s=minecraft

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.