VIVE logoVR-gengivelsesydelse
Tunning og optimeringer

Indledning

At opnå en optimal VR-oplevelse på ressourcebegrænset hardware er nøglen til at levere en jævn og behagelig brugeroplevelse. Hvis billedhastigheden for indholdsgengivelse falder eller er ustabil under enhedens opdateringshastighed, vil det føre til rystelser og stammen, køresyge osv. endelig negativ indflydelse på brugeroplevelsen. Derfor er optimering af indholdets ydeevne meget vigtig for at sikre en fornøjelig oplevelse.
Inden du starter justering af ydeevnen, er det vigtigt at forstå, hvor ydelsesflaskehalsene er for at undgå ineffektiv tuning. Dette dokument er designet til at hjælpe udviklere med at identificere ydeevneflaskehalse og tilbyde løsninger til at løse problemer med gengivelsesydelsen.
Dokumentet er organiseret i følgende sektioner:

  • Kapitel 2: Identificer flaskehalsen – Dette afsnit hjælper udviklere med at identificere, hvor flaskehalsen er.
  • Kapitel 3 og 4: Indstillinger for VIVE Wave og VIVE OpenXR – Disse afsnit skitserer specifikke indstillinger, der kan påvirke CPU/GPU-ydeevnen for VIVE Wave- og OpenXR-apps. Udviklere kan eksperimentere med at aktivere eller deaktivere disse funktioner baseret på de flaskehalse i ydeevnen, der er stødt på, for at afgøre, om der er nogen forbedring.
  • Kapitel 5: Almindelig optimering – Dette afsnit deler nogle almindelige optimeringspraksis og erfaringer.

Identificer flaskehalsen

Når HMD bevæger sig, hvis VR/MR-appen har frame-jitter eller sort kant osv., skyldes det normalt et dårligt gengivelsesproblem. Typisk kan problemer med gengivelsesydelse kategoriseres i 2 typer: CPU-bundet eller GPU-bundet. Forstå hvilke typer bundet til din app, der er meget vigtigt i begyndelsen for at undgå ineffektiv tuning.
I dette kapitel giver vi enkle trin, der lader dig hurtigt identificere, hvor ydeevneproblemerne er.

2.1 Tjek indholdsgengivelse FPS
Først starter vi med at kontrollere indholdet FPS, som er antallet af frames indholdet renderer pr. sekund. Det skal holdes til skærmens framerate og holdes stabilt. Ellers kan det forårsage rammerysten.
Hvis din applikations-SDK bruger VIVE WAVE SDK 6.0.0 eller nyere, kan du bruge følgende adb-kommando til at kontrollere FPS. DK 6.0.0
$adb Logcat -s VRMetric
Du vil se følgende logdata.
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" Det første tal repræsenterer indholdets FPS, mens det andet tal repræsenterer displayets framerate.
Hvis din Wave SDK-version er under 6.0.0, anbefales det at opgradere til den nyeste version for at forbedre gengivelsesydelsen og anden optimering.
Hvis din applikations-SDK er bygget med VIVE OpenXR. Du kan bruge følgende adb-kommando til at kontrollere FPS.
$adb Logcat -s RENDER_ATW
Du vil se følgende logdata
RENDER_ATW: [FPS] ny tekstur: 90.00
RENDER_ATW: [FPS] R til stede:90.00 spring:0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L present:90.00 skip:0 (0.592301, -0.015502, 0.805539, 0.006773)

