VIVE लोगोवीआर रेंडरिंग प्रदर्शन
ट्यूनिंग और अनुकूलन

परिचय

संसाधन-सीमित हार्डवेयर पर इष्टतम VR अनुभव प्राप्त करना एक सहज और आरामदायक उपयोगकर्ता अनुभव प्रदान करने की कुंजी है। यदि सामग्री रेंडरिंग की फ़्रेम दर डिवाइस की रिफ्रेश दर से कम हो जाती है या अस्थिर हो जाती है, तो इससे फ़्रेम जडर और स्टटिंग, मोशन सिकनेस आदि की समस्या होगी। अंततः उपयोगकर्ता अनुभव पर नकारात्मक प्रभाव पड़ेगा। इसलिए, एक सुखद अनुभव सुनिश्चित करने के लिए सामग्री प्रदर्शन को अनुकूलित करना बहुत महत्वपूर्ण है।
प्रदर्शन ट्यूनिंग शुरू करने से पहले, यह समझना महत्वपूर्ण है कि प्रदर्शन में बाधाएँ कहाँ हैं ताकि अकुशल ट्यूनिंग से बचा जा सके। यह दस्तावेज़ डेवलपर्स को प्रदर्शन बाधाओं की पहचान करने और रेंडरिंग प्रदर्शन समस्याओं को हल करने के लिए समाधान प्रदान करने में मदद करने के लिए डिज़ाइन किया गया है।
दस्तावेज़ को निम्नलिखित अनुभागों में व्यवस्थित किया गया है:

  • अध्याय 2: अड़चन की पहचान करें - यह खंड डेवलपर्स को यह पहचानने में सहायता करता है कि अड़चनें कहां हैं।
  • अध्याय 3 और 4: VIVE Wave और VIVE OpenXR सेटिंग्स - ये अनुभाग विशिष्ट सेटिंग्स को रेखांकित करते हैं जो VIVE Wave और OpenXR ऐप्स के लिए CPU/GPU प्रदर्शन को प्रभावित कर सकते हैं। डेवलपर्स प्रदर्शन संबंधी बाधाओं के आधार पर इन सुविधाओं को सक्षम या अक्षम करने के साथ प्रयोग कर सकते हैं ताकि यह निर्धारित किया जा सके कि कोई सुधार हुआ है या नहीं।
  • अध्याय 5: सामान्य अनुकूलन - यह खंड कुछ सामान्य अनुकूलन प्रथाओं और अनुभवों को साझा करता है।

अड़चन की पहचान करें

जब HMD चल रहा हो, अगर VR/MR ऐप में फ़्रेम जिटर या ब्लैक एज आदि हो, तो यह आमतौर पर खराब रेंडरिंग प्रदर्शन समस्या के कारण होता है। आम तौर पर, रेंडरिंग प्रदर्शन समस्याओं को 2 प्रकारों में वर्गीकृत किया जा सकता है: CPU-बाउंड या GPU-बाउंड। अक्षम ट्यूनिंग से बचने के लिए शुरुआत में यह समझना बहुत महत्वपूर्ण है कि आपके ऐप के लिए किस प्रकार की बाउंड है।
इस अध्याय में, हम सरल चरण प्रदान कर रहे हैं जिनकी सहायता से आप शीघ्रता से पहचान कर सकेंगे कि प्रदर्शन संबंधी समस्याएं कहां हैं।

2.1 कंटेंट रेंडरिंग FPS की जाँच करें
सबसे पहले, हम कंटेंट FPS की जाँच करके शुरू करते हैं, जो कि कंटेंट द्वारा प्रति सेकंड रेंडर किए जाने वाले फ़्रेम की संख्या है। इसे डिस्प्ले फ़्रेमरेट पर बनाए रखा जाना चाहिए और स्थिर रखा जाना चाहिए। अन्यथा, यह फ़्रेम जिटर का कारण बन सकता है।
यदि आपका एप्लिकेशन SDK VIVE WAVE SDK 6.0.0 या बाद के संस्करण का उपयोग कर रहा है, तो आप FPS की जांच करने के लिए निम्नलिखित adb कमांड का उपयोग कर सकते हैं। DK 6.0.0
$adb लॉगकैट -s VRMetric
आपको निम्नलिखित लॉग डेटा दिखाई देगा।
VRMetric:FPS=89.8/89.8,CPU-27/1,GPU=72/3,GpuBd=0,LrCnt=1,2Stag=1,Pstat=2,AQ=1,FOVED=0/0, FSE=1,TWS-2,PT=0(0), RndrBK=0,GLTA=2D,EB=1720×1720
“FPS=89.8/89.8” पहली संख्या सामग्री FPS का प्रतिनिधित्व करती है, जबकि दूसरी संख्या डिस्प्ले फ्रेमरेट का प्रतिनिधित्व करती है।
यदि आपका Wave SDK संस्करण 6.0.0 से कम है, तो रेंडरिंग प्रदर्शन और अन्य अनुकूलन को बढ़ाने के लिए नवीनतम संस्करण में अपग्रेड करने की अनुशंसा की जाती है।
यदि आपका एप्लीकेशन SDK VIVE OpenXR के साथ बनाया गया है, तो आप FPS की जांच करने के लिए निम्नलिखित adb कमांड का उपयोग कर सकते हैं।
$adb लॉगकैट -s RENDER_ATW
आपको निम्नलिखित लॉग डेटा दिखाई देगा
RENDER_ATW: [FPS] नई बनावट: 90.00
RENDER_ATW: [FPS] R वर्तमान:90.00 छोड़ें:0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [एफपीएस] एल वर्तमान:90.00 छोड़ें:0 (0.592301, -0.015502, 0.805539, 0.006773)

