स्तरित अल्फा quads का उपयोग कर जमीन कोहरे की उपयुक्तता?


16

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

वैकल्पिक रूप से, मुख्य रूप से shader- आधारित दृष्टिकोण इसके बजाय ग्राउंड फॉग सब्सट्रेट में दृश्य दूरी के कार्य के रूप में घनत्व की गणना करेगा, और उस पर आधारित टुकड़े के मूल्य को आउटपुट करेगा।

प्रदर्शन-परीक्षण के प्रत्येक दृष्टिकोण के बिना , मैं दूसरों के अनुभवों (अटकलें नहीं!) को सुनने के लिए सबसे पहले चाहूंगा कि किस प्रकार के प्रदर्शन से स्तरित अल्फा बनावट दृष्टिकोण पर प्रभाव पड़ता है। मैं विशेष रूप से ओवरड्रा के बार-बार उद्धृत प्रभावों के कारण पूछता हूं (यह सुनिश्चित नहीं है कि आपके औसत डेस्कटॉप सिस्टम को कैसे भरा जाए)। इस दृष्टिकोण का उपयोग करने वाले खेलों की एक सूची, विशेष रूप से पुराने खेल, बेहद उपयोगी होंगे: यदि यह पूर्व DX9 / OpenGL2 हार्डवेयर पर व्यवहार्य था, तो यह मेरे लिए ठीक काम करने की संभावना है।

इस तरह के प्रभाव के संबंध में एक बड़ा सवाल यह है:

यहाँ छवि विवरण दर्ज करें

(छवि का श्रेय lume की lume.com को जाता है)

ध्यान दें कि ऊर्ध्वाधर कोहरे का क्रम कैसे निरंतर / सुचारू है। OTOH, बनावट वाले क्वाड लेयर्स का उपयोग करते हुए, मैं केवल यह मान सकता हूं कि जब उनके माध्यम से चलना होगा तो परतें स्पष्ट रूप से स्पष्ट होंगी - वे जितनी अधिक विरल थीं, उतना ही स्पष्ट होगा। यह उस विपरीत है जहां कोहरे के विमानों को खिलाड़ी को हर फ्रेम का सामना करने के लिए गठबंधन किया जाता है, जहां यह मोटे तौर पर बहुत कम स्पष्ट होगा।


1
आप क्यों चाहते हैं चाहते हैं इस के लिए अल्फा ट्रैक्टर परतों का उपयोग करने के लिए? "शेडर-हैवी अप्रोच" केवल अधिक सटीक नहीं है, यह धीमी गति से होने के लिए भी बिल्कुल ज्ञात नहीं है ।
निकोल बोलस

1
@StephanvandenHeuvel ज़रूर, लेकिन यह दृश्य-अंतरिक्ष-संरेखित, दूरी-आधारित कोहरा है। जमीनी-संरेखित कोहरा नहीं। सही बात?
इंजीनियर

1
@NickWiggill हाँ आप सही हैं।
स्टीफन वैन डेन हेयुवेल

1
IIRC, Wii ने अपनी (अर्ध-) फिक्स्ड पाइपलाइन में जमीन-संरेखित कोहरा था। जाहिरा तौर पर glFogCoordविरासत में विस्तार OpenGL के रूप में अच्छी तरह से करने की अनुमति दी । हालांकि यह सीमित लगता है: यह या तो ग्राउंड-आधारित है या दूरी-आधारित है।
लॉरेंट कौविदो

1
क्वाक 3 ने कुछ ऐसा ही किया, एक निश्चित-पाइपलाइन दृष्टिकोण का उपयोग करके, जिसने GL1.1 के साथ काम किया। मुझे बड़ी चिंता यह है कि भराव / ओवरड्र बुरी तरह से ढेर हो सकता है, लेकिन यह शायद Q3 स्रोत कोड डाउनलोड करने और उनके कार्यान्वयन की समीक्षा करने के लायक है; आप वास्तव में ऐसा ही नहीं कर सकते हैं लेकिन कम से कम यह निर्णय लेने में आपकी मदद कर सकता है।
मैक्सिमस मिनिमस