Nummeret efter "ny tekstur" repræsenterer aktuelt indhold FPS. Tallet efter "R til stede" og "L til stede" repræsenterer billedhastighed.
Nogle gange kan indholdets FPS og skærmens framerate have en lille uoverensstemmelse.
F.eksample, i ovenstående tilfælde kan 89.8 FPS betragtes som 90 FPS.
Hvis appens indholds-FPS konsekvent er lavere end skærmens framerate eller forbliver ustabil, indikerer det et problem med gengivelsens ydeevne. Derfor er næste trin at identificere, om flaskehalsen kommer fra CPU'en eller GPU'en.
2.2 Tjek CPU- og GPU-brug
Hvis din applikations-SDK bruger VIVE WAVE SDK 6.0.0 eller nyere, kan du bruge følgende adb-kommando til at kontrollere FPS.
$adb logcat -s VRMetric
Du vil se følgende logdata.
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
Som du kan se i ovenstående logresultat, er CPU-forbruget 27% og GPU-forbruget er 72% Hvis din Wave SDK-version er under 6.0.0, anbefales det at opgradere til den nyeste version for at forbedre gengivelsesydelsen og anden optimering.
Til VIVE OpenXR-appen kan du bruge følgende kommando til at kontrollere CPU- og GPU-brugen.
# på linux/ubuntu
$ adb logcat | grep CPU_USAGE
# på powershell
$ adb logcat | Vælg-streng -mønster CPU_USAGE
Du vil se følgende log
CPU Gns. CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 GPU CPU_USAGE [LOAD] 25.67% 32.22% 25.29% 30.77% 29.35% 21.35% 22.09% 18.39% 24.14% 73 %
Hvis du observerer, at FPS'en ikke kan opretholde skærmens billedhastighed, og GPU-forbruget også er meget højt, typisk overstiger 85%, kan du prøve at justere Eyebuffer-opløsningen (afsnit 3.1.2, afsnit 4.1.2) for at se, om det forbedrer FPS. Hvis denne justering fører til bedre
ydeevne, kan vi konkludere, at problemet er GPU-bundet og fokusere vores optimeringsindsats i overensstemmelse hermed.
På den anden side, hvis justering af Eyebuffer-opløsningen ikke resulterer i en mærkbar forbedring af ydeevnen, er flaskehalsen sandsynligvis CPU-bundet, og vi bør fokusere på at optimere CPU-ydeevnen.
Det er også muligt, at applikationen er både CPU-bundet og GPU-bundet samtidigt. I sådanne tilfælde bør optimeringsindsatsen anvendes på både CPU'en og GPU'en for at opnå afbalancerede præstationsforbedringer.
2.3 GPU-bundet
Når en VR-app er GPU-bundet, betyder det, at GPU'en er den primære flaskehals, og den er ikke i stand til at følge med applikationens gengivelseskrav. For at afhjælpe GPU-bundne problemer skal du overveje følgende anbefalinger:
Brug først profileringsværktøjer som RenderDoc eller Game Engine profiler (Unity Profiler, Unreal Insights) for at analysere, hvor GPU'en bruger det meste af sin tid. Identificer de dyreste operationer og fokuser på at optimere dem.
For Native Developer kan du bruge RenderDoc til at identificere, hvilket draw call der forårsager overdreven GPU-belastning.
For Unity Developer kan du følge Unity dette dokument eller bruge RenderDoc til at analysere problemer med gengivelsesydelsen og følge Unity-grafikoptimeringsdokumentationen for at få vejledning til at optimere din applikation.
For Unreal Developer kan du bruge GPU Visualizer eller bruge RenderDoc til at analysere problemer med gengivelsesydelsen og følge Unreal Performance Guidelines for at få vejledning til at optimere din applikation.
For det andet kan du også prøve at justere visse Wave-funktioner eller -indstillinger for at reducere GPU-belastningen.

  1. Indstil skærmens opdateringshastighed langsommere (afsnit 3.1.1, afsnit 4.1.1)
  2.  Juster øjenbufferopløsning (afsnit 3.1.2, afsnit 4.1.2), 14.1.1)
  3.  Prøv at aktivere Foveation (afsnit 3.1.4, afsnit 4.1.4).

Hvis din app også er en MR-app, kan du også justere Passthrough-indstillingerne.

  1. Juster passthrough-billedkvaliteten lavere. (afsnit 3.2.1)
  2. Juster gennemløbsrammehastighed langsommere. (afsnit 3.2.2).

For flere andre indstillinger om GPU-ydeevne, kan du se kapitel 2.6.

2.4 CPU-bundet
Når en VR-app er CPU-bundet, betyder det, at CPU'en er den primære flaskehals. Overvej følgende anbefalinger:
Brug først profileringsværktøjer som Systrace eller Game Engine profiler (Unity Profiler, Unreal Insights) for at analysere og identificere, hvilke dele af din kode, der bruger flest CPU-ressourcer. Fokuser på at optimere disse områder og refaktorer beregningsintensive algoritmer for at reducere CPU-belastningen.

  • For Native Developer kan du bruge Systrace til profiler dit projekt.
  • For Unity Developer kan du bruge CPU Usage Profiler-modul for at finde CPU-ydelsesproblem.
  • For Unreal Developer kan du bruge Unreal's Insights til at finde CPU-ydelsesproblemer.