“नया टेक्सचर” के बाद की संख्या वर्तमान में सामग्री FPS को दर्शाती है। “R मौजूद” और “L मौजूद” के बाद की संख्या डिस्प्ले फ़्रेमरेट को दर्शाती है।
कभी-कभी, सामग्री FPS और डिस्प्ले फ्रेमरेट में थोड़ी विसंगति हो सकती है।
उदाहरणार्थampअतः, उपरोक्त मामले में, 89.8 FPS को 90 FPS माना जा सकता है।
अगर ऐप का कंटेंट FPS लगातार डिस्प्ले फ्रेमरेट से कम है या अस्थिर रहता है, तो यह रेंडरिंग परफॉरमेंस समस्या को इंगित करता है। इसलिए, अगला कदम यह पहचानना है कि बाधा CPU या GPU से आ रही है या नहीं।
2.2 CPU और GPU उपयोग की जाँच करें
यदि आपका एप्लिकेशन SDK VIVE WAVE SDK 6.0.0 या बाद के संस्करण का उपयोग कर रहा है, तो आप FPS की जांच करने के लिए निम्नलिखित adb कमांड का उपयोग कर सकते हैं।
$adb logcat -s VRMetric
आपको निम्नलिखित लॉग डेटा दिखाई देगा।
VRMetric:FPS=89.8/89.8,CPU=27/1,GPU=72/3,GpuBd=0,LrCnt=1,2Stag=1,Pstat=2,AQ=1,FOVED=0 /0, FSE=1,TWS=2,PT=0(0),RndrBK=0,GLTA=2D,EB=1720×1720
जैसा कि आप उपरोक्त लॉग परिणाम में देख सकते हैं, CPU उपयोग 27% है और GPU उपयोग 72% है यदि आपका Wave SDK संस्करण 6.0.0 से नीचे है, तो रेंडरिंग प्रदर्शन और अन्य अनुकूलन को बढ़ाने के लिए नवीनतम संस्करण में अपग्रेड करने की अनुशंसा की जाती है।
VIVE OpenXR ऐप के लिए, आप CPU और GPU उपयोग की जांच करने के लिए निम्नलिखित कमांड का उपयोग कर सकते हैं।
# लिनक्स/उबंटू पर
$ adb logcat | grep CPU_USAGE
# पॉवरशेल पर
$ adb logcat | Select-String -पैटर्न CPU_USAGE
आपको निम्नलिखित लॉग दिखाई देगा
CPU औसत CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 GPU CPU_USAGE [लोड] 25.67% 32.22% 25.29% 30.77% 29.35% 21.35% 22.09% 18.39% 24.14% 73 %
यदि आप देखते हैं कि FPS डिस्प्ले फ्रेम दर को बनाए नहीं रख सकता है और GPU का उपयोग भी बहुत अधिक है, आमतौर पर 85% से अधिक है, तो आप यह देखने के लिए कि क्या यह FPS में सुधार करता है, Eyebuffer Resolution (अनुभाग 3.1.2, अनुभाग 4.1.2) को समायोजित करने का प्रयास कर सकते हैं। यदि यह समायोजन बेहतर परिणाम देता है
प्रदर्शन के आधार पर, हम यह निष्कर्ष निकाल सकते हैं कि समस्या GPU से संबंधित है और अपने अनुकूलन प्रयासों को उसी के अनुसार केंद्रित कर सकते हैं।
दूसरी ओर, यदि आईबफर रिज़ॉल्यूशन को समायोजित करने से प्रदर्शन में उल्लेखनीय सुधार नहीं होता है, तो समस्या संभवतः CPU से संबंधित है, और हमें CPU प्रदर्शन को अनुकूलित करने पर ध्यान केंद्रित करना चाहिए।
यह भी संभव है कि एप्लिकेशन एक साथ CPU-बाउंड और GPU-बाउंड दोनों हो। ऐसे मामलों में, संतुलित प्रदर्शन सुधार प्राप्त करने के लिए CPU और GPU दोनों पर अनुकूलन प्रयास लागू किए जाने चाहिए।
2.3 GPU-बाउंड
जब कोई VR ऐप GPU-बाउंड होता है, तो इसका मतलब है कि GPU प्राथमिक बाधा है, और यह एप्लिकेशन की रेंडरिंग मांगों को पूरा करने में असमर्थ है। GPU-बाउंड समस्याओं को कम करने के लिए, निम्नलिखित अनुशंसाओं पर विचार करें:
सबसे पहले, रेंडरडॉक या गेम इंजन प्रो जैसे प्रोफाइलिंग टूल का उपयोग करेंfileआर(यूनिटी प्रोfileआर, अनरियल इनसाइट्स) का उपयोग करके विश्लेषण करें कि GPU अपना अधिकांश समय कहां खर्च कर रहा है। सबसे महंगे ऑपरेशन की पहचान करें और उन्हें अनुकूलित करने पर ध्यान केंद्रित करें।
नेटिव डेवलपर के लिए, आप रेंडरडॉक का उपयोग करके यह पहचान सकते हैं कि कौन सी ड्रॉ कॉल अत्यधिक GPU लोड का कारण बन रही है।
यूनिटी डेवलपर के लिए, आप यूनिटी के इस दस्तावेज़ का अनुसरण कर सकते हैं या रेंडरिंग प्रदर्शन समस्या का विश्लेषण करने के लिए रेंडरडॉक का उपयोग कर सकते हैं, और अपने एप्लिकेशन को अनुकूलित करने के लिए मार्गदर्शन के लिए यूनिटी ग्राफिक्स ऑप्टिमाइज़ेशन दस्तावेज़ का अनुसरण कर सकते हैं।
अनरियल डेवलपर के लिए, आप रेंडरिंग प्रदर्शन समस्या का विश्लेषण करने के लिए GPU विज़ुअलाइज़र या रेंडरडॉक का उपयोग कर सकते हैं, और अपने एप्लिकेशन को अनुकूलित करने के लिए मार्गदर्शन के लिए अनरियल प्रदर्शन दिशानिर्देशों का पालन कर सकते हैं।
दूसरा, आप GPU लोडिंग को कम करने के लिए कुछ Wave सुविधाओं या सेटिंग्स को समायोजित करने का भी प्रयास कर सकते हैं।

  1. प्रदर्शन रिफ्रेश दर को धीमा सेट करें (अनुभाग 3.1.1, अनुभाग 4.1.1)
  2.  आईबफर रिज़ॉल्यूशन समायोजित करें (अनुभाग 3.1.2, अनुभाग 4.1.2), 14.1.1)
  3.  फोविएशन (अनुभाग 3.1.4, अनुभाग 4.1.4) को सक्षम करने का प्रयास करें।

