"स्कैनलाइन रेसिंग" क्या है


13

मैंने वीआर पर काम करने वाले बहुत से लोगों को स्कैनलाइन रेसिंग के बारे में सुना है और यह गति-टू-फोटॉन के लिए विलंबता को बेहतर बनाने में मदद करने वाला है। हालाँकि, यह मेरे लिए स्पष्ट नहीं है कि यह ओपनजीएल के साथ कैसे किया जा सकता है। क्या कोई समझा सकता है कि स्कैनलाइन रेसिंग कैसे काम करती है, और इसे आधुनिक GPU पर कैसे लागू किया जा सकता है।

जवाबों:


14

जब आपका GPU स्क्रीन पर एक नया फ्रेम प्रदर्शित करता है, तो यह "स्कैन" नामक प्रक्रिया में एचडीएमआई केबल (या जो भी प्रकार) पर छवि को स्थानांतरित करता है। पिक्सल को रैखिक क्रम में बाहर भेजा जाता है, आमतौर पर बाएं से दाएं और ऊपर से नीचे। इस प्रक्रिया को समयबद्ध किया गया है ताकि ऐसा करने के लिए एक ताज़ा अंतराल की अवधि हो। उदाहरण के लिए, 60 हर्ट्ज पर, एक फ्रेम ~ 17 एमएस है। प्रत्येक स्कैनआउट संभवतः 15-16 एमएस के बीच ले जाएगा, बीच में 1-2 एमबी वबलैंक (प्रदर्शन और वीडियो मोड के अनुसार सटीक मान भिन्न होते हैं)।

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

वीआर बहुत विलंबता के प्रति संवेदनशील है, इसलिए यह वांछनीय नहीं है। एक वैकल्पिक दृष्टिकोण सीधे सामने के बफर को प्रस्तुत करना है, लेकिन समय बहुत सावधानी से बाहर निकालता है ताकि आप स्कैनआउट होने से कुछ समय पहले छवि की प्रत्येक पंक्ति को प्रस्तुत कर सकें। इसे "स्कैनलाइन रेसिंग" या "रेसिंग द बीम" ("बीम" सीआरटी के दिनों में वापस पहुंचाने वाला हॉर्मिंग कहा जाता है)। इससे कम या ज्यादा की आवश्यकता होती है कि आप छवि को स्कैनलाइन क्रम में प्रस्तुत करते हैं, अर्थात उसी क्रम में जो पिक्सेल स्कैन किए जाते हैं। इसका शाब्दिक अर्थ एक समय में एक पंक्ति प्रदान करना नहीं है - इसे कुछ पिक्सेल ऊँची पतली स्ट्रिप्स में प्रस्तुत किया जा सकता है, लेकिन इसे क्रम में करना होगा, क्योंकि आप वापस नहीं जा सकते हैं और पहले से ही पिक्सेल को संपादित कर सकते हैं। बाहर स्कैन किया गया।

इस दृष्टिकोण के कई नुकसान हैं; इसकी बहुत कठोर प्रदर्शन आवश्यकताएं हैं, vsync के खिलाफ बहुत सावधानी से समयबद्ध होना है, और यह प्रतिपादन प्रक्रिया को बहुत जटिल करता है। लेकिन सिद्धांत रूप में, यह आपके विलंबता से मिलीसेकंड दाढ़ी कर सकता है, यही वजह है कि वीआर लोग इसमें रुचि रखते हैं।


1
तो मेरा सवाल यह है कि हम आधुनिक GPU पर यह कैसे करते हैं? मुझे नहीं लगता कि स्कैनआउट को क्वेरी करने का कोई तरीका है, और मुझे लगता है कि आप वास्तव में प्रति-स्कैन ड्रा कॉल जमा नहीं कर सकते। यहां तक ​​कि अगर आप कर सकते हैं - आपके पास क्या गारंटी है कि आपके ड्रॉ स्कैनआउट से पहले होने वाले हैं?
मोकोशा

1
@Mokosha सही, सीधे AFAIK स्कैनआउट को क्वेरी करने का कोई तरीका नहीं है। सबसे अच्छा, आप यह पता लगा सकते हैं कि जब vsync है (कुछ OS सिग्नल के माध्यम से) और अनुमान लगाओ कि स्कैनआउट उस समय के सापेक्ष है (वीडियो मोड के विवरण जानने के)। रेंडरिंग के लिए, आप यह पता लगाने के लिए प्रयोग कर सकते हैं कि आमतौर पर ग्लफ्लश के बीच कितना समय लगता है और रेंडरिंग कब की जाती है, और उसके आधार पर कुछ अनुमान लगाए जाते हैं। अंततः, आपको त्रुटि के मामले में अपने समय में कुछ कमी का निर्माण करना होगा (उदाहरण के लिए, स्कैनआउट से 2-3 एमएस आगे रहना), और स्वीकार करें कि शायद कभी-कभी कलाकृतियां होंगी।
नाथन रीड

बढ़ी हुई विलंबता का प्रभाव vsync के कारण होता है, जो सामने और बैकबफ़र स्वैप का कारण बनता है मॉनिटर के vblank के साथ सिंक्रनाइज़ करने के लिए। डबल बफ़रिंग स्वयं इस समस्या का कारण नहीं बनता है और टिमटिमा को कम करने के लिए उपयोगी है क्योंकि एक पिक्सेल केवल एक बार सामने बफर में बदल सकता है।
मौरिस लावॉक्स

मैं स्कैन लाइन क्वेरी के बिना चूहों की भविष्यवाणी करने के लिए एक सटीक तरीका के साथ आया हूं, नीचे जवाब देखें।
बजे मार्क रेजन

0

महान बात यह है कि हम अंततः स्कैन-लाइन सटीक रेखापुंज सटीकता का अनुमान लगा सकते हैं, जिसमें प्रति-स्कैन क्वेरी तक कोई पहुंच नहीं है:

https://www.youtube.com/watch?v=OZ7Loh830Ec

मैं एक VSYNC ऑफसेट के रूप में सटीक माइक्रोसेकंड-सटीक फॉर्मूले के साथ आया हूं, जिससे एक फाड़ की स्थिति का अनुमान लगाया जा सके। वीएसवाईएनसी ऑफ के दौरान ट्रेसलाइन हमेशा रेखापुंज-सटीक होती हैं, इसलिए आप बार-बार वीएसएनएनसी ऑफ बफर स्वैपिंग के माध्यम से स्ट्रिप-लेवल "सिम्युलेटेड फ्रंट-बफर रेंडरिंग" के दौरान उन्हें दृश्यता से बाहर निकाल सकते हैं।

फ़ोरम थ्रेड पर ध्यान दें - कुछ ओपन सोर्स कोड लगातार जोड़े जा रहे हैं - https://forums.blurbusters.com/viewtopic.php?f=10&p=32002


0

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

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