For det andet kan du også prøve at justere visse Wave-funktioner eller -indstillinger for at reducere GPU-belastningen.

  1. Indstil skærmens opdateringshastighed langsommere (afsnit 3.1.1, afsnit 4.1.1)
  2.  Brug multi-View Gengivelse (afsnit 3.1.4, afsnit 4.1.4)

Hvis din app også er en MR-app, kan du også justere Passthrough-indstillingerne.

  1. Juster Passthrough Framerate langsommere (afsnit 3.2.2).

For flere andre indstillinger om CPU-ydeevne, kan du se kapitel 2.6.

2.5 Sammenfatning
Endelig har vi organiseret ovenstående arbejdsgang for præstationskontrol i figur 2-5-1. Start med at tjekke indholdets FPS. Hvis det er lavere end skærmens framerate eller forbliver ustabilt, så analyser GPU/CPU-bruget for at afgøre, om det er GPU-bundet eller CPU-bundet. Brug endelig en profiler for at identificere potentielle ydeevneproblemer eller justere Wave-funktioner eller -indstillinger for at optimere CPU-ydeevnen.

VIVE VR-gengivelsesydelse - Fig 1

2.6 Hurtig reference, hvilke indstillinger der kan forbedre CPU/GPU-indlæsning

Liste indstillingerne for SDK, der relaterer sig til CPU/GPU-indlæsningen som nedenfor. Du kan være baseret på appens flaskehals for at kontrollere de relevante optimeringsindstillinger.

Relateret til CPU:

  • VIVE Wave SDK-indstilling
    o VR-indhold
    ▪ 3.1.1 Displayopdateringshastighed
    ▪ 3.1.4 Multi-View Gengivelse
    ▪ 3.1.6 Adaptiv kvalitet
    ▪ 3.1.7 Adaptive Motion Compositor
    o MR Indhold
    ▪ 3.2.2 Juster Passthrough Frame Rate
  • VIVE OpenXR SDK-indstilling
    o VR-indhold
    ▪ 4.1.1 Displayopdateringshastighed
    ▪ 4.1.4 Multi-View Gengivelse
  • Fælles optimering
    o 5.5 CPU Spike

Relateret til GPU:

  • VIVE Wave SDK-indstilling
    o VR-indhold
    ▪ 3.1.1 Displayopdateringshastighed
    ▪ 3.1.2 Eyebuffer-opløsning
    ▪ 3.1.3 Multi-View Gengivelse
    ▪ 3.1.4 Foveation
    ▪ 3.1.5 Frame Sharpness Enhancement (FSE)
    ▪ 3.1.6 Adaptiv kvalitet
    ▪ 3.1.7 Adaptive Motion Compositor
    ▪ 3.1.8 Render Mask [Understøtter ikke uvirkelig] o MR-indhold
    ▪ 3.2.1 Juster passthrough-kvalitet
    ▪ 3.2.2 Juster Passthrough Frame Rate
  • VIVE OpenXR SDK-indstilling
    o VR-indhold
    ▪ 4.1.1 Displayopdateringshastighed
    ▪ 4.1.2 Eyebuffer-opløsning
    ▪ 4.1.3 Multi-View Gengivelse
    ▪ 4.1.4 Foveation [Ikke understøtter uvirkelig] ▪ 4.1.5 Render Mask [Ikke understøtter uvirkelig]
  • Fælles optimering
    o 5.1 Slå High Performance Mode fra
    o 5.2 Multisampling
    o 5.3 GMEM Load/Store
    o 5.4 Kompositionslag (Multi Layer)

VIVE-bølgeindstilling

VIVE Wave er en åben platform og et værktøjssæt, der lader dig nemt udvikle VR-indhold og giver højtydende enhedsoptimering til tredjepartspartnere. VIVE Wave understøtter Unity og Unreal spilmotorer.
Vi optimerer og løser løbende forskellige fejl, så vi anbefalede at holde SDK'et opdateret.
I øjeblikket understøtter VIVE Wave kun OpenGL ES. Her lister funktionerne sorteret efter indflydelse på GPU-ydeevne. Vi vil opdele dette i to dele: VR-indhold og MR-indhold.
3.1 VR-indhold
3.1.1 Skærmopdateringshastighed

Higher refresh rates offer smoother visuals, but come at the cost of increased system load. Conversely, lower refresh rates reduce system load, but result in less smooth visuals. If App has CPU/GPU bound issue, you can try decreasing the display refresh rate to alleviate the issue.

  • For indbygget udvikler, se WVR_SetFrameRate.
  • For Unity-udvikler, se denne vejledning.
  • For Unreal-udvikler, se denne vejledning.