यदि आपका ऐप भी MR ऐप है, तो आप पासथ्रू सेटिंग्स को भी समायोजित कर सकते हैं।

  1. पासथ्रू छवि गुणवत्ता को कम समायोजित करें. (अनुभाग 3.2.1)
  2. पासथ्रू फ्रेमरेट को धीमी गति से समायोजित करें। (अनुभाग 3.2.2)।

GPU प्रदर्शन के बारे में अन्य सेटिंग्स के लिए, आप अध्याय 2.6 देख सकते हैं।

2.4 सीपीयू-बाउंड
जब कोई VR ऐप CPU-बाउंड होता है, तो इसका मतलब है कि CPU ही प्राथमिक अड़चन है, निम्नलिखित अनुशंसाओं पर विचार करें:
सबसे पहले, Systrace या Game Engine pro जैसे प्रोफाइलिंग टूल का उपयोग करेंfileआर(यूनिटी प्रोfiler, Unreal Insights) का उपयोग करके विश्लेषण करें और पहचानें कि आपके कोड के कौन से हिस्से सबसे ज़्यादा CPU संसाधनों का उपभोग कर रहे हैं। इन क्षेत्रों को अनुकूलित करने पर ध्यान दें और CPU लोड को कम करने के लिए कम्प्यूटेशनल रूप से गहन एल्गोरिदम को फिर से तैयार करें।

  • मूल डेवलपर के लिए, आप प्रो के लिए सिस्ट्रेस का उपयोग कर सकते हैंfileअपने प्रोजेक्ट के लिए साइन अप करें.
  • यूनिटी डेवलपर के लिए, आप CPU Usage Pro का उपयोग कर सकते हैंfiler मॉड्यूल का उपयोग करके CPU प्रदर्शन समस्या का पता लगाएं।
  • अनरियल डेवलपर के लिए, आप CPU प्रदर्शन समस्या का पता लगाने के लिए अनरियल इनसाइट्स का उपयोग कर सकते हैं।

दूसरा, आप GPU लोडिंग को कम करने के लिए कुछ Wave सुविधाओं या सेटिंग्स को समायोजित करने का भी प्रयास कर सकते हैं।

  1. प्रदर्शन रिफ्रेश दर को धीमा सेट करें (अनुभाग 3.1.1, अनुभाग 4.1.1)
  2.  मल्टी- का उपयोग करेंView रेंडरिंग (अनुभाग 3.1.4, अनुभाग 4.1.4)

यदि आपका ऐप भी MR ऐप है, तो आप पासथ्रू सेटिंग्स को भी समायोजित कर सकते हैं।

  1. पासथ्रू फ्रेमरेट को धीमी गति से समायोजित करें (अनुभाग 3.2.2)।

CPU प्रदर्शन के बारे में अन्य सेटिंग्स के लिए, आप अध्याय 2.6 देख सकते हैं।

2.5 सारांश
अंत में, हमने उपरोक्त प्रदर्शन जाँच कार्यप्रवाह को चित्र 2-5-1 में व्यवस्थित किया है। सामग्री के FPS की जाँच करके शुरू करें। यदि यह डिस्प्ले फ़्रेमरेट से कम है या अस्थिर रहता है, तो GPU/CPU उपयोग का विश्लेषण करके यह निर्धारित करें कि यह GPU-बाउंड है या CPUबाउंड। अंत में, एक प्रो का उपयोग करेंfileसंभावित प्रदर्शन समस्याओं की पहचान करने या CPU प्रदर्शन को अनुकूलित करने के लिए Wave सुविधाओं या सेटिंग्स को समायोजित करने के लिए r का उपयोग करें।

VIVE VR रेंडरिंग प्रदर्शन - चित्र 1

2.6 त्वरित संदर्भ कौन सी सेटिंग्स CPU/GPU लोडिंग को बेहतर बना सकती हैं

नीचे दिए गए अनुसार CPU/GPU लोडिंग से संबंधित SDK की सेटिंग सूचीबद्ध करें। आप ऐप की अड़चन के आधार पर संबंधित ऑप्टिमाइज़ेशन सेटिंग की जाँच कर सकते हैं।

सीपीयू से संबंधित:

  • VIVE वेव SDK सेटिंग
    o वी.आर. सामग्री
    ▪ 3.1.1 प्रदर्शन ताज़ा दर
    ▪ 3.1.4 बहु-View प्रतिपादन
    ▪ 3.1.6 अनुकूली गुणवत्ता
    ▪ 3.1.7 अनुकूली मोशन कंपोजिटर
    o एमआर कंटेंट
    ▪ 3.2.2 पासथ्रू फ्रेम दर समायोजित करें
  • VIVE OpenXR SDK सेटिंग
    o वी.आर. सामग्री
    ▪ 4.1.1 प्रदर्शन ताज़ा दर
    ▪ 4.1.4 बहु-View प्रतिपादन
  • सामान्य अनुकूलन
    o 5.5 सीपीयू स्पाइक

