व्हीआर रेंडरिंग कामगिरी
ट्यूनिंग आणि ऑप्टिमायझेशन
परिचय
मर्यादित संसाधनांच्या हार्डवेअरवर इष्टतम VR अनुभव मिळवणे हे एक गुळगुळीत आणि आरामदायी वापरकर्ता अनुभव देण्यासाठी महत्त्वाचे आहे. जर कंटेंट रेंडरिंगचा फ्रेम रेट डिव्हाइसच्या रिफ्रेश रेटपेक्षा कमी झाला किंवा अस्थिर झाला, तर त्यामुळे फ्रेम जडर आणि स्टटिंग, मोशन सिकनेस इत्यादी समस्या उद्भवतील. शेवटी वापरकर्त्याच्या अनुभवावर नकारात्मक परिणाम होईल. म्हणूनच, आनंददायी अनुभव सुनिश्चित करण्यासाठी कंटेंट परफॉर्मन्स ऑप्टिमाइझ करणे खूप महत्वाचे आहे.
परफॉर्मन्स ट्यूनिंग सुरू करण्यापूर्वी, अकार्यक्षम ट्यूनिंग टाळण्यासाठी परफॉर्मन्समधील अडथळे कुठे आहेत हे समजून घेणे महत्त्वाचे आहे. हे दस्तऐवज डेव्हलपर्सना परफॉर्मन्समधील अडथळे ओळखण्यास आणि रेंडरिंग परफॉर्मन्स समस्यांचे निराकरण करण्यासाठी उपाय ऑफर करण्यास मदत करण्यासाठी डिझाइन केले आहे.
हा दस्तऐवज खालील विभागांमध्ये विभागलेला आहे:
- प्रकरण २: अडथळे ओळखा - हा विभाग विकासकांना अडथळे कुठे आहेत हे ओळखण्यास मदत करतो.
- प्रकरण ३ आणि ४: VIVE Wave आणि VIVE OpenXR सेटिंग्ज - हे विभाग VIVE Wave आणि OpenXR अॅप्ससाठी CPU/GPU कार्यक्षमतेवर परिणाम करू शकणार्या विशिष्ट सेटिंग्जची रूपरेषा देतात. काही सुधारणा आहे का हे निर्धारित करण्यासाठी डेव्हलपर्स कार्यक्षमतेच्या अडथळ्यांवर आधारित ही वैशिष्ट्ये सक्षम किंवा अक्षम करण्याचा प्रयोग करू शकतात.
- प्रकरण ५: सामान्य ऑप्टिमायझेशन - हा विभाग काही सामान्य ऑप्टिमायझेशन पद्धती आणि अनुभव सामायिक करतो.
अडथळा ओळखा
जेव्हा HMD हालचाल करत असेल, जर VR/MR अॅपमध्ये फ्रेम जिटर किंवा ब्लॅक एज असेल, तर ते सहसा खराब रेंडरिंग परफॉर्मन्स समस्येमुळे होते. सामान्यतः, रेंडरिंग परफॉर्मन्स समस्या 2 प्रकारांमध्ये वर्गीकृत केल्या जाऊ शकतात: CPU-बाउंड किंवा GPU-बाउंड. अकार्यक्षम ट्यूनिंग टाळण्यासाठी सुरुवातीलाच तुमच्या अॅपसाठी कोणत्या प्रकारचे बाउंड खूप महत्वाचे आहे हे समजून घ्या.
या प्रकरणात, आम्ही सोप्या पायऱ्या देतो ज्यामुळे तुम्हाला कामगिरीच्या समस्या कुठे आहेत हे त्वरीत ओळखता येते.
२.१ कंटेंट रेंडरिंग FPS तपासा
प्रथम, आपण कंटेंट FPS तपासून सुरुवात करू, म्हणजेच कंटेंट प्रति सेकंद किती फ्रेम रेंडर करतो. तो डिस्प्ले फ्रेमरेटवर राखला पाहिजे आणि स्थिर ठेवला पाहिजे. अन्यथा, फ्रेममध्ये गोंधळ निर्माण होऊ शकतो.
जर तुमचे अॅप्लिकेशन SDK VIVE WAVE SDK 6.0.0 किंवा नंतरचे वापरत असेल, तर तुम्ही FPS तपासण्यासाठी खालील adb कमांड वापरू शकता. DK 6.0.0
$adb लॉगकॅट -एस व्हीआरमेट्रिक
तुम्हाला खालील लॉग डेटा दिसेल.
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: [FPS] L उपस्थित:90.00 वगळा:0 (0.592301, -0.015502, 0.805539, 0.006773)
“नवीन टेक्सचर” नंतर येणारी संख्या सध्याची सामग्री FPS दर्शवते. “R उपस्थित” आणि “L उपस्थित” नंतर येणारी संख्या डिस्प्ले फ्रेमरेट दर्शवते.
कधीकधी, कंटेंट FPS आणि डिस्प्ले फ्रेमरेटमध्ये थोडी तफावत असू शकते.
उदाampतर, वरील बाबतीत, ८९.८ FPS ला ९० FPS मानले जाऊ शकते.
जर अॅपचा कंटेंट FPS डिस्प्ले फ्रेमरेटपेक्षा सातत्याने कमी असेल किंवा अस्थिर राहिला तर ते रेंडरिंग परफॉर्मन्स समस्येचे संकेत देते. म्हणून, पुढची पायरी म्हणजे अडथळा CPU कडून येत आहे की GPU कडून येत आहे हे ओळखणे.
२.२ CPU आणि GPU वापर तपासा
जर तुमचे अॅप्लिकेशन SDK VIVE WAVE SDK 6.0.0 किंवा नंतरचे वापरत असेल, तर तुम्ही FPS तपासण्यासाठी खालील adb कमांड वापरू शकता.
$adb लॉगकॅट -s व्हीआरमेट्रिक
तुम्हाला खालील लॉग डेटा दिसेल.
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 वापर २७% आणि GPU वापर ७२% आहे. जर तुमची Wave SDK आवृत्ती ६.०.० पेक्षा कमी असेल, तर रेंडरिंग कार्यप्रदर्शन आणि इतर ऑप्टिमायझेशन वाढविण्यासाठी नवीनतम आवृत्तीवर अपग्रेड करण्याची शिफारस केली जाते.
VIVE OpenXR अॅपसाठी, तुम्ही CPU आणि GPU वापर तपासण्यासाठी खालील कमांड वापरू शकता.
# लिनक्स/उबंटू वर
$ adb लॉगकॅट | grep CPU_USAGE
# पॉवरशेल वर
$ adb लॉगकॅट | सिलेक्ट-स्ट्रिंग -पॅटर्न CPU_USAGE
तुम्हाला खालील लॉग दिसेल.
सीपीयू सरासरी सीपीयू० सीपीयू१ सीपीयू२ सीपीयू३ सीपीयू४ सीपीयू५ सीपीयू६ सीपीयू७ जीपीयू सीपीयू_वापर [लोड] २५.६७% ३२.२२% २५.२९% ३०.७७% २९.३५% २१.३५% २२.०९% १८.३९% २४.१४% ७३ %
जर तुम्हाला असे आढळले की FPS डिस्प्ले फ्रेम रेट राखू शकत नाही आणि GPU वापर देखील खूप जास्त आहे, सामान्यतः 85% पेक्षा जास्त आहे, तर तुम्ही Eyebuffer Resolution (विभाग 3.1.2, विभाग 4.1.2) समायोजित करून पाहू शकता की ते FPS सुधारते का. जर या समायोजनामुळे चांगले परिणाम मिळत असतील तर
कामगिरी पाहता, आपण असा निष्कर्ष काढू शकतो की ही समस्या GPU-बद्ध आहे आणि त्यानुसार आपले ऑप्टिमायझेशन प्रयत्न केंद्रित करू शकतो.
दुसरीकडे, जर आयबफर रिझोल्यूशन समायोजित केल्याने लक्षणीय कामगिरी सुधारणा होत नसेल, तर अडथळा कदाचित CPU-बद्ध असेल आणि आपण CPU कामगिरी ऑप्टिमाइझ करण्यावर लक्ष केंद्रित केले पाहिजे.
हे देखील शक्य आहे की अनुप्रयोग एकाच वेळी CPU-बद्ध आणि GPU-बद्ध असेल. अशा परिस्थितीत, संतुलित कामगिरी सुधारणा साध्य करण्यासाठी CPU आणि GPU दोन्हीवर ऑप्टिमायझेशन प्रयत्न लागू केले पाहिजेत.
२.३ GPU-बाउंड
जेव्हा VR अॅप GPU-बाउंड असते, तेव्हा याचा अर्थ असा होतो की GPU हा प्राथमिक अडथळा आहे आणि तो अॅप्लिकेशनच्या रेंडरिंग मागण्या पूर्ण करू शकत नाही. GPU-बाउंड समस्या कमी करण्यासाठी, खालील शिफारसी विचारात घ्या:
प्रथम, RenderDoc किंवा Game Engine pro सारखी प्रोफाइलिंग टूल्स वापरा.fileआर (युनिटी प्रो)filer, Unreal Insights) वापरून GPU आपला बहुतेक वेळ कुठे घालवत आहे याचे विश्लेषण करा. सर्वात महागड्या ऑपरेशन्स ओळखा आणि त्यांना ऑप्टिमाइझ करण्यावर लक्ष केंद्रित करा.
नेटिव्ह डेव्हलपरसाठी, तुम्ही कोणत्या ड्रॉ कॉलमुळे जास्त GPU लोड होत आहे हे ओळखण्यासाठी RenderDoc वापरू शकता.
युनिटी डेव्हलपरसाठी, तुम्ही युनिटी या दस्तऐवजाचे अनुसरण करू शकता किंवा रेंडरिंग कामगिरी समस्येचे विश्लेषण करण्यासाठी रेंडरडॉक वापरू शकता आणि तुमचा अनुप्रयोग ऑप्टिमाइझ करण्यासाठी मार्गदर्शनासाठी युनिटी ग्राफिक्स ऑप्टिमायझेशन दस्तऐवजीकरणाचे अनुसरण करू शकता.
अनरिअल डेव्हलपरसाठी, तुम्ही GPU व्हिज्युअलायझर वापरू शकता किंवा रेंडरडॉक वापरून रेंडरिंग परफॉर्मन्स समस्येचे विश्लेषण करू शकता आणि तुमचा अॅप्लिकेशन ऑप्टिमाइझ करण्यासाठी मार्गदर्शनासाठी अनरिअल परफॉर्मन्स मार्गदर्शक तत्त्वांचे अनुसरण करू शकता.
दुसरे म्हणजे, तुम्ही GPU लोडिंग कमी करण्यासाठी काही Wave वैशिष्ट्ये किंवा सेटिंग्ज समायोजित करण्याचा प्रयत्न देखील करू शकता.
- डिस्प्ले रिफ्रेश रेट हळू सेट करा (विभाग ३.१.१, विभाग ४.१.१)
- आयबफर रिझोल्यूशन समायोजित करा (विभाग 3.1.2, विभाग 4.1.2), 14.1.1)
- फोव्हिएशन सक्षम करण्याचा प्रयत्न करा (विभाग ३.१.४, विभाग ४.१.४).
जर तुमचे अॅप देखील MR अॅप असेल, तर तुम्ही पासथ्रू सेटिंग्ज देखील समायोजित करू शकता.
- पासथ्रू इमेज क्वालिटी कमी समायोजित करा. (विभाग ३.२.१)
- पासथ्रू फ्रेमरेट हळू समायोजित करा. (विभाग ३.२.२).
GPU कामगिरीबद्दल अधिक इतर सेटिंग्जसाठी, तुम्ही धडा 2.6 पाहू शकता.
२.४ सीपीयू-बाउंड
जेव्हा VR अॅप CPU-बद्ध असते, तेव्हा याचा अर्थ CPU हा प्राथमिक अडथळा आहे, खालील शिफारसी विचारात घ्या:
प्रथम, सिस्ट्रेस किंवा गेम इंजिन प्रो सारख्या प्रोफाइलिंग टूल्सचा वापर करा.fileआर (युनिटी प्रो)filer, Unreal Insights) तुमच्या कोडचे कोणते भाग सर्वात जास्त CPU संसाधने वापरत आहेत याचे विश्लेषण आणि ओळख करण्यासाठी. या क्षेत्रांना ऑप्टिमायझ करण्यावर लक्ष केंद्रित करा आणि CPU भार कमी करण्यासाठी संगणकीयदृष्ट्या गहन अल्गोरिदम रिफॅक्टर करा.
- नेटिव्ह डेव्हलपरसाठी, तुम्ही प्रो करण्यासाठी सिस्ट्रेस वापरू शकताfileतुमचा प्रकल्प.
- युनिटी डेव्हलपरसाठी, तुम्ही CPU वापर प्रो वापरू शकता.fileCPU कामगिरी समस्या शोधण्यासाठी r मॉड्यूल.
- अनरिअल डेव्हलपरसाठी, तुम्ही सीपीयू कामगिरी समस्या शोधण्यासाठी अनरिअलच्या अंतर्दृष्टी वापरू शकता.
दुसरे म्हणजे, तुम्ही GPU लोडिंग कमी करण्यासाठी काही Wave वैशिष्ट्ये किंवा सेटिंग्ज समायोजित करण्याचा प्रयत्न देखील करू शकता.
- डिस्प्ले रिफ्रेश रेट हळू सेट करा (विभाग ३.१.१, विभाग ४.१.१)
- मल्टी- वापराView प्रस्तुतीकरण (विभाग ३.१.४, विभाग ४.१.४)
जर तुमचे अॅप देखील MR अॅप असेल, तर तुम्ही पासथ्रू सेटिंग्ज देखील समायोजित करू शकता.
- पासथ्रू फ्रेमरेट हळू समायोजित करा (विभाग 3.2.2).
CPU कामगिरीबद्दल अधिक इतर सेटिंग्जसाठी, तुम्ही धडा 2.6 पाहू शकता.
2.5 सारांश
शेवटी, आम्ही वरील कामगिरी तपासणी कार्यप्रवाह आकृती २-५-१ मध्ये आयोजित केला आहे. सामग्रीचा FPS तपासून सुरुवात करा. जर ते डिस्प्ले फ्रेमरेटपेक्षा कमी असेल किंवा अस्थिर राहिले तर ते GPU-बाउंड आहे की CPUबाउंड आहे हे निर्धारित करण्यासाठी GPU/CPU वापराचे विश्लेषण करा. शेवटी, एक व्यावसायिक वापराfileसंभाव्य कामगिरी समस्या ओळखण्यासाठी किंवा CPU कामगिरी ऑप्टिमाइझ करण्यासाठी वेव्ह वैशिष्ट्ये किंवा सेटिंग्ज समायोजित करण्यासाठी r.
२.६ कोणत्या सेटिंग्ज CPU/GPU लोडिंग सुधारू शकतात याचा जलद संदर्भ
CPU/GPU लोडिंगशी संबंधित SDK च्या सेटिंग्जची यादी खाली दिली आहे. संबंधित ऑप्टिमायझेशन सेटिंग्ज तपासण्यासाठी तुम्ही अॅपच्या अडथळ्यांवर आधारित असू शकता.
CPU शी संबंधित:
- VIVE वेव्ह SDK सेटिंग
o VR सामग्री
▪ ३.१.१ डिस्प्ले रिफ्रेश रेट
▪ ३.१.४ बहु-View प्रस्तुतीकरण
▪ ३.१.६ अनुकूली गुणवत्ता
▪ ३.१.७ अॅडॉप्टिव्ह मोशन कंपोझिटर
o एमआर सामग्री
▪ ३.२.२ पासथ्रू फ्रेम रेट समायोजित करा - VIVE OpenXR SDK सेटिंग
o VR सामग्री
▪ ३.१.१ डिस्प्ले रिफ्रेश रेट
▪ ३.१.४ बहु-View प्रस्तुतीकरण - सामान्य ऑप्टिमायझेशन
o ५.५ सीपीयू स्पाइक
GPU शी संबंधित:
- VIVE वेव्ह SDK सेटिंग
o VR सामग्री
▪ ३.१.१ डिस्प्ले रिफ्रेश रेट
▪ ३.१.२ आयबफर रिझोल्यूशन
▪ ३.१.४ बहु-View प्रस्तुतीकरण
▪ ३.१.४ प्रोत्साहन
▪ ३.१.५ फ्रेम शार्पनेस एन्हांसमेंट (FSE)
▪ ३.१.६ अनुकूली गुणवत्ता
▪ ३.१.७ अॅडॉप्टिव्ह मोशन कंपोझिटर
▪ ३.१.८ रेंडर मास्क [अवास्तविकतेला समर्थन देत नाही] o एमआर कंटेंट
▪ ३.२.१ पासथ्रू गुणवत्ता समायोजित करा
▪ ३.२.२ पासथ्रू फ्रेम रेट समायोजित करा - VIVE OpenXR SDK सेटिंग
o VR सामग्री
▪ ३.१.१ डिस्प्ले रिफ्रेश रेट
▪ ३.१.२ आयबफर रिझोल्यूशन
▪ ३.१.४ बहु-View प्रस्तुतीकरण
▪ ४.१.४ प्रस्तावना [अवास्तविकतेला समर्थन देत नाही] ▪ ४.१.५ रेंडर मास्क [अवास्तविकतेला समर्थन देत नाही] - सामान्य ऑप्टिमायझेशन
o ५.१ उच्च कार्यक्षमता मोड बंद करा
o ५.२ मल्टीजampलिंग
o ५.३ GMEM लोड/स्टोअर
o ५.४ रचना स्तर (मल्टी लेयर)
VIVE वेव्ह सेटिंग
VIVE Wave हे एक ओपन प्लॅटफॉर्म आणि टूलसेट आहे जे तुम्हाला सहजपणे VR कंटेंट विकसित करू देते आणि तृतीय-पक्ष भागीदारांसाठी उच्च-कार्यक्षमता डिव्हाइस ऑप्टिमायझेशन प्रदान करते. VIVE Wave युनिटी आणि अनरिअल गेम इंजिनला सपोर्ट करते.
आम्ही सतत विविध बग ऑप्टिमाइझ करतो आणि सोडवतो, म्हणून आम्ही SDK अद्ययावत ठेवण्याची शिफारस केली आहे.
सध्या, VIVE Wave फक्त OpenGL ES ला सपोर्ट करते. येथे GPU कामगिरीवरील प्रभावानुसार क्रमवारी लावलेल्या वैशिष्ट्यांची यादी आहे. आपण हे दोन भागांमध्ये विभागू: VR सामग्री आणि MR सामग्री.
३.१ व्हीआर सामग्री
३.१.१ डिस्प्ले रिफ्रेश रेट
जास्त रिफ्रेश दरांमुळे सहज दृश्ये मिळतात, परंतु सिस्टम लोड वाढण्याची किंमत मोजावी लागते. उलट, कमी रिफ्रेश दरांमुळे सिस्टम लोड कमी होतो, परंतु परिणामी कमी सहज दृश्ये मिळतात. जर अॅपमध्ये CPU/GPU बाउंड समस्या असेल, तर तुम्ही ही समस्या कमी करण्यासाठी डिस्प्ले रिफ्रेश दर कमी करण्याचा प्रयत्न करू शकता.
- मूळ विकासकासाठी, WVR_SetFrameRate पहा.
- युनिटी डेव्हलपरसाठी, ही मार्गदर्शक पहा.
- अवास्तविक विकसकांसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
३.१.२ आयबफर रिझोल्यूशन
आयबफर रिझोल्यूशन म्हणजे कंटेंट अॅप रेंडर करण्यासाठी टेक्सचरचा आकार, रेंडर केलेले टेक्सचर पोस्टिंग प्रक्रिया करण्यासाठी रनटाइममध्ये सबमिट केले जाईल आणि HMD डिस्प्लेवर सादर केले जाईल.
मोठ्या आय बफर आकारामुळे स्पष्ट आणि अधिक तपशीलवार दृश्ये मिळू शकतात, परंतु त्यामुळे GPU वर देखील मोठा भार पडतो. म्हणून, दृश्य गुणवत्ता आणि कामगिरी यांच्यात योग्य संतुलन शोधणे आवश्यक आहे.
जर अॅपमध्ये GPU बाउंड समस्या असेल, तर तुम्ही स्केल फॅक्टरचा गुणाकार करून आयबफरचा आकार कमी करण्याचा प्रयत्न करू शकता. तथापि, आम्ही स्केल फॅक्टर 0.7 पेक्षा कमी न करण्याची शिफारस करतो, कारण यामुळे अस्वीकार्य दृश्य गुणवत्ता येऊ शकते.
- मूळ विकसकांसाठी, WVR_ObtainTextureQueue पहा. आकार समायोजित करताना, तुम्ही रुंदी आणि उंची गुणोत्तराने गुणाकार करावी.
- युनिटी डेव्हलपरसाठी, WaveXRSettings पहा.
किंवा, तुम्ही belwoe या कोडद्वारे बदल करू शकता.
XRSettings.eyeTextureResolutionScale = रिझोल्यूशनस्केलव्हॅल्यू; // C# - अवास्तविक विकसकांसाठी, सेटपिक्सेलडेन्सिटी पहा.
३.९.१ बहु-View प्रस्तुतीकरण
पारंपारिक रेंडरिंगमध्ये, आपण डावे आणि उजवे डोळे वेगवेगळे काढतो, ज्यासाठी एकाच दृश्यासाठी दोन ड्रॉ कॉल आवश्यक असतात. बहु-View रेंडरिंग फक्त एक ड्रॉ कॉल करून ही समस्या सोडवते.
हे वैशिष्ट्य ड्रॉ कॉलची संख्या कमी करून CPU भार कमी करते. GPU चे काही फायदे देखील आहेत, व्हर्टेक्स शेडरचा वर्कलोड देखील कमी होतो कारण त्याला दुसऱ्या डोळ्यासाठी अतिरिक्त शेडर चालवण्याची आवश्यकता नसते, परंतु फ्रॅगमेंट शेडरचा वर्कलोड अपरिवर्तित राहतो कारण त्याला दोन्ही डोळ्यांसाठी प्रत्येक पिक्सेलचे मूल्यांकन करावे लागते. आम्ही हे वैशिष्ट्य सक्षम करण्याची शिफारस करतो.
- नेटिव्ह डेव्हलपरसाठी, तुम्ही wvr_native_hellovr s चा संदर्भ घेऊ शकताampले
- युनिटी डेव्हलपरसाठी, रेंडर मोड पहा, सिंगल पास मल्टी- आहे.view वैशिष्ट्य
- अवास्तविक विकसकांसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
३.१.४ प्रेरणा
फोव्हेटेड रेंडरिंग प्रामुख्याने GPU भार कमी करण्यासाठी डिझाइन केलेले आहे. ते डिस्प्लेच्या परिघातील फ्रेम तपशील कमी करते आणि फील्डच्या मध्यभागी उच्च रिझोल्यूशन तपशील राखते. view. जर अॅपमध्ये GPU बाउंड समस्या असेल, तर तुम्ही Foveation रेंडरिंग वापरून पाहू शकता.
फोव्हिएशन वापरताना काही गोष्टी लक्षात ठेवल्या पाहिजेत:
➢ वापरकर्त्यांना सामान्यतः डिफॉल्ट फोव्हिएशन मोड लागू करताना पेरिफेरल प्रदेशांमध्ये कमी झालेले तपशील लक्षात येत नाहीत. परंतु जर फोव्हिएशनची पेरिफेरल गुणवत्ता खूप कमी सेट केली असेल, तर ती वापरकर्त्याला लक्षात येऊ शकते.
➢ विशिष्ट पोत असलेल्या साहित्यांवर फोव्हिएशनचे परिणाम अधिक लक्षात येण्यासारखे असू शकतात, जे वापरकर्त्याचे लक्ष वेधून घेऊ शकतात. विकासकांना याची जाणीव असावी आणि त्यानुसार त्याचे मूल्यांकन करावे.
➢ फोव्हेटेड रेंडरिंग फीचर सक्षम करण्यासाठी एक निश्चित GPU कामगिरी खर्च येतो, जो आय बफरच्या आकारानुसार 1% ते 6% दरम्यान बदलू शकतो. सीनमध्ये साधे शेडर वापरताना, संसाधने वाचवण्यापासून मिळणारा कामगिरीचा फायदा निश्चित GPU कामगिरी खर्चापेक्षा कमी असू शकतो, परिणामी कामगिरीत घट होऊ शकते.
- मूळ विकासकांसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
- युनिटी डेव्हलपरसाठी, या मार्गदर्शकाचा संदर्भ घ्या. विशेष म्हणजे, जेव्हा तुम्ही पोस्ट-प्रोसेसिंग किंवा HDR सक्षम करता तेव्हा फोव्हिएशन पूर्णपणे वापरता येत नाही. कारण युनिटी ऑब्जेक्ट्सना रनटाइम-जनरेटेड प्रेझेंटच्या फोव्हिएशनला समर्थन देणाऱ्या रेंडर टेक्सचरऐवजी, स्वतःच्या जनरेटेड रेंडर टेक्सचरवर रेंडर करेल.
- अवास्तविक डेव्हलपरसाठी, या मार्गदर्शकाचा संदर्भ घ्या. विशेष म्हणजे, मल्टी-वर फोव्हेशन पूर्णपणे वापरले जाऊ शकत नाही.View रेंडरिंग, कारण अनरिअल फोव्हिएशनला सपोर्ट करणाऱ्या रनटाइम-जनरेटेड रेंडर टेक्सचरवर ऑब्जेक्ट्स थेट रेंडर करू शकत नाही.
३.१.५ फ्रेम शार्पनेस एन्हांसमेंट (FSE)
शार्पन फिल्टर सादर करून शार्पन रेंडरिंग रिझल्ट देणारे FSE, कंटेंट अधिक स्पष्ट करू शकते आणि दृश्यातील मजकुराची स्पष्टता सुधारण्यासाठी खूप उपयुक्त ठरू शकते. जर अॅपमध्ये GPU बाउंड समस्या असेल, तर ते आवश्यक नसल्यास तुम्ही FSE अक्षम करण्याचा विचार करू शकता.
- मूळ विकासकांसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
- युनिटी डेव्हलपरसाठी, ही मार्गदर्शक पहा.
- अवास्तविक विकसकांसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
३.१.६ अनुकूली गुणवत्ता
बॅटरी वाचवण्यासाठी आणि डिव्हाइसचे रेंडरिंग परफॉर्मन्स राखण्यासाठी, हे वैशिष्ट्य CPU/GPU क्लॉकच्या वापराच्या आधारावर त्यांच्या कार्यप्रदर्शन पातळी स्वयंचलितपणे समायोजित करते. याव्यतिरिक्त, कार्यप्रदर्शन वाढविण्यासाठी इतर धोरणे लागू केली जाऊ शकतात, जसे की फोव्हेशन स्वयंचलितपणे सक्षम/अक्षम करणे किंवा उच्च/कमी लोड इव्हेंट्स प्राप्त झाल्यास सामग्री स्वतः समायोजित करू शकते.
- मूळ विकासकांसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
- युनिटी डेव्हलपरसाठी, या मार्गदर्शकाचा संदर्भ घ्या. आमच्या युनिटी प्लगइनमध्ये, आय बफर आकार सध्याच्या कामगिरीच्या आधारावर स्वयंचलितपणे समायोजित केला जाऊ शकतो; मजकूर आकार रिझोल्यूशन सूचीमध्ये खूप लहान असलेल्या स्केल मूल्यांना फिल्टर करेल. आम्ही किमान 20 dmm किंवा त्याहून मोठ्या आकाराच्या मजकुराची शिफारस करतो.
- अवास्तविक विकसकांसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
३.१.७ अॅडॉप्टिव्ह मोशन कंपोझिटर
हे वैशिष्ट्य प्रायोगिक वैशिष्ट्य आहे ज्यामध्ये UMC आणि PMC समाविष्ट आहेत. UMC फ्रेम रेट अर्धा कमी करेल आणि व्हिज्युअल स्मूथनेस ठेवण्यासाठी रिअल टाइममध्ये नवीन फ्रेम एक्स्ट्रापोलेट करेल. तथापि, ते काही लेटन्सी, आर्टिफॅक्ट्स आणि GPU लोडिंगसह येते.
पीएमसी प्रामुख्याने डेप्थ बफर वापरते जेणेकरून एटीडब्ल्यूला एचएमडी भाषांतरासाठी खाते देता येईल, जे 6-डॉफ भरपाईपर्यंत वाढेल. हे वैशिष्ट्य भाषांतर विलंब 1~2 फ्रेम्सने कमी करू शकते, परंतु GPU लोडिंग वाढवू शकते.
- मूळ विकासकांसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
- युनिटी डेव्हलपरसाठी, ही मार्गदर्शक पहा.
- अवास्तविक विकसकांसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
३.१.८ रेंडर मास्क [अवास्तविकतेला समर्थन देत नाही]
विरूपणानंतर कडांवरील पिक्सेल जवळजवळ अदृश्य होतात, रेंडर मास्क या अदृश्य पिक्सेलच्या डेप्थ बफर व्हॅल्यूजमध्ये बदल करतो. जर तुम्ही डेप्थ टेस्टिंग सक्षम केले तर, अर्ली-झेडमुळे, हे अदृश्य पिक्सेल रेंडर होणार नाहीत, ज्यामुळे GPU लोड कमी होईल. जर या अदृश्य भागात हेवी-लोडिंग रेंडरिंग ऑब्जेक्ट्स असतील तर हे वैशिष्ट्य उपयुक्त आहे; अन्यथा, जर या भागात रेंडरिंग ऑब्जेक्ट्स नसतील तर ते अक्षम करण्याची शिफारस केली जाते कारण ते कमी GPU वापरेल..
- नेटिव्ह डेव्हलपरसाठी, ही मार्गदर्शक पहा. रेंडरमास्क कॉल करण्यापूर्वी तुम्हाला डेप्थ बफर बंधनकारक करणे आवश्यक आहे; अन्यथा, ते कुचकामी ठरेल.
- युनिटी डेव्हलपरसाठी, ही मार्गदर्शक पहा.
- अवास्तविक विकसकांसाठी, सध्या रेंडर मास्क वैशिष्ट्यास समर्थन देत नाही.
३.२ एमआर कंटेंट
३.२.१ पासथ्रू गुणवत्ता समायोजित करा
पासथ्रू इमेज गुणवत्तेसाठी 3 स्तर आहेत:
➢ WVR_PassthroughImageQuality_DefaultMode – विशिष्ट मागणीशिवाय MR सामग्रीसाठी योग्य.
➢ WVR_PassthroughImageQuality_PerformanceMode – व्हर्च्युअल सीन रेंडरिंगसाठी अधिक GPU संसाधनाची आवश्यकता असलेल्या MR कंटेंटसाठी योग्य.
➢ WVR_PassthroughImageQuality_QualityMode – वापरकर्त्यांना आजूबाजूचे वातावरण स्पष्टपणे पाहण्याची परवानगी देणाऱ्या MR कंटेंटसाठी योग्य, परंतु कंटेंटच्या व्हर्च्युअल सीनमध्ये कामगिरीसाठी अधिक बारीक ट्यूनिंग असणे आवश्यक आहे.
GPU वापर कमी करण्यासाठी तुम्ही पासथ्रू गुणवत्ता परफॉर्मन्स मोडमध्ये समायोजित करू शकता.
- नेटिव्ह, युनिटी किंवा अनरिअल डेव्हलपरसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
३.२.२ पासथ्रू फ्रेम रेट समायोजित करा
डिस्प्ले रिफ्रेश रेट प्रमाणे, उच्च पासथ्रू फ्रेमरेटमुळे स्मूथ व्हिज्युअल्स मिळतात, परंतु सिस्टम लोड वाढण्याची किंमत मोजावी लागते. याउलट, कमी रीफ्रेश रेटमुळे सिस्टम लोड कमी होतो, परंतु परिणामी स्मूथ व्हिज्युअल्स कमी होतात. पासथ्रू फ्रेमरेटचे 2 मोड आहेत: बूस्ट आणि नॉर्मल.
- मूळ विकासकासाठी, WVR_SetPassthroughImageRate वापरून पासथ्रू गुणवत्ता समायोजित करू शकता.
- युनिटी डेव्हलपरसाठी, कोडद्वारे बदलता येते, उदा.ampसेटिंग्ज खालीलप्रमाणे आहेत // C#
इंटरऑप.डब्ल्यूव्हीआर_सेटपासथ्रूइमेजक्वालिटी(डब्ल्यूव्हीआर_पासथ्रूइमेजक्वालिटी.परफॉर्मन्समोड); - अवास्तविक विकसकांसाठी, सेटिंग पद्धतीसाठी आकृती 3-2-2 मधील ब्लूप्रिंट नोड पहा.
VIVE OpenXR सेटिंग
ओपनएक्सआर हे ओपन स्टँडर्ड आहे जे ख्रोनोस ग्रुपने विकसित केलेल्या विस्तृत श्रेणीतील व्हीआर डिव्हाइसेसवर चालणाऱ्या एक्सआर अॅप्लिकेशन्स विकसित करण्यासाठी एपीआयचा एक सामान्य संच प्रदान करते. व्हीआयव्हीई फोकस ३ आणि व्हीआयव्हीई एक्सआर एलिट देखील ओपनएक्सआरला समर्थन देतात, व्हीआयव्हीई ओपनएक्सआर एसडीके एचटीसी व्हीआर डिव्हाइसेससाठी व्यापक समर्थन प्रदान करते, ज्यामुळे डेव्हलपर्सना ऑलिन-वन तयार करण्याची आणि एचटीसी व्हीआर डिव्हाइसेसवर युनिटी आणि अनरिअल इंजिनसह सामग्री तयार करण्याची परवानगी मिळते. आम्ही सतत विविध बग ऑप्टिमाइझ करतो आणि सोडवतो, म्हणून डेव्हलपर्सना त्यांच्या डिव्हाइसची FOTA आवृत्ती अद्ययावत ठेवण्यासाठी अपडेट करण्याची शिफारस केली जाते. सध्या, व्हीआयव्हीई ओपनएक्सआर एसडीके ओपनजीएल ईएस आणि व्हल्कनला समर्थन देते.
३.१ व्हीआर सामग्री
३.१.१ डिस्प्ले रिफ्रेश रेट
येथील संकल्पना ३.१.१ डिस्प्ले रिफ्रेश रेट सारखीच आहे.
- नेटिव्ह डेव्हलपरसाठी, XrEventDataDisplayRefreshRateChangedFB पहा.
- युनिटी डेव्हलपरसाठी, ही मार्गदर्शक पहा.
- अवास्तविक विकसकांसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
३.१.२ आयबफर रिझोल्यूशन
येथील संकल्पना ३.१.२ आयबफर रिझोल्यूशन सारखीच आहे. आम्ही शिफारस करतो की स्केल फॅक्टर ०.७ पेक्षा कमी करू नका, कारण यामुळे दृश्यमान गुणवत्ता अस्वीकार्य होऊ शकते.
- मूळ विकसकांसाठी, xrCreateSwapchain पहा. आकार समायोजित करताना, तुम्ही रुंदी आणि उंची गुणोत्तराने गुणाकार करावी. ,
- युनिटी डेव्हलपरसाठी, खालील उदाहरण पहाampले // सी#
XRSettings.eyeTextureResolutionस्केल = ०.७f; //शिफारस केलेले १.०f~०.७f - अवास्तव सेटिंग्जसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
३.९.१ बहु-View प्रस्तुतीकरण
येथील संकल्पना ३.१.३ मल्टी-सारखीच आहे.View रेंडरिंग. हे वैशिष्ट्य CPU वरील भार कमी करते, GPU चे काही फायदे देखील आहेत. आम्ही हे वैशिष्ट्य सक्षम करण्याची शिफारस करतो.
- मूळ विकसकांसाठी, ख्रोनोसग्रुप एक ओपनएक्सआर मल्टी- प्रदान करते.View exampले, या मार्गदर्शकाचा संदर्भ घ्या.
- युनिटी डेव्हलपरसाठी, रेंडर मोड पहा, सिंगल पास मल्टी- आहे.view वैशिष्ट्य
- VIVE Wave सेटिंग्जप्रमाणे, Unreal डेव्हलपरसाठी, या मार्गदर्शकाचा संदर्भ घ्या.
४.१.४ प्रस्तावना [अवास्तविकतेला समर्थन देत नाही]
येथील संकल्पना ३.१.४ फोव्हिएशन सारखीच आहे. फोव्हिएटेड रेंडरिंग प्रामुख्याने जीपीयू लोड कमी करण्यासाठी डिझाइन केलेले आहे परंतु ते सक्षम केल्याने निश्चित जीपीयू कामगिरी खर्च येईल आणि जर फोव्हिएशन खूप कमी सेट केले असेल आणि काही साहित्य किंवा पोत वापरले गेले असेल तर ते खूप खराब होऊ शकते.
वापरकर्त्याला लक्षात येईल. म्हणून, तुमच्या विशिष्ट आवश्यकता आणि कामगिरीच्या विचारांवर आधारित हे वैशिष्ट्य सक्षम किंवा अक्षम करणे उचित आहे. सध्या, Foveated कार्यक्षमता फक्त VIVE OpenXR SDK वरील OpenGL ES मध्ये समर्थित आहे.
- नेटिव्ह डेव्हलपरसाठी, हे वैशिष्ट्य उपलब्ध आहे, परंतु सध्या, कोणतेही माजी नाहीamples प्रदान केले जातात.
- युनिटी डेव्हलपरसाठी, ही मार्गदर्शक पहा.
- अवास्तव विकसकासाठी, सध्या या वैशिष्ट्यास समर्थन देत नाही.
३.१.८ रेंडर मास्क [अवास्तविकतेला समर्थन देत नाही]
येथील संकल्पना ३.१.८ रेंडर मास्क सारखीच आहे.
- नेटिव्ह डेव्हलपरसाठी, मेश मिळविण्यासाठी XrVisibilityMaskKHR वापरा. सीन रेंडर करण्यापूर्वी, सीन रेंडर करण्यापूर्वी डेप्थ बफर व्हॅल्यूज पॉप्युलेट करण्यासाठी या मेशचा वापर करा.
- युनिटी डेव्हलपरसाठी, रेंडर मास्क वैशिष्ट्य OpenGL ES साठी डीफॉल्टनुसार सक्षम केलेले आहे आणि खालील कोडसह ते अक्षम केले जाऊ शकते; व्हल्कन सध्या या वैशिष्ट्यास समर्थन देत नाही. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
- अवास्तविक विकसकांसाठी, सध्या रेंडर मास्क वैशिष्ट्यास समर्थन देत नाही.
३.२ एमआर कंटेंट
OpenXR सध्या पासथ्रू गुणवत्ता आणि फ्रेम रेट सेट करण्यास समर्थन देत नाही. आम्ही पासथ्रू वैशिष्ट्य ऑप्टिमाइझ आणि दुरुस्त करत राहू, म्हणून डेव्हलपर्सनी डिव्हाइसची FOTA आवृत्ती अद्ययावत ठेवण्यासाठी अपडेट करावी अशी शिफारस केली जाते.
सामान्य ऑप्टिमायझेशन
५.१ हाय परफॉर्मन्स मोड बंद करा
"हाय परफॉर्मन्स मोड" बंद केल्याने डिव्हाइसचा डिस्प्ले आकार कमी होऊ शकतो, ज्यामुळे GPU वापर कमी होऊ शकतो. स्क्रीन रिझोल्यूशनमध्ये घट हा त्याचा तोटा आहे. ते सक्षम करायचे की नाही हे ठरवण्यासाठी तुम्ही गुणवत्ता आणि कामगिरी संतुलित करू शकता.
VIVE फोकस 3 चे सेटिंग स्थान आकृती 5-1-1 मध्ये दाखवले आहे:
VIVE XR Elite चे सेटिंग स्थान आकृती 5-1-2 मध्ये दाखवले आहे:
४.८ मल्टीampलिंग अँटी-अलायझिंग
मल्टीसampलिंग ही एक अँटी-अलायझिंग तंत्र आहे जी दातेरी कडा गुळगुळीत करण्यासाठी वापरली जाते, सामान्यतः हार्डवेअरद्वारे प्रवेगक केली जाते, ज्यामुळे GPU कामगिरीचा खर्च येतो. आम्ही MSAA 2x पेक्षा जास्त सेट करू नये अशी शिफारस करतो कारण जास्त उंची मूल्यामुळे GPU वापर जास्त होईल.
- मूळ विकसकासाठी, MSAA OpenGL ES exsample याचा संदर्भ घेऊ शकतो; MSAA वल्कन माजीampler याचा संदर्भ घेऊ शकतात.
अॅड्रेनो जीपीयू एक विस्तार प्रदान करतो जो एमएसएएला ऑप्टिमाइझ करतो. - युनिटी डेव्हलपरसाठी, या गिल्डचा संदर्भ घ्या.
- अनरिअल डेव्हलपरसाठी, या गिल्डचा संदर्भ घ्या. अनरिअलमध्ये पोस्ट प्रोसेसिंग अँटी-अलायझिंग देखील आहे, या गिल्डचा संदर्भ घ्या.
५.३ जीएमईएम लोड/स्टोअर
अॅड्रेनो GPU आर्किटेक्चरमध्ये, एक वैशिष्ट्य आहे जिथे, रेंडर टार्गेट बाइंड करताना, जर रेंडर टार्गेट साफ होत नसेल किंवा अवैध होत नसेल, तर प्रत्येक वेळी रेंडरिंग होते तेव्हा, रेंडर टार्गेटमधील मूल्ये ग्राफिक्स मेमरीमध्ये लोड केली जातात, ज्याला GMEM लोड म्हणतात. जर मागील मूल्यांची आवश्यकता नसेल, तर रेंडरिंग करण्यापूर्वी रेंडर टार्गेट साफ किंवा अवैध करणे, GPU कामगिरी सुधारण्यासाठी ही परिस्थिती टाळू शकते.
तुम्ही खालील पद्धती वापरून GMEM लोड टाळू शकता. OpenGL ES मध्ये, FBO ला बाइंड केल्यानंतर, तुम्ही रंग, खोली आणि स्टेन्सिल बफर साफ करण्यासाठी glClear आणि glClearDepth ला कॉल करू शकता किंवा निर्दिष्ट रेंडर टार्गेट अवैध करण्यासाठी glInvalidateFramebuffer ला कॉल करू शकता. Vulkan मध्ये, अतिरिक्त सूचना आवश्यक नाहीत; VkAttachmentDescription.loadOp मध्ये वापरण्यापूर्वी तुम्ही संलग्नक साफ करायचे की नाही हे स्पष्टपणे सेट करू शकता.
त्याचप्रमाणे, टाइल रेंडरचा निकाल ग्राफिक्स मेमरीमधून मेन मेमरीमध्ये परत साठवणे याला GMEM स्टोअर म्हणतात; हे ऑपरेशन GPU साठी देखील महाग आहे. हे टाळण्यासाठी, अनावश्यक स्टोअर ऑपरेशन्स टाळण्यासाठी आम्ही फक्त आवश्यक रेंडर टार्गेट्स बंधनकारक करण्याची शिफारस करतो.
५.४ रचना स्तर (बहुस्तरीय स्तर)
मल्टी-लेयर वापरून प्रदर्शित केलेल्या टेक्सचरची दृश्य गुणवत्ता चांगली असते. तथापि, हे वैशिष्ट्य लेयर्सची संख्या आणि टेक्सचरच्या आकारासह GPU कामगिरीमध्ये लक्षणीय वाढ करते. आम्ही तीन लेयर्सपेक्षा जास्त नसण्याची शिफारस करतो.
- मूळ विकासकासाठी,
प्रत्येक लेयरसाठी डेटा पास करण्यासाठी VIVE Wave SDK WVR_SubmitFrameLayers वापरते.
VIVE OpenXR SDK लेयर डेटा XrFrameEndInfo मध्ये ठेवते आणि xrEndFrame द्वारे सबमिट करते. - युनिटी डेव्हलपरसाठी,
o VIVE Wave SDK सेटिंग्ज, या मार्गदर्शकाचा संदर्भ घ्या,
o VIVE OpenXR सेटिंग्ज, या मार्गदर्शकाचा संदर्भ घ्या. - अवास्तव विकसकांसाठी,
o VIVE Wave SDK सेटिंग्ज, या मार्गदर्शकाचा संदर्भ घ्या.
o VIVE OpenXR सेटिंग्ज, या मार्गदर्शकाचा संदर्भ घ्या.
५.५ सीपीयू स्पाइक
जेव्हा CPU लोडिंग जास्त असते, तेव्हा काही बॅकग्राउंड प्रोसेस थ्रेड्स उच्च प्राधान्याने करतात, त्यामुळे नेटिव्ह एक्झिक्युशनमध्ये व्यत्यय येऊ शकतो. आम्ही हमी देऊ शकत नाही की कंटेंट अॅप्लिकेशनमध्ये इतर थ्रेडमुळे व्यत्यय येणार नाही.
जर अशा समस्या उद्भवल्या तर तुम्ही थ्रेड प्रायोरिटी वाढवण्याचा प्रयत्न करू शकता जेणेकरून ते समस्येचे निराकरण करते का ते पाहू शकता. परंतु जर तुम्ही डिव्हाइसेससाठी ऑप्टिमाइझ करण्यासाठी थ्रेड कॉन्फिगरेशन बदलले तर तुम्हाला याचा काही नकारात्मक परिणाम होतो का ते तपासावे लागेल.
- युनिटी डेव्हलपरसाठी, अँड्रॉइड थ्रेड कॉन्फिगरेशन फीचर पहा. जर तुम्ही VIVE Wave SDK वापरत असाल, तर आमच्याकडे WaveXRSettings मध्ये एक फीचर आहे जे तुम्हाला प्राधान्य समायोजित करण्याची परवानगी देते, जसे की आकृती 5-5-2 मध्ये दाखवले आहे. लहान मूल्य उच्च प्राधान्य दर्शवते.
- जोपर्यंत तुम्ही इंजिन कोड बदलत नाही तोपर्यंत बाह्य सेटिंग्जद्वारे गेम थ्रेड, रेंडरिंग थ्रेड आणि RHI थ्रेड प्राधान्य बदलण्याची कोणतीही पद्धत अवास्तव नाही.
कॉपीराइट © २०२४ एचटीसी कॉर्पोरेशन. सर्व हक्क राखीव.
कागदपत्रे / संसाधने
![]() |
VIVE VR रेंडरिंग कामगिरी [pdf] वापरकर्ता मार्गदर्शक व्हीआर रेंडरिंग परफॉर्मन्स, रेंडरिंग परफॉर्मन्स, परफॉर्मन्स |