3.1.2 Eyebuffer-opløsning
Eyebuffer-opløsning er den teksturstørrelse, som indholdsappen, der skal gengives, gengivet tekstur vil blive indsendt til runtime for at lave posting-processen og præsenteres på HMD-skærmen.
Mens en større øjenbufferstørrelse kan resultere i klarere og mere detaljerede billeder, men det pålægger også en betydelig belastning på GPU'en. Derfor er det vigtigt at finde den rette balance mellem visuel kvalitet og ydeevne.
If App has GPU bound issue, you can try decreasing the eyebuffer size by multiply a scale factor. Howerver, we recommend not reducing the scale factor below 0.7, as this may result in unacceptable visual quality.

  • For Native udvikler, se WVR_ObtainTextureQueue. Når du justerer størrelsen, skal du gange bredden og højden med et forhold.
  • For Unity-udvikler, se WaveXRSettings.
    Alternativt kan du foretage ændringer via kode som belwoe.
    XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C#
  • For Unreal-udvikler, se SetPixelDensity.

3.1.3 Multi-View Gengivelse
I traditionel gengivelse tegner vi venstre og højre øje separat, hvilket kræver to draw calls for den samme scene. Multi-View Rendering løser dette problem ved kun at udføre ét draw call.
This feature reduces CPU load by decreasing the number of draw calls. The GPU also has some benefits, vertex shader’s workload is also reduced as it doesn’t need to run an additional shader for the other eye, but the fragment shader’s workload remains  unchanged since it still needs to evaluate each pixel for both eyes. We recommand enabling this feature.

  • For Native-udvikler kan du henvise til wvr_native_hellovr sample.
  • For Unity-udvikler, se Render Mode, enkelt pass er multi-view funktion.
  • For Unreal-udvikler, se denne vejledning.

3.1.4 Foveation
Foveated-gengivelse er primært designet til at reducere GPU-belastningen. Det reducerer rammedetaljerne i skærmens periferi og bibeholder detaljer i høj opløsning i midten af ​​feltet. view. Hvis appen har et GPU-bundet problem, kan du prøve at aktivere Foveation-gengivelse.

VIVE VR-gengivelsesydelse - Fig 2

Der er noget, du skal bemærke, når du bruger foveation:

➢ Brugere bemærker typisk ikke de reducerede detaljer i perifere områder, der anvender standard foveation-tilstand. Men hvis den perifere kvalitet af foveation er sat for lavt, kan det blive mærkbart for brugeren.
➢ Effekterne af foveation kan være mere mærkbare med visse teksturmaterialer, som kan fange brugerens opmærksomhed. Udviklere bør være opmærksomme på dette og evaluere det i overensstemmelse hermed.
➢ Aktivering af foveated gengivelsesfunktion medfører en fast GPU-ydelsesomkostning, som kan variere mellem 1 % til 6 % afhængigt af størrelsen af ​​øjenbufferen. Når du bruger en simpel shader i scenen, kan ydeevnegevinsten ved at spare ressourcer være lavere end de faste GPU-ydelsesomkostninger, hvilket resulterer i et ydelsesfald.

  • For indfødte udviklere, se denne vejledning.
  • For Unity-udvikler, se denne vejledning. Især når du aktiverer efterbehandling eller HDR, kan foveation ikke udnyttes fuldt ud. Fordi Unity vil gengive objekter til sin egen genererede gengivelsestekstur, snarere end den runtime-genererede gaves gengivelsestekstur, der understøtter foveation.
  • For Unreal-udvikler, se denne vejledning. Foveation kan især ikke udnyttes fuldt ud på Multi-View Gengivelse, fordi Unreal ikke direkte kan gengive objekter på den runtime-genererede gengivelsestekstur, der understøtter foveation.

3.1.5 Frame Sharpness Enhancement (FSE)
FSE'en giver skarpere gengivelsesresultater via introduktion af skærpefilter, den kan gøre indholdet mere klart og være ganske nyttigt til at forbedre klarheden af ​​teksten i scenen. Hvis appen har GPU-bundet problem, kan du overveje at deaktivere FSE, hvis det ikke er vigtigt.