GPU से संबंधित:

  • VIVE वेव SDK सेटिंग
    o वी.आर. सामग्री
    ▪ 3.1.1 प्रदर्शन ताज़ा दर
    ▪ 3.1.2 आईबफर रिज़ॉल्यूशन
    ▪ 3.1.3 बहु-View प्रतिपादन
    ▪ 3.1.4 फोवेशन
    ▪ 3.1.5 फ्रेम शार्पनेस एन्हांसमेंट (FSE)
    ▪ 3.1.6 अनुकूली गुणवत्ता
    ▪ 3.1.7 अनुकूली मोशन कंपोजिटर
    ▪ 3.1.8 रेंडर मास्क [अनरियल का समर्थन नहीं करता] o एमआर कंटेंट
    ▪ 3.2.1 पासथ्रू गुणवत्ता समायोजित करें
    ▪ 3.2.2 पासथ्रू फ्रेम दर समायोजित करें
  • VIVE OpenXR SDK सेटिंग
    o वी.आर. सामग्री
    ▪ 4.1.1 प्रदर्शन ताज़ा दर
    ▪ 4.1.2 आईबफर रिज़ॉल्यूशन
    ▪ 4.1.3 बहु-View प्रतिपादन
    ▪ 4.1.4 फ़ोविएशन [अनरियल का समर्थन नहीं करता] ▪ 4.1.5 रेंडर मास्क [अनरियल का समर्थन नहीं करता]
  • सामान्य अनुकूलन
    o 5.1 उच्च प्रदर्शन मोड बंद करें
    o 5.2 मल्टीसampएक प्रकार का वृक्ष
    o 5.3 जीएमईएम लोड/स्टोर
    o 5.4 रचना परत (मल्टी लेयर)

VIVE वेव सेटिंग

VIVE Wave एक खुला प्लेटफ़ॉर्म और टूलसेट है जो आपको आसानी से VR कंटेंट विकसित करने देता है और तीसरे पक्ष के भागीदारों के लिए उच्च-प्रदर्शन डिवाइस अनुकूलन प्रदान करता है। VIVE Wave यूनिटी और अनरियल गेम इंजन का समर्थन करता है।
हम लगातार विभिन्न बगों का अनुकूलन और समाधान करते हैं, इसलिए हम SDK को अद्यतन रखने की अनुशंसा करते हैं।
वर्तमान में, VIVE Wave केवल OpenGL ES का समर्थन करता है। यहाँ GPU प्रदर्शन पर प्रभाव के अनुसार क्रमबद्ध सुविधाएँ सूचीबद्ध हैं। हम इसे दो भागों में विभाजित करेंगे: VR सामग्री और MR सामग्री।
3.1 वी.आर. सामग्री
3.1.1 प्रदर्शन ताज़ा दर

उच्च रिफ्रेश दरें बेहतर दृश्य प्रदान करती हैं, लेकिन सिस्टम लोड में वृद्धि की कीमत पर आती हैं। इसके विपरीत, कम रिफ्रेश दरें सिस्टम लोड को कम करती हैं, लेकिन परिणामस्वरूप कम सहज दृश्य मिलते हैं। यदि ऐप में CPU/GPU बाउंड समस्या है, तो आप समस्या को कम करने के लिए डिस्प्ले रिफ्रेश दर को कम करने का प्रयास कर सकते हैं।

  • मूल डेवलपर के लिए, WVR_SetFrameRate देखें।
  • यूनिटी डेवलपर के लिए, इस गाइड का संदर्भ लें।
  • अवास्तविक डेवलपर के लिए, इस गाइड का संदर्भ लें।

3.1.2 आईबफर रिज़ॉल्यूशन
आईबफर रिज़ोल्यूशन वह टेक्सचर आकार है जिसे कंटेंट ऐप द्वारा रेंडर किया जाना है, रेंडर किए गए टेक्सचर को पोस्टिंग प्रक्रिया करने के लिए रनटाइम पर सबमिट किया जाएगा और एचएमडी डिस्प्ले पर प्रस्तुत किया जाएगा।
जबकि बड़े आई बफर आकार से स्पष्ट और अधिक विस्तृत दृश्य प्राप्त हो सकते हैं, लेकिन यह GPU पर एक महत्वपूर्ण भार भी डालता है। इसलिए, दृश्य गुणवत्ता और प्रदर्शन के बीच सही संतुलन खोजना आवश्यक है।
अगर ऐप में GPU बाउंड समस्या है, तो आप स्केल फैक्टर को गुणा करके आईबफर का आकार कम करने की कोशिश कर सकते हैं। हालाँकि, हम स्केल फैक्टर को 0.7 से कम न करने की सलाह देते हैं, क्योंकि इससे अस्वीकार्य दृश्य गुणवत्ता हो सकती है।

  • नेटिव डेवलपर के लिए, WVR_ObtainTextureQueue देखें। आकार समायोजित करते समय, आपको चौड़ाई और ऊंचाई को अनुपात से गुणा करना चाहिए।
  • यूनिटी डेवलपर के लिए, WaveXRSettings देखें।
    वैकल्पिक रूप से, आप नीचे दिए गए कोड के माध्यम से परिवर्तन कर सकते हैं।
    XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C#
  • अवास्तविक डेवलपर के लिए, SetPixelDensity देखें।

3.1.3 बहु-View प्रतिपादन
पारंपरिक रेंडरिंग में, हम बाईं और दाईं आंख को अलग-अलग खींचते हैं, जिसके लिए एक ही दृश्य के लिए दो ड्रॉ कॉल की आवश्यकता होती है।View रेंडरिंग केवल एक ड्रॉ कॉल करके इस समस्या का समाधान करता है।
यह सुविधा ड्रॉ कॉल की संख्या को कम करके CPU लोड को कम करती है। GPU के भी कुछ लाभ हैं, वर्टेक्स शेडर का कार्यभार भी कम हो जाता है क्योंकि इसे दूसरी आँख के लिए अतिरिक्त शेडर चलाने की आवश्यकता नहीं होती है, लेकिन फ़्रेगमेंट शेडर का कार्यभार अपरिवर्तित रहता है क्योंकि इसे अभी भी दोनों आँखों के लिए प्रत्येक पिक्सेल का मूल्यांकन करने की आवश्यकता होती है। हम इस सुविधा को सक्षम करने की अनुशंसा करते हैं।

  • मूल डेवलपर के लिए, आप wvr_native_hellovr s का संदर्भ ले सकते हैंampले.
  • यूनिटी डेवलपर के लिए, रेंडर मोड का संदर्भ लें, सिंगल पास मल्टी-view विशेषता।
  • अवास्तविक डेवलपर के लिए, इस गाइड का संदर्भ लें।