जवाबों:


15

जब से आपने अनुभव मांगे हैं, यहाँ मेरे हैं।

उन दिनों में जब मैं PS2 गेम की प्रोग्रामिंग कर रहा था, "लेयर्ड अल्फा क्वाड्स" दृष्टिकोण एक ऐसा तरीका था जिसे हम अक्सर कोहरे को लागू करते थे। कभी-कभी ग्राउंड कोहरे के रूप में, लेकिन पूर्ण स्क्रीन कोहरे के रूप में अधिक सामान्यतः। और यह दोनों ही मामलों में ठीक काम किया। तो हाँ, यह पूर्व-टुकड़े-छायादार दिनों में व्यवहार्य था।

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

PS2 पर, हम आमतौर पर तीन और पांच परतों के बीच कहीं बर्दाश्त कर सकते थे। जो निश्चित रूप से आपके सामने तैरती कोहरे की "दीवारों" की तरह दिखती थी। इससे अधिक और भरण दर ने हमारे फ्रेम दर को मारना शुरू कर दिया।

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

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

लेकिन मान लेते हैं कि हम इस ग्राउंड फॉग को करने के लिए चौड़े, स्क्रीन-फेसिंग क्वैड्स का उपयोग कर रहे हैं और कुछ गणना करते हैं कि कैसे इस विधि का उपयोग करके फ़्लैट ग्राउंड पर सीधे फ़ॉगिंग का उपयोग किया जा सकता है, जिसमें कैमरा सीधा आगे दिखता है - यही हमारी आदर्श स्थिति है । मान लें कि एचडी रिज़ॉल्यूशन: 1920x1080, जो हमारे क्षितिज को स्कैनलाइन 540 पर रखता है। आइए यह भी मान लें कि हमारे पास क्षितिज के लिए सभी तरह की दृश्यता है (यानी, यह मानते हुए कि आपके पास क्षितिज तक पहुँचने से पहले पूर्ण अस्पष्टता नहीं है)। एक कोहरे की शुरुआत के साथ और प्रत्येक स्कैनलाइन पर एक रुकने के क्रम में (चिकनी कोहरे को पाने के लिए), हमें (540 * 2 ==) 1080 कोहरे की जरूरत है। इन 1080 कोहरे में से प्रत्येक स्क्रीन के पूरे क्षैतिज विस्तार को कवर करेगा,

चलो कम अनुमान लगाते हैं, और कहते हैं कि औसतन, एक कोहरे का विमान लगभग 300 पंक्तियों की पिक्सेल को कवर करेगा। निकटतम वाले कम कवर करेंगे, सबसे पीछे वाले कवर कम होंगे, बीच की पंक्तियां बहुत अधिक कवर होंगी।

उस अनुमान के साथ, हमें औसत कोहरे वाले क्वाड द्वारा (1920x300 ==) 576,000 पिक्सेल छुआ जा रहा है। कुल मिलाकर, यह (576,000 * 1080 ==) 622,080,000 पिक्सल कुल "पारदर्शी कोहरे के माध्यम से पारभासी ज्यामिति के बहुत सारे प्रभाव" के माध्यम से छुआ जा रहा है। और यह संख्या उच्च रिज़ॉल्यूशन पर चलने वाले लोगों के लिए बढ़ जाएगी। और क्या अधिक है, हम z- बफर के खिलाफ एक ही संख्या में परीक्षण प्राप्त करते हैं, और लगभग इतने ही पिक्सेल मिश्रण संचालन करते हैं, क्योंकि ये सभी पारदर्शी परतें एक-दूसरे पर बार-बार खींच रही हैं। यह बहुत सारे पिक्सेल है।