VIVE VR-gengivelsesydelse - Fig 3

  • For indfødte udviklere, se denne vejledning.
  • For Unity-udvikler, se denne vejledning.
  • For Unreal-udvikler, se denne vejledning.

3.1.6 Adaptiv kvalitet
For at spare på batteriet og bevare enhedens gengivelsesydelse justerer denne funktion automatisk ydelsesniveauerne for CPU/GPU-uret baseret på deres brug. Derudover kan andre strategier implementeres for at forbedre ydeevnen, såsom automatisk aktivering/deaktivering af Foveation eller indhold kan justere sig selv, hvis det modtager hændelser med høj/lav belastning.

  • For indfødte udviklere, se denne vejledning.
  • For Unity-udvikler, se denne vejledning. I vores Unity-plugin kan øjenbufferens størrelse automatisk justeres baseret på den aktuelle ydeevne; Tekststørrelse vil bortfiltrere skalaværdier, der er for små på opløsningslisten. Vi anbefaler tekst med en størrelse på mindst 20 dmm eller større.
  • For Unreal-udvikler, se denne vejledning.

3.1.7 Adaptive Motion Compositor
Denne funktion er en eksperimentel funktion, der inkluderer UMC og PMC. UMC reducerer billedhastigheden med det halve og ekstrapolerer ny frame i realtid for at bevare den visuelle glathed. Det kommer dog med en vis latenstid, artefakter og GPU-indlæsning.
PMC bruger primært dybdebufferen til at tillade ATW at tage højde for HMD-oversættelse, udvidet til en kompensation på 6 dof. Denne funktion kan reducere oversættelsesforsinkelsen med 1~2 frames, men øge GPU-belastningen.

  • For indfødte udviklere, se denne vejledning.
  • For Unity-udvikler, se denne vejledning.
  • For Unreal-udvikler, se denne vejledning.

3.1.8 Render Mask [Understøtter ikke uvirkelig]
Pixels ved kanterne bliver næsten usynlige efter forvrængning, gengivelsesmasken ændrer dybdebufferværdierne for disse usynlige pixels. Hvis du aktiverer dybdetest, på grund af early-z, vil disse usynlige pixels ikke blive gengivet, hvilket reducerer GPU-belastningen. Denne funktion er nyttig, hvis der er tungt belastende gengivelsesobjekter i disse usynlige områder; Ellers, hvis der ikke er nogen gengivelsesobjekter i disse områder, anbefales det at deaktivere det, fordi det vil forbruge et lille GPU-forbrug.

  • For indfødte udviklere, se denne vejledning. Du skal binde dybdebufferen, før du kalder RenderMask; ellers vil det være ineffektivt.
  • For Unity-udvikler, se denne vejledning.
  • For Unreal-udvikler understøtter i øjeblikket ikke Render Mask-funktionen.

3.2 MR Indhold
3.2.1 Juster passthrough-kvalitet
Der er 3 niveauer for billedkvalitet:
➢ WVR_PassthroughImageQuality_DefaultMode – velegnet til MR-indholdet uden den specifikke efterspørgsel.
➢ WVR_PassthroughImageQuality_PerformanceMode – velegnet til MR-indhold, der har brug for flere GPU-ressourcer til virtuel scenegengivelse.
➢ WVR_PassthroughImageQuality_QualityMode – velegnet til MR-indholdet, der gør det muligt for brugerne at se det omgivende miljø klart, men den virtuelle scene af indhold skal have den mere finjusterede ydeevne.
Du kan justere Passthrough-kvaliteten til PerformanceMode for at reducere GPU-brug.

  • For Native, Uunity eller Unreal-udviklere, se denne vejledning.

3.2.2 Juster Passthrough Frame Rate
Ligesom skærmens opdateringshastighed giver højere passthrough-framerate jævnere billeder, men det kommer på bekostning af øget systembelastning. Omvendt reducerer lavere opdateringshastigheder systembelastningen, men resulterer i mindre glatte billeder. Der er 2 modes for passthrough framerate: Boost og Normal.

  • For Native udviklere, kan justere passthrough-kvaliteten ved hjælp af WVR_SetPassthroughImageRate.
  • For Unity-udvikler, kan ændres via kode, f.eksampindstillingerne er som følger // C#
    Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode);
  • For Unreal-udvikler, indstillingsmetode se blueprint-noden i figur 3-2-2.

VIVE VR-gengivelsesydelse - Fig 4

VIVE OpenXR-indstilling