3.1.4 फोवेशन
फोवेटेड रेंडरिंग मुख्य रूप से GPU लोड को कम करने के लिए डिज़ाइन किया गया है। यह डिस्प्ले के परिधीय भाग में फ्रेम विवरण को कम करता है और क्षेत्र के केंद्र में उच्च रिज़ॉल्यूशन विवरण बनाए रखता है। viewयदि ऐप में GPU बाउंड समस्या है, तो आप Foveation रेंडरिंग का उपयोग करने का प्रयास कर सकते हैं।

VIVE VR रेंडरिंग प्रदर्शन - चित्र 2

फोविएशन का उपयोग करते समय कुछ बातों पर ध्यान देने की आवश्यकता है:

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

  • मूल डेवलपर के लिए, इस गाइड का संदर्भ लें।
  • यूनिटी डेवलपर के लिए, इस गाइड को देखें। विशेष रूप से, जब आप पोस्ट-प्रोसेसिंग या HDR सक्षम करते हैं, तो फोवेशन का पूरी तरह से उपयोग नहीं किया जा सकता है। क्योंकि यूनिटी अपने स्वयं के जेनरेट किए गए रेंडर टेक्सचर पर ऑब्जेक्ट्स को रेंडर करेगी, न कि रनटाइम-जेनरेटेड प्रेजेंट के रेंडर टेक्सचर पर जो फोवेशन का समर्थन करता है।
  • अनरियल डेवलपर के लिए, इस गाइड को देखें। विशेष रूप से, फोवेशन का मल्टी- पर पूरी तरह से उपयोग नहीं किया जा सकता है।View रेंडरिंग, क्योंकि अनरियल सीधे रनटाइम-जनरेटेड रेंडर टेक्सचर पर ऑब्जेक्ट्स को रेंडर नहीं कर सकता है जो फोविएशन का समर्थन करता है।

3.1.5 फ़्रेम शार्पनेस एन्हांसमेंट (FSE)
FSE शार्पन फ़िल्टर के ज़रिए शार्पन रेंडरिंग परिणाम प्रदान करता है, यह कंटेंट को ज़्यादा स्पष्ट बना सकता है और दृश्य में टेक्स्ट की स्पष्टता को बेहतर बनाने में काफ़ी मददगार हो सकता है। अगर ऐप में GPU बाउंड समस्या है, तो आप FSE को अक्षम करने पर विचार कर सकते हैं, अगर यह ज़रूरी नहीं है।

VIVE VR रेंडरिंग प्रदर्शन - चित्र 3

  • मूल डेवलपर के लिए, इस गाइड का संदर्भ लें।
  • यूनिटी डेवलपर के लिए, इस गाइड का संदर्भ लें।
  • अवास्तविक डेवलपर के लिए, इस गाइड का संदर्भ लें।

3.1.6 अनुकूली गुणवत्ता
बैटरी बचाने और डिवाइस के रेंडरिंग प्रदर्शन को बनाए रखने के लिए, यह सुविधा CPU/GPU क्लॉक के प्रदर्शन स्तरों को उनके उपयोग के आधार पर स्वचालित रूप से समायोजित करती है। इसके अतिरिक्त, प्रदर्शन को बढ़ाने के लिए अन्य रणनीतियाँ लागू की जा सकती हैं, जैसे कि स्वचालित रूप से फ़ोवेशन को सक्षम/अक्षम करना या उच्च/निम्न लोड ईवेंट प्राप्त होने पर सामग्री स्वयं समायोजित हो सकती है।

  • मूल डेवलपर के लिए, इस गाइड का संदर्भ लें।
  • यूनिटी डेवलपर के लिए, इस गाइड को देखें। हमारे यूनिटी प्लगइन में, आई बफर आकार को वर्तमान प्रदर्शन के आधार पर स्वचालित रूप से समायोजित किया जा सकता है; टेक्स्ट का आकार उन स्केल मानों को फ़िल्टर कर देगा जो रिज़ॉल्यूशन सूची में बहुत छोटे हैं। हम कम से कम 20 डीएमएम या उससे बड़े आकार के टेक्स्ट की सलाह देते हैं।
  • अवास्तविक डेवलपर के लिए, इस गाइड का संदर्भ लें।

3.1.7 अनुकूली मोशन कंपोजिटर
यह सुविधा प्रायोगिक सुविधा है जिसमें UMC और PMC शामिल हैं। UMC फ्रेम दर को आधे से कम कर देगा और दृश्य सुगमता बनाए रखने के लिए वास्तविक समय में नए फ्रेम को एक्सट्रपलेशन करेगा। हालाँकि, यह कुछ विलंबता, कलाकृतियों और GPU लोडिंग के साथ आता है।
PMC मुख्य रूप से डेप्थ बफर का उपयोग करता है ताकि ATW को HMD ट्रांसलेशन के लिए जिम्मेदार बनाया जा सके, 6-dof मुआवजे तक बढ़ाया जा सके। यह सुविधा ट्रांसलेशन विलंबता को 1~2 फ्रेम तक कम कर सकती है, लेकिन GPU लोडिंग को बढ़ा सकती है।

  • मूल डेवलपर के लिए, इस गाइड का संदर्भ लें।
  • यूनिटी डेवलपर के लिए, इस गाइड का संदर्भ लें।
  • अवास्तविक डेवलपर के लिए, इस गाइड का संदर्भ लें।

3.1.8 रेंडर मास्क [अनरियल का समर्थन नहीं करता]
विरूपण के बाद किनारों पर पिक्सेल लगभग अदृश्य हो जाते हैं, रेंडर मास्क इन अदृश्य पिक्सेल के डेप्थ बफर मानों को संशोधित करता है। यदि आप डेप्थ टेस्टिंग सक्षम करते हैं, तो अर्ली-जेड के कारण, ये अदृश्य पिक्सेल रेंडर नहीं किए जाएँगे, जिससे GPU लोड कम हो जाएगा। यह सुविधा तब उपयोगी होती है जब इन अदृश्य क्षेत्रों में भारी-लोडिंग रेंडरिंग ऑब्जेक्ट हों; अन्यथा, यदि इन क्षेत्रों में कोई रेंडरिंग ऑब्जेक्ट नहीं हैं, तो इसे अक्षम करने की अनुशंसा की जाती है क्योंकि यह एक छोटे GPU उपयोग का उपभोग करेगा।

  • नेटिव डेवलपर के लिए, इस गाइड को देखें। आपको RenderMask को कॉल करने से पहले डेप्थ बफर को बाइंड करना होगा; अन्यथा, यह अप्रभावी होगा।
  • यूनिटी डेवलपर के लिए, इस गाइड का संदर्भ लें।
  • अनरियल डेवलपर के लिए, वर्तमान में रेंडर मास्क सुविधा का समर्थन नहीं करता है।

3.2 एमआर सामग्री
3.2.1 पासथ्रू गुणवत्ता समायोजित करें
पासथ्रू छवि गुणवत्ता के लिए 3 स्तर हैं:
➢ WVR_PassthroughImageQuality_DefaultMode - विशिष्ट मांग के बिना MR सामग्री के लिए उपयुक्त।
➢ WVR_PassthroughImageQuality_PerformanceMode - MR सामग्री के लिए उपयुक्त है जिसे वर्चुअल दृश्य रेंडरिंग के लिए अधिक GPU संसाधन की आवश्यकता होती है।
➢ WVR_PassthroughImageQuality_QualityMode - एमआर सामग्री के लिए उपयुक्त है जो उपयोगकर्ताओं को आसपास के वातावरण को स्पष्ट रूप से देखने की अनुमति देता है, लेकिन सामग्री के आभासी दृश्य में प्रदर्शन के लिए अधिक बारीक ट्यूनिंग होनी चाहिए।
आप GPU उपयोग को कम करने के लिए पासथ्रू गुणवत्ता को PerformanceMode में समायोजित कर सकते हैं।

  • नेटिव, यूनिटी या अनरियल डेवलपर के लिए, इस गाइड का संदर्भ लें।

3.2.2 पासथ्रू फ़्रेम दर समायोजित करें
डिस्प्ले रिफ्रेश रेट की तरह, उच्च पासथ्रू फ्रेमरेट बेहतर दृश्य प्रदान करता है, लेकिन सिस्टम लोड में वृद्धि की कीमत पर आता है। इसके विपरीत, कम रिफ्रेश रेट सिस्टम लोड को कम करता है, लेकिन परिणामस्वरूप कम सहज दृश्य मिलते हैं। पासथ्रू फ्रेमरेट के 2 मोड हैं: बूस्ट और नॉर्मल।

  • मूल डेवलपर के लिए, WVR_SetPassthroughImageRate का उपयोग करके पासथ्रू गुणवत्ता को समायोजित किया जा सकता है।
  • यूनिटी डेवलपर के लिए, कोड के माध्यम से परिवर्तन किया जा सकता है, उदाampले सेटिंग्स इस प्रकार हैं // C#
    इंटरऑप.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode);
  • अवास्तविक डेवलपर के लिए, सेटिंग विधि चित्र 3-2-2 में ब्लूप्रिंट नोड देखें।

VIVE VR रेंडरिंग प्रदर्शन - चित्र 4

VIVE OpenXR सेटिंग

ओपनएक्सआर एक खुला मानक है जो क्रोनोस ग्रुप द्वारा विकसित वीआर डिवाइस की एक विस्तृत श्रृंखला में चलने वाले एक्सआर अनुप्रयोगों को विकसित करने के लिए एपीआई का एक सामान्य सेट प्रदान करता है। VIVE फोकस 3 और VIVE XR एलीट भी ओपनएक्सआर का समर्थन करते हैं, VIVE ओपनएक्सआर एसडीके एचटीसी वीआर डिवाइस के लिए व्यापक समर्थन प्रदान करता है, जिससे डेवलपर्स को एचटीसी वीआर डिवाइस पर यूनिटी और अनरियल इंजन के साथ ऑलिन-वन और सामग्री बनाने की अनुमति मिलती है। हम लगातार विभिन्न बगों को अनुकूलित और हल करते हैं, इसलिए यह अनुशंसा की जाती है कि डेवलपर्स अपने डिवाइस के FOTA संस्करण को अपडेट रखें ताकि इसे अद्यतित रखा जा सके। वर्तमान में, VIVE ओपनएक्सआर एसडीके ओपनजीएल ईएस और वल्कन का समर्थन करता है।

4.1 वी.आर. सामग्री
4.1.1 प्रदर्शन ताज़ा दर
यहां अवधारणा 3.1.1 डिस्प्ले रिफ्रेश रेट के समान है।

  • मूल डेवलपर के लिए, XrEventDataDisplayRefreshRateChangedFB देखें।
  • यूनिटी डेवलपर के लिए, इस गाइड का संदर्भ लें।
  • अवास्तविक डेवलपर के लिए, इस गाइड का संदर्भ लें।