और यह सबसे अच्छा मामला है - यदि उपयोगकर्ता नीचे देखता है या क्राउच करता है तो आपको फॉग क्वाड की अधिक स्क्रीन कवरेज मिलेगी।

ध्यान दें कि जब से हम 1080 क्वैड को ओवरलैप कर रहे हैं, हम संभवतः प्रत्येक पर सेट के बारे में (1.0 / 1080 ~ =) 0.0009 का एक अल्फा मान चाहते हैं, ताकि यदि आप सभी 1080 क्वैड के माध्यम से देखें तो हमारा कोहरा पूरी तरह से पहुंच जाए। (हम इससे भी ऊपर जा सकते हैं, लेकिन यह मान है कि हम रेंज को जितना संभव हो उतना फैलाना चाहते हैं)। ध्यान दें कि इस मान को 32-बिट रंग मान के अल्फा घटक (256 * 0.0009 ~ = 0.237) के रूप में दर्शाया नहीं जा सकता है और इसलिए यदि आप कोशिश करते हैं तो इसे 0 से नीचे कर दिया जाएगा। आपको OpenGL को 0.0009 मान प्रदान करने की आवश्यकता होगी, क्योंकि यह सभी के लिए एक अस्थायी बिंदु मान है। (यह भी ध्यान दें कि आप वास्तव में प्रत्येक पर यह समान मूल्य निर्धारित नहीं करना चाहते हैं - जबकि हमने परिभाषित किया था कि हम शुरू करने के लिए एक क्वाड शुरू करना चाहते थे और क्षितिज के नीचे प्रत्येक स्कैनलाइन पर समाप्त करने के लिए हमें चिकनी कोहरे देना चाहते थे,)

यह भी ध्यान दें कि कोहरे के मिश्रण इस दृष्टिकोण का उपयोग करते हुए काफी सही ढंग से काम नहीं करेंगे, क्योंकि वे एक आधुनिक शेडर के साथ - "बेस ऑब्जेक्ट रंग और इस प्रतिशत का उपयोग करते हुए कोहरे के रंग के बीच मिश्रण" की एक गणना प्राप्त करने के बजाय, आपको 1080 मिलेंगे "कोहरे के प्रतिशत से अब तक के रंग और कोहरे के रंग के बीच मिश्रण" की गणना। जिसका अर्थ है कि कोहरे एक लघुगणक गिरावट के बाद वस्तुओं को प्रभावित करने जा रहा है। (अर्थात, 20 कोहरे वाले कोड़ों से प्रभावित एक वस्तु दो बार से भी कम दिखाई देगी क्योंकि 10 कोहरे क्वाड्स से प्रभावित होता है, क्योंकि पहले कोहरे के छालों का असर ऑपरेशन में अधिक होता है)।

जो सभी को कहना है: कृपया केवल एक टुकड़ा shader का उपयोग करें।

सच में नहीं। यह सरल और सस्ता है और तेजी से लागू करने और त्रुटि-कम करने के लिए तेज और आपको वास्तव में अपना गेम बनाने के लिए वापस मिलता है और हर संभव तरीके से बेहतर है। हम पूरी तरह से इसे पीएस 2 युग में वापस कर देते थे यदि यह समय पर भी संभव होता।


1
वास्तविक दुनिया के अनुभव के आधार पर व्यापक उत्तर के लिए +1।
कॉन्सेप्ट 3 डी

3
एक साल और एक महीने पहले जब मैंने यह सवाल लिखा था, तब भी मैं भरने की दरों के साथ चिकन खेलने के लिए तैयार था। अब मैं 3 डी परिलीन शोर द्वारा निर्धारित शिफ्टिंग घनत्व के साथ जमीनी कोहरे की मात्रा का प्रतिनिधित्व करने के लिए एक मोटे 3 डी बनावट का विकल्प चुनूंगा, और फिर स्क्रीन स्पेस इफेक्ट्स के लिए एक आधार के रूप में इसका उपयोग करूँगा, जितना आपने सुझाया है।
इंजीनियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.