OpenXR er åben standard, der giver et fælles sæt API'er til udvikling af XR-applikationer, der kører på tværs af en bred vifte af VR-enheder, udviklet af Khronos Group. VIVE Focus 3 og VIVE XR Elite understøtter også OpenXR, VIVE OpenXR SDK giver omfattende support til HTC VR-enheder, hvilket giver udviklere mulighed for at bygge Allin-One og indhold med Unity og Unreal engine på HTC VR-enheder. Vi optimerer og løser løbende forskellige fejl, så det anbefales, at udviklere opdaterer deres enheds FOTA-version for at holde den opdateret. I øjeblikket understøtter VIVE OpenXR SDK OpenGL ES og Vulkan.

4.1 VR-indhold
4.1.1 Skærmopdateringshastighed
Konceptet her ligner 3.1.1 Display Refresh Rate.

  • For Native udvikler, se XrEventDataDisplayRefreshRateChangedFB.
  • For Unity-udvikler, se denne vejledning.
  • For Unreal-udvikler, se denne vejledning.

4.1.2 Eyebuffer-opløsning
Konceptet her ligner 3.1.2 Eyebuffer Resolution. vi anbefaler ikke at reducere skalafaktoren til under 0.7, da dette kan resultere i uacceptabel visuel kvalitet.

  • For Native udvikler, se xrCreateSwapchain. Når du justerer størrelsen, skal du gange bredden og højden med et forhold. ,
  • For Unity-udvikler, se følgende f.eksample // C#
    XRSettings.eyeTextureResolutionScale = 0.7f; //anbefalet 1.0f~0.7f
  • For Unreal-indstillinger henvises til denne vejledning.

4.1.3 Multi-View Gengivelse
Konceptet her ligner 3.1.3 Multi-View Gengivelse. Denne funktion reducerer belastningen på CPU'en, GPU har også nogle fordele. Vi anbefaler at aktivere denne funktion.

  • For indfødte udviklere leverer KhronosGroup en OpenXR Multi-View example, se denne vejledning.
  • For Unity-udvikler, se Render Mode, enkelt pass er multi-view funktion.
  • For Unreal-udviklere, som med VIVE Wave-indstillinger, henvises til denne vejledning.

4.1.4 Foveation [Støtte ikke uvirkelig]
Konceptet her ligner 3.1.4 Foveation. Foveeret gengivelse er primært designet til at reducere GPU-belastningen, men at aktivere den vil medføre en fast GPU-ydelsesomkostning, og hvis foveation er sat for lavt, og der bruges visse materialer eller teksturer, kan det blive meget
mærkbar for brugeren. Derfor er det tilrådeligt at aktivere eller deaktivere funktionen baseret på dine specifikke krav og ydeevneovervejelser. I øjeblikket understøttes Foveated-funktionalitet kun i OpenGL ES på VIVE OpenXR SDK.

  • For Native-udviklere er denne funktion tilgængelig, men i øjeblikket ingen examples leveres.
  • For Unity-udvikler, se denne vejledning.
  • For Unreal-udvikler, understøtter ikke denne funktion i øjeblikket.

4.1.5 Render Mask [Understøtter ikke uvirkelig]
Konceptet her ligner 3.1.8 Render Mask.

  • For indfødte udviklere, brug XrVisibilityMaskKHR til at få Mesh. Før du gengiver scenen, skal du bruge dette mesh til at udfylde dybdebufferværdierne, før du gengiver scenen.
  • For Unity-udviklere er Render Mask-funktionen aktiveret som standard for OpenGL ES og kan deaktiveres med følgende kode; Vulkan understøtter i øjeblikket ikke denne funktion. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
  • For Unreal-udvikler understøtter i øjeblikket ikke Render Mask-funktionen.

4.2 MR Indhold
OpenXR understøtter i øjeblikket ikke indstilling af Passthrough Quality og Frame Rate. Vi vil fortsætte med at optimere og rette Passthrough-funktionen, så det anbefales, at udviklere opdaterer enhedens FOTA-version for at holde den opdateret.

Fælles optimering

5.1 Slå High Performance Mode fra
Deaktivering af "Høj ydeevne-tilstand" kan reducere enhedens skærmstørrelse og derved reducere GPU-brug. Ulempen er et fald i skærmopløsningen. Du kan balancere kvalitet og ydeevne for at beslutte, om du vil aktivere det.
Indstillingsstedet for VIVE Focus 3 er vist Figur 5-1-1:

VIVE VR-gengivelsesydelse - Fig 5

Indstillingsstedet for VIVE XR Elite er vist Figur 5-1-2:

VIVE VR-gengivelsesydelse - Fig 6

5.2 Multierampling Anti-Aliasing
Multisampling is an anti-aliasing technique used to smooth out jagged edges, usually is accelerated through hardware, which incurs GPU performance cost. We recommend not setting MSAA higher than 2x because more hight value will consume more gpu usage.

  • For Native udvikler, MSAA OpenGL ES exsample kan henvise til dette; MSAA Vulkan exampler kan henvise til dette.
    Adreno GPU'en giver en udvidelse, der optimerer MSAA.
  • For Unity-udvikler, se denne guild.
  • For Unreal developer, refer to this guild. Unreal also has provide post processing anti-aliasing, refer to this guild.

5.3 GMEM Load/Store
I Adreno GPU-arkitekturen er der en funktion, hvor, når der bindes til et Render Target, hvis Render Target ikke slettes eller ugyldiggøres, hver gang gengivelsen finder sted, indlæses værdierne i Render Target i grafikhukommelsen, hvilket kaldes GMEM Load. Hvis de tidligere værdier ikke er nødvendige, kan du undgå denne situation for at forbedre GPU-ydeevnen ved at rydde eller ugyldiggøre Render Target-gengivelsen.
Du kan undgå GMEM Load ved at bruge følgende metoder. I OpenGL ES kan du efter binding af FBO'en kalde glClear og glClearDepth for at rydde Color, Depth og Stencil buffer, eller kalde glInvalidateFramebuffer for at ugyldiggøre det angivne Render Target. I Vulkan er yderligere instruktioner ikke nødvendige; du kan udtrykkeligt angive, om den vedhæftede fil skal ryddes før brug i VkAttachmentDescription.loadOp.
På samme måde kaldes lagring af resultatet af en flisegengivelse tilbage til hovedhukommelsen fra grafikhukommelsen GMEM Store; denne operation er også dyr for GPU'en. For at undgå dette anbefaler vi kun at binde de påkrævede Render Targets for at forhindre unødvendige butiksoperationer.

5.4 Kompositionslag (Multi Layer)
Teksturer, der vises ved hjælp af Multi-Layer, har en bedre visuel kvalitet. Denne funktion øger dog GPU-ydeevnen markant med antallet af lag og størrelsen af ​​teksturerne. Vi anbefaler ikke over tre lag.

  • For Native udvikler,
    o VIVE Wave SDK bruger WVR_SubmitFrameLayers til at sende data for hvert lag.
    o VIVE OpenXR SDK placerer lagdata i XrFrameEndInfo og sender dem via xrEndFrame.
  • For Unity-udvikler,
    o VIVE Wave SDK-indstillinger, se denne vejledning,
    o VIVE OpenXR-indstillinger, se denne vejledning.
  • For Unreal udvikler,
    o VIVE Wave SDK-indstillinger, se denne vejledning.
    o VIVE OpenXR-indstillinger, se denne vejledning.

5.5 CPU Spike
Når CPU-belastningen er tungere, behandler nogle baggrundstråde med høj prioritet, og det kan muligvis afbryde den oprindelige udførelse. Vi kan ikke garantere, at indholdsapplikationen ikke bliver afbrudt af anden tråd.
If such issues arise, you can try increasing the thread priority to see if it resolves the problem. But if you change the thread configuration to optimize for devices, you need to check if this has any negative impact.

  • For Unity Developer, se Android-trådkonfigurationsfunktionen. Hvis du bruger VIVE Wave SDK, har vi en funktion i WaveXRSettings, der giver dig mulighed for at justere prioriteten, som vist i figur 5-5-2. Den mindre værdi repræsenterer højere prioritet.

VIVE VR-gengivelsesydelse - Fig 7

  • Uvirkelig ingen metode til at ændre spiltråd, gengivelse af tråd og RHI trådprioritet gennem eksterne indstillinger, medmindre du ændrer motorkoden.

Copyright © 2024 HTC Corporation. Alle rettigheder forbeholdesVIVE logo

Dokumenter/ressourcer

VIVE VR-gengivelsesydelse [pdfBrugervejledning
VR Rendering Performance, Rendering Performance, Performance

Referencer

Efterlad en kommentar

Din e-mailadresse vil ikke blive offentliggjort. Påkrævede felter er markeret *