4.1.2 आईबफर रिज़ॉल्यूशन
यहां अवधारणा 3.1.2 आईबफर रिज़ॉल्यूशन के समान है। हम स्केल फैक्टर को 0.7 से कम नहीं करने की सलाह देते हैं, क्योंकि इससे अस्वीकार्य दृश्य गुणवत्ता हो सकती है।

  • मूल डेवलपर के लिए, xrCreateSwapchain देखें। आकार समायोजित करते समय, आपको चौड़ाई और ऊंचाई को अनुपात से गुणा करना चाहिए। ,
  • यूनिटी डेवलपर के लिए, निम्नलिखित उदाहरण देखेंampले // सी#
    XRSettings.eyeTextureResolutionScale = 0.7f; //अनुशंसित 1.0f~0.7f
  • अवास्तविक सेटिंग्स के लिए, इस गाइड का संदर्भ लें।

4.1.3 बहु-View प्रतिपादन
यहाँ अवधारणा 3.1.3 मल्टी- के समान हैView रेंडरिंग। यह सुविधा CPU पर लोड कम करती है, GPU के भी कुछ लाभ हैं। हम इस सुविधा को सक्षम करने की अनुशंसा करते हैं।

  • मूल डेवलपर के लिए, क्रोनोसग्रुप एक ओपनएक्सआर मल्टी-View exampकृपया, इस गाइड का संदर्भ लें।
  • यूनिटी डेवलपर के लिए, रेंडर मोड का संदर्भ लें, सिंगल पास मल्टी-view विशेषता।
  • अवास्तविक डेवलपर के लिए, VIVE Wave सेटिंग्स की तरह, इस गाइड का संदर्भ लें।

4.1.4 फोवेशन [अनरियल का समर्थन नहीं करता]
यहाँ अवधारणा 3.1.4 फोवेशन के समान है। फोवेटेड रेंडरिंग मुख्य रूप से GPU लोड को कम करने के लिए डिज़ाइन की गई है, लेकिन इसे सक्षम करने से एक निश्चित GPU प्रदर्शन लागत आएगी और यदि फोवेशन बहुत कम सेट किया जाता है और कुछ सामग्री या बनावट का उपयोग किया जाता है, तो यह बहुत अधिक हो सकता है
उपयोगकर्ता के लिए ध्यान देने योग्य। इसलिए, आपकी विशिष्ट आवश्यकताओं और प्रदर्शन संबंधी विचारों के आधार पर सुविधा को सक्षम या अक्षम करना उचित है। वर्तमान में, फोवेटेड कार्यक्षमता केवल VIVE OpenXR SDK पर OpenGL ES में समर्थित है।

  • मूल डेवलपर के लिए, यह सुविधा उपलब्ध है, लेकिन वर्तमान में, कोई पूर्व नहीं हैampलेस प्रदान किए जाते हैं।
  • यूनिटी डेवलपर के लिए, इस गाइड का संदर्भ लें।
  • अनरियल डेवलपर के लिए, फिलहाल यह सुविधा समर्थित नहीं है।

4.1.5 रेंडर मास्क [अनरियल का समर्थन नहीं करता]
यहां अवधारणा 3.1.8 रेंडर मास्क के समान है।

  • नेटिव डेवलपर के लिए, मेश प्राप्त करने के लिए XrVisibilityMaskKHR का उपयोग करें। दृश्य को रेंडर करने से पहले, दृश्य को रेंडर करने से पहले डेप्थ बफर मानों को पॉप्युलेट करने के लिए इस मेश का उपयोग करें।
  • यूनिटी डेवलपर के लिए, रेंडर मास्क सुविधा OpenGL ES के लिए डिफ़ॉल्ट रूप से सक्षम है, और इसे निम्नलिखित कोड के साथ अक्षम किया जा सकता है; Vulkan वर्तमान में इस सुविधा का समर्थन नहीं करता है। //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
  • अनरियल डेवलपर के लिए, वर्तमान में रेंडर मास्क सुविधा का समर्थन नहीं करता है।

4.2 एमआर सामग्री
OpenXR वर्तमान में पासथ्रू क्वालिटी और फ़्रेम रेट सेट करने का समर्थन नहीं करता है। हम पासथ्रू सुविधा को ऑप्टिमाइज़ और ठीक करना जारी रखेंगे, इसलिए यह अनुशंसा की जाती है कि डेवलपर्स डिवाइस के FOTA संस्करण को अपडेट रखें ताकि इसे अद्यतित रखा जा सके।

सामान्य अनुकूलन

5.1 उच्च प्रदर्शन मोड बंद करें
"हाई परफॉरमेंस मोड" को बंद करने से डिवाइस का डिस्प्ले साइज़ कम हो सकता है, जिससे GPU का उपयोग कम हो सकता है। इसका नुकसान स्क्रीन रिज़ॉल्यूशन में कमी है। आप इसे सक्षम करने या न करने का निर्णय लेने के लिए गुणवत्ता और प्रदर्शन को संतुलित कर सकते हैं।
VIVE फोकस 3 के लिए सेटिंग स्थान चित्र 5-1-1 में दर्शाया गया है:

VIVE VR रेंडरिंग प्रदर्शन - चित्र 5

VIVE XR Elite के लिए सेटिंग स्थान चित्र 5-1-2 में दर्शाया गया है:

VIVE VR रेंडरिंग प्रदर्शन - चित्र 6

5.2 मल्टीampलिंग एंटी-अलियासिंग
मल्टीज़ampलिंग एक एंटी-अलियासिंग तकनीक है जिसका उपयोग दांतेदार किनारों को चिकना करने के लिए किया जाता है, आमतौर पर हार्डवेयर के माध्यम से त्वरित किया जाता है, जिससे GPU प्रदर्शन लागत होती है। हम MSAA को 2x से अधिक सेट न करने की सलाह देते हैं क्योंकि अधिक उच्च मूल्य अधिक GPU उपयोग का उपभोग करेगा।

  • मूल डेवलपर के लिए, MSAA OpenGL ES exsampले इसका उल्लेख कर सकता है; एमएसएए वल्कन पूर्वampler इसका उल्लेख कर सकते हैं.
    एड्रेनो जीपीयू एक एक्सटेंशन प्रदान करता है जो MSAA को अनुकूलित करता है।
  • यूनिटी डेवलपर के लिए, इस गिल्ड का संदर्भ लें।
  • अनरियल डेवलपर के लिए, इस गिल्ड को देखें। अनरियल ने पोस्ट प्रोसेसिंग एंटी-अलियासिंग भी प्रदान किया है, इस गिल्ड को देखें।

5.3 जीएमईएम लोड/स्टोर
एड्रेनो जीपीयू आर्किटेक्चर में, एक ऐसी सुविधा है, जहां रेंडर टारगेट को बांधते समय, यदि रेंडर टारगेट साफ़ या अमान्य नहीं होता है, तो हर बार रेंडरिंग होने पर, रेंडर टारगेट में मान ग्राफ़िक्स मेमोरी में लोड हो जाते हैं, जिसे GMEM लोड कहा जाता है। यदि पिछले मानों की आवश्यकता नहीं है, तो रेंडरिंग से पहले रेंडर टारगेट को साफ़ या अमान्य करें, GPU प्रदर्शन को बेहतर बनाने के लिए इस स्थिति से बचा जा सकता है।
आप निम्न विधियों का उपयोग करके GMEM लोड से बच सकते हैं। OpenGL ES में, FBO को बाइंड करने के बाद, आप रंग, गहराई और स्टेंसिल बफर को साफ़ करने के लिए glClear और glClearDepth को कॉल कर सकते हैं, या निर्दिष्ट रेंडर लक्ष्य को अमान्य करने के लिए glInvalidateFramebuffer को कॉल कर सकते हैं। Vulkan में, अतिरिक्त निर्देश आवश्यक नहीं हैं; आप स्पष्ट रूप से सेट कर सकते हैं कि VkAttachmentDescription.loadOp में उपयोग करने से पहले अटैचमेंट को साफ़ करना है या नहीं।
इसी तरह, टाइल रेंडर के परिणाम को ग्राफ़िक्स मेमोरी से वापस मेन मेमोरी में संग्रहीत करना GMEM स्टोर कहलाता है; यह ऑपरेशन GPU के लिए भी महंगा है। इससे बचने के लिए, हम अनावश्यक स्टोर ऑपरेशन को रोकने के लिए केवल आवश्यक रेंडर टारगेट को बाइंड करने की सलाह देते हैं।

5.4 रचना परत (बहु परत)
मल्टी-लेयर का उपयोग करके प्रदर्शित टेक्सचर में बेहतर दृश्य गुणवत्ता होती है। हालाँकि, यह सुविधा परतों की संख्या और बनावट के आकार के साथ GPU के प्रदर्शन को काफी हद तक बढ़ाती है। हम तीन से अधिक परतों की अनुशंसा नहीं करते हैं।

  • मूल निवासी डेवलपर के लिए,
    o VIVE Wave SDK प्रत्येक परत के लिए डेटा पास करने के लिए WVR_SubmitFrameLayers का उपयोग करता है।
    o VIVE OpenXR SDK परत डेटा को XrFrameEndInfo में रखता है और इसे xrEndFrame के माध्यम से सबमिट करता है।
  • यूनिटी डेवलपर के लिए,
    o VIVE Wave SDK सेटिंग्स के लिए, इस गाइड का संदर्भ लें,
    o VIVE OpenXR सेटिंग्स के लिए, इस गाइड का संदर्भ लें।
  • अवास्तविक डेवलपर के लिए,
    o VIVE Wave SDK सेटिंग्स के लिए, इस गाइड का संदर्भ लें।
    o VIVE OpenXR सेटिंग्स के लिए, इस गाइड का संदर्भ लें।

5.5 सीपीयू स्पाइक
जब CPU पर अधिक लोड होता है, तो कुछ बैकग्राउंड प्रोसेस थ्रेड्स की प्राथमिकता अधिक होती है, जिससे मूल निष्पादन बाधित हो सकता है। हम यह गारंटी नहीं दे सकते कि कंटेंट एप्लीकेशन अन्य थ्रेड द्वारा बाधित नहीं होगा।
यदि ऐसी समस्याएँ आती हैं, तो आप थ्रेड प्राथमिकता बढ़ाने का प्रयास कर सकते हैं, यह देखने के लिए कि क्या यह समस्या हल करता है। लेकिन यदि आप डिवाइस के लिए ऑप्टिमाइज़ करने के लिए थ्रेड कॉन्फ़िगरेशन बदलते हैं, तो आपको यह जांचना होगा कि क्या इसका कोई नकारात्मक प्रभाव पड़ता है।

  • यूनिटी डेवलपर के लिए, एंड्रॉइड थ्रेड कॉन्फ़िगरेशन सुविधा देखें। यदि आप VIVE Wave SDK का उपयोग कर रहे हैं, तो हमारे पास WaveXRSettings में एक सुविधा है जो आपको प्राथमिकता को समायोजित करने की अनुमति देती है, जैसा कि चित्र 5-5-2 में दिखाया गया है। छोटा मान उच्च प्राथमिकता को दर्शाता है।

VIVE VR रेंडरिंग प्रदर्शन - चित्र 7

  • जब तक आप इंजन कोड को संशोधित नहीं करते, तब तक बाहरी सेटिंग्स के माध्यम से गेम थ्रेड, रेंडरिंग थ्रेड और RHI थ्रेड प्राथमिकता को बदलने की कोई विधि नहीं है।

कॉपीराइट © 2024 HTC कॉर्पोरेशन। सभी अधिकार सुरक्षितVIVE लोगो

दस्तावेज़ / संसाधन

VIVE VR रेंडरिंग प्रदर्शन [पीडीएफ] उपयोगकर्ता गाइड
वीआर रेंडरिंग प्रदर्शन, रेंडरिंग प्रदर्शन, प्रदर्शन

संदर्भ

एक टिप्पणी छोड़ें

आपकी ईमेल आईडी प्रकाशित नहीं की जाएगी। आवश्यक फ़ील्ड चिह्नित हैं *