logo sa VIVEPagpasundayag sa VR Rendering
Tunning ug Optimizations

Pasiuna

Ang pagkab-ot sa usa ka kamalaumon nga kasinatian sa VR sa limitado nga kapanguhaan nga hardware mao ang yawe sa paghatud sa usa ka hapsay ug komportable nga kasinatian sa tiggamit. Kon ang frame rate sa content rendering mous-os o dili stable ubos sa refresh rate sa device, kini mosangpot sa frame judder ug stutting, motion sickness, etc,. sa katapusan negatibo makaapekto sa kasinatian sa user. Busa, ang pag-optimize sa pasundayag sa sulud hinungdanon kaayo alang sa pagsiguro sa usa ka makalingaw nga kasinatian.
Sa dili pa magsugod sa performance tuning, importante nga masabtan kung asa ang mga bottleneck sa performance aron malikayan ang dili maayo nga pag-tunning. Kini nga dokumento gidisenyo aron matabangan ang mga developer nga mahibal-an ang mga bottleneck sa pasundayag ug magtanyag mga solusyon aron masulbad ang mga isyu sa paghimo sa pasundayag.
Ang dokumento giorganisar ngadto sa mosunod nga mga seksyon:

  • Kapitulo 2: Ilha ang Bottleneck - Kini nga seksyon nagtabang sa mga developer sa pag-ila kung asa ang mga bottleneck.
  • Kapitulo 3 ug 4: Mga Setting sa VIVE Wave ug VIVE OpenXR - Kini nga mga seksyon naglatid sa piho nga mga setting nga mahimong makaapekto sa performance sa CPU/GPU alang sa VIVE Wave ug OpenXR nga mga app. Mahimong mag-eksperimento ang mga developers sa pagpagana o pag-disable niini nga mga feature base sa mga bottleneck sa performance nga nasugatan aron mahibal-an kung aduna bay pag-uswag.
  • Kapitulo 5: Kasagaran nga Pag-optimize - Kini nga seksyon nag-ambit sa pipila ka sagad nga mga gawi ug kasinatian sa pag-optimize.

Ilha ang Bottleneck

Kung naglihok ang HMD, kung ang VR/MR app adunay frame jitter o itom nga ngilit, ug uban pa, kasagaran kini tungod sa dili maayo nga isyu sa pasundayag sa paghubad. Kasagaran, ang paghubad sa mga problema sa pasundayag mahimong ma-categorize sa 2 nga mga tipo: CPU-bound o GPU-bound. Sabta kung unsang mga klase sa bound para sa imong app ang hinungdanon kaayo sa pagsugod aron malikayan ang dili maayo nga pag-tunning.
Niini nga kapitulo, naghatag kami og yano nga mga lakang nga nagtugot kanimo sa pag-ila dayon kung asa ang mga isyu sa pasundayag.

2.1 Susihon ang Content Rendering FPS
Una, magsugod kami pinaagi sa pagsusi sa sulud nga FPS nga mao ang gidaghanon sa mga frame nga gihatag sa sulud matag segundo. Kini kinahanglan nga magpabilin sa display framerate ug magpabilin nga lig-on. Kay kon dili, kini mahimong hinungdan sa mga jitter sa frame.
Kung ang imong aplikasyon SDK naggamit sa VIVE WAVE SDK 6.0.0 o sa ulahi, mahimo nimong gamiton ang mosunod nga adb command aron masusi ang FPS. DK 6.0.0
$adb Logcat -s VRMetric
Imong makita ang mosunod nga data sa log.
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” Ang unang numero nagrepresentar sa sulod FPS, samtang ang ikaduhang numero nagrepresentar sa display framerate.
Kung ang imong bersyon sa Wave SDK ubos sa 6.0.0, girekomenda nga mag-upgrade sa pinakabag-o nga bersyon aron mapauswag ang pasundayag sa pag-render ug pag-optimize sa uban.
Kung ang imong aplikasyon SDK gitukod gamit ang VIVE OpenXR. Mahimo nimong gamiton ang mosunod nga adb command aron masusi ang FPS.
$adb Logcat -s RENDER_ATW
Imong makita ang mosunod nga data sa log
RENDER_ATW: [FPS] bag-ong texture:90.00
RENDER_ATW: [FPS] R karon:90.00 laktaw:0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L karon:90.00 laktaw:0 (0.592301, -0.015502, 0.805539, 0.006773)

Ang numero nga nagsunod sa "bag-ong texture" nagrepresentar sa karon nga sulud nga FPS. Ang numero nga nagsunod sa "R present" ug "L present" nagrepresentar sa display framerate.
Usahay, ang sulod nga FPS ug ang display framerate mahimong adunay gamay nga kalainan.
Kay example, sa kaso sa ibabaw, 89.8 FPS maisip nga 90 FPS.
Kung ang FPS sa sulod sa app kanunay nga mas ubos kaysa sa framerate sa display o nagpabilin nga dili lig-on, kini nagpakita sa usa ka isyu sa performance sa paghubad. Busa, ang sunod nga lakang mao ang pag-ila kung ang bottleneck gikan sa CPU o sa GPU.
2.2 Susihon ang paggamit sa CPU ug GPU
Kung ang imong aplikasyon SDK naggamit sa VIVE WAVE SDK 6.0.0 o sa ulahi, mahimo nimong gamiton ang mosunod nga adb command aron masusi ang FPS.
$adb logcat -s VRMetric
Imong makita ang mosunod nga data sa log.
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
Sama sa imong makita sa resulta sa log sa ibabaw, ang paggamit sa CPU mao ang 27% ug ang paggamit sa GPU mao ang 72% Kung ang imong Wave SDK nga bersyon ubos sa 6.0.0, kini girekomendar sa pag-upgrade ngadto sa pinakabag-o nga bersyon aron sa pagpalambo sa rendering performance ug sa uban optimization.
Alang sa VIVE OpenXR app, mahimo nimong gamiton ang mosunod nga sugo aron masusi ang paggamit sa CPU ug GPU.
# sa linux/ubuntu
$ adb logcat | grep CPU_USAGE
# sa powershell
$ adb logcat | Pagpili-String -Pattern CPU_USAGE
Imong makita ang mosunod nga log
CPU Avg. 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 %
Kung imong naobserbahan nga ang FPS dili makapadayon sa display frame rate ug ang paggamit sa GPU taas usab kaayo, kasagaran molapas sa 85%, mahimo nimong sulayan ang pag-adjust sa Eyebuffer Resolution (seksyon 3.1.2, seksyon 4.1.2) aron makita kung kini makapauswag sa FPS. Kung kini nga pag-adjust mosangpot sa mas maayo
performance, makahinapos kita nga ang isyu kay GPU-bound ug ipunting ang atong mga paningkamot sa pag-optimize sumala niana.
Sa laing bahin, kung ang pag-adjust sa Eyebuffer Resolution dili moresulta sa usa ka mamatikdan nga pag-uswag sa performance, ang bottleneck lagmit nga CPU-bound, ug kita kinahanglan nga mag-focus sa pag-optimize sa performance sa CPU.
Posible usab nga ang aplikasyon parehas sa CPU-bound ug GPU-bound nga dungan. Sa ingon nga mga kaso, ang mga paningkamot sa pag-optimize kinahanglan nga magamit sa parehas nga CPU ug GPU aron makab-ot ang balanse nga pagpaayo sa pasundayag.
2.3 GPU-gapos
Kung ang usa ka VR app gigapos sa GPU, kini nagpasabut nga ang GPU mao ang panguna nga bottleneck, ug dili kini makasunod sa mga gipangayo sa pag-render sa aplikasyon. Aron maminusan ang mga isyu sa GPU, hunahunaa ang mosunod nga mga rekomendasyon:
Una, gamita ang mga himan sa profiling sama sa RenderDoc o Game Engine profiler (Unity Profiler, Unreal Insights) aron analisahon kung diin gigugol sa GPU ang kadaghanan sa oras niini. Ilha ang labing mahal nga mga operasyon ug ipunting ang pag-optimize niini.
Alang sa Lumad nga Developer, mahimo nimong gamiton ang RenderDoc aron mahibal-an kung unsang tawag sa draw ang hinungdan sa sobra nga pagkarga sa GPU.
Para sa Unity Developer, mahimo nimong sundon ang Unity niini nga dokumento o gamiton ang RenderDoc aron analisahon ang isyu sa performance sa pag-render, ug sundon ang dokumentasyon sa Unity graphics optimization alang sa giya aron ma-optimize ang imong aplikasyon.
Para sa Unreal Developer, mahimo nimong gamiton ang GPU Visualizer o gamiton ang RenderDoc aron analisahon ang isyu sa performance sa rendering, ug sundon ang Unreal Performance Guidelines alang sa giya aron ma-optimize ang imong aplikasyon.
Ikaduha, mahimo usab nimong sulayan ang pag-adjust sa pipila ka mga bahin sa Wave o mga setting aron makunhuran ang pagkarga sa GPU.

  1. Itakda ang Display Refresh Rate nga mas hinay (seksyon 3.1.1, seksyon 4.1.1)
  2.  I-adjust ang Eyebuffer Resolution (seksyon 3.1.2, seksyon 4.1.2), 14.1.1)
  3.  Sulayi nga mahimo ang Foveation (seksyon 3.1.4, seksyon 4.1.4).

Kung ang imong app usa usab ka MR app, mahimo nimong i-adjust ang mga setting sa Passthrough.

  1. I-adjust ang Passthrough Image Quality nga mas ubos. (seksyon 3.2.1)
  2. I-adjust ang Passthrough Framerate nga mas hinay. (seksyon 3.2.2).

Para sa uban pang mga setting bahin sa performance sa GPU, mahimo nimong tan-awon ang Kapitulo 2.6.

2.4 CPU-gapos
Kung ang usa ka VR app gigapos sa CPU, kini nagpasabut nga ang CPU mao ang panguna nga bottleneck, hunahunaa ang mosunod nga mga rekomendasyon:
Una, gamita ang mga himan sa profiling sama sa Systrace o Game Engine profiler (Unity Profiler, Unreal Insights) aron pagtuki ug pag-ila kung unsang mga bahin sa imong code ang naggamit sa kadaghanan nga mga kapanguhaan sa CPU. Pag-focus sa pag-optimize niini nga mga lugar ug pag-refactor sa computationally intensive algorithm aron makunhuran ang load sa CPU.

  • Para sa Lumad nga Developer, mahimo nimong gamiton ang Systrace sa profiler imong proyekto.
  • Para sa Unity Developer, mahimo nimong gamiton ang CPU Usage Profiler module aron makit-an ang isyu sa performance sa CPU.
  • Alang sa Unreal Developer, mahimo nimong gamiton ang Unreal's Insights aron makit-an ang isyu sa performance sa CPU.

Ikaduha, mahimo usab nimong sulayan ang pag-adjust sa pipila ka mga bahin sa Wave o mga setting aron makunhuran ang pagkarga sa GPU.

  1. Itakda ang Display Refresh Rate nga mas hinay (seksyon 3.1.1, seksyon 4.1.1)
  2.  Paggamit og Multi-View Paghubad (seksyon 3.1.4, seksyon 4.1.4)

Kung ang imong app usa usab ka MR app, mahimo nimong i-adjust ang mga setting sa Passthrough.

  1. I-adjust ang Passthrough Framerate nga mas hinay (seksyon 3.2.2).

Para sa uban pang mga setting bahin sa performance sa CPU, mahimo nimong tan-awon ang Kapitulo 2.6.

2.5 Katingbanan
Sa katapusan, among giorganisar ang labaw sa performance checking workflow ngadto sa Figure 2-5-1. Pagsugod pinaagi sa pagsusi sa FPS sa sulud. Kung kini mas ubos kaysa sa framerate sa display o nagpabilin nga dili lig-on, unya analisa ang paggamit sa GPU/CPU aron mahibal-an kung kini gigapos sa GPU o CPUbound. Sa katapusan, gamita ang usa ka profiler sa pag-ila sa posibleng mga isyu sa performance o pag-adjust sa Wave features o setting aron ma-optimize ang performance sa CPU.

VIVE VR Rendering Performance - Fig 1

2.6 Dali nga Reperensya Unsa nga Mga Setting ang Makapauswag sa pagkarga sa CPU/GPU

Ilista ang mga setting sa SDK nga may kalabutan sa pagkarga sa CPU/GPU sama sa ubos. Mahimo kang ibase sa bottleneck sa app aron masusi ang may kalabutan nga mga setting sa pag-optimize.

May kalabotan sa CPU:

  • Setting sa VIVE Wave SDK
    o VR Content
    ▪ 3.1.1 Display Refresh Rate
    ▪ 3.1.4 Daghang-View Paghubad
    ▪ 3.1.6 Mapasibo nga Kalidad
    ▪ 3.1.7 Adaptive Motion Compositor
    o MR Content
    ▪ 3.2.2 I-adjust ang Passthrough Frame Rate
  • VIVE OpenXR SDK Setting
    o VR Content
    ▪ 4.1.1 Display Refresh Rate
    ▪ 4.1.4 Daghang-View Paghubad
  • Kasagaran nga Optimization
    o 5.5 nga CPU Spike

May kalabotan sa GPU:

  • Setting sa VIVE Wave SDK
    o VR Content
    ▪ 3.1.1 Display Refresh Rate
    ▪ 3.1.2 Resolusyon sa Eyebuffer
    ▪ 3.1.3 Daghang-View Paghubad
    ▪ 3.1.4 Foveation
    ▪ 3.1.5 Frame Sharpness Enhancement (FSE)
    ▪ 3.1.6 Mapasibo nga Kalidad
    ▪ 3.1.7 Adaptive Motion Compositor
    ▪ 3.1.8 Render Mask [Dili Suporta nga Dili Tinuod] o MR Content
    ▪ 3.2.1 Ipasibo ang Kalidad sa Passthrough
    ▪ 3.2.2 I-adjust ang Passthrough Frame Rate
  • VIVE OpenXR SDK Setting
    o VR Content
    ▪ 4.1.1 Display Refresh Rate
    ▪ 4.1.2 Resolusyon sa Eyebuffer
    ▪ 4.1.3 Daghang-View Paghubad
    ▪ 4.1.4 Foveation [Dili Suporta nga Dili Tinuod] ▪ 4.1.5 Render Mask [Not Support Unreal]
  • Kasagaran nga Optimization
    o 5.1 I-off ang High Performance Mode
    o 5.2 Multisampling
    o 5.3 GMEM Load/Store
    o 5.4 Komposisyon Layer (Multi Layer)

VIVE Wave Setting

Ang VIVE Wave usa ka bukas nga plataporma ug toolset nga makapahimo kanimo nga dali nga makapalambo sa VR nga sulud ug naghatag taas nga performance sa pag-optimize sa aparato alang sa mga kauban sa ikatulo nga partido. Gisuportahan sa VIVE Wave ang Unity ug Unreal nga mga makina sa dula.
Nagpadayon kami sa pag-optimize ug pagsulbad sa lainlaing mga bug, mao nga among girekomenda nga ipadayon ang SDK hangtod karon.
Sa pagkakaron, ang VIVE Wave nagsuporta lamang sa OpenGL ES. Dinhi gilista ang mga bahin nga gimando sa impluwensya sa pasundayag sa GPU. Atong bahinon kini sa duha ka bahin: VR content ug MR content.
3.1 Ang sulud sa VR
3.1.1 Display Refresh Rate

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.

  • Para sa Lumad nga developer, tan-awa ang WVR_SetFrameRate.
  • Para sa developer sa Unity, tan-awa kini nga giya.
  • Alang sa Unreal developer, tan-awa kini nga giya.

3.1.2 Resolusyon sa Eyebuffer
Ang eyebuffer resoultion mao ang gidak-on sa texture nga ang content App nga i-render, ang ma-render nga texture isumite sa runtime aron mabuhat ang proseso sa pag-post ug ipakita sa HMD display.
Samtang ang usa ka mas dako nga gidak-on sa buffer sa mata mahimong moresulta sa mas klaro ug mas detalyado nga mga biswal, apan nagpahamtang usab kini og usa ka mahinungdanong load sa GPU. Busa, ang pagpangita sa husto nga balanse tali sa biswal nga kalidad ug pasundayag hinungdanon.
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.

  • Para sa Lumad nga developer, tan-awa ang WVR_ObtainTextureQueue. Kung mag-adjust sa gidak-on, kinahanglan nimo nga padaghanon ang gilapdon ug gitas-on sa usa ka ratio.
  • Para sa developer sa Unity, tan-awa ang WaveXRSettings.
    Sa laing paagi, makahimo ka og mga kausaban pinaagi sa code isip belwoe.
    XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C#
  • Para sa Unreal developer, tan-awa ang SetPixelDensity.

3.1.3 Daghang-View Paghubad
Sa tradisyonal nga paghubad, gilain namon ang wala ug tuo nga mga mata, nga nanginahanglan duha nga tawag sa pagdrowing alang sa parehas nga eksena. multi-View Gitubag sa rendering kini nga isyu pinaagi sa paghimo lamang sa usa ka draw nga tawag.
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.

  • Para sa Lumad nga developer, mahimo nimong i-refer ang wvr_native_hellovr sample.
  • Para sa developer sa Unity, tan-awa ang Render Mode, ang single pass kay multi-view bahin.
  • Alang sa Unreal developer, tan-awa kini nga giya.

3.1.4 Foveation
Ang foveated rendering panguna nga gidisenyo aron makunhuran ang load sa GPU. Gipamenos niini ang detalye sa frame sa peripheral sa display ug nagmintinar sa detalye sa taas nga resolusyon sa sentro sa field sa view. Kung ang App adunay isyu sa GPU, mahimo nimong sulayan ang pag-enable sa Foveation rendering.

VIVE VR Rendering Performance - Fig 2

Adunay kinahanglan nga matikdan samtang naggamit sa foveation:

➢ Ang mga tiggamit kasagaran dili makamatikod sa pagkunhod sa detalye sa peripheral nga mga rehiyon nga nag-apply sa default foveation mode. Apan kung ang peripheral nga kalidad sa foveation gibutang nga ubos kaayo, kini mahimong mamatikdan sa tiggamit.
➢ Ang mga epekto sa foveation mahimong mas mamatikdan sa pipila ka mga materyales sa texture, nga makadani sa atensyon sa tiggamit. Kinahanglan nga mahibal-an kini sa mga developer ug susihon kini sumala niana.
➢ Ang pag-enable sa foveated rendering feature moresulta sa fixed GPU performance cost, nga mahimong magkalahi tali sa 1% ngadto sa 6% depende sa gidak-on sa eye buffer. Kung mogamit usa ka yano nga shader sa eksena, ang makuha sa pasundayag gikan sa pagtipig sa mga kahinguhaan mahimong mas ubos kaysa sa gitakda nga gasto sa pasundayag sa GPU, nga moresulta sa pagkunhod sa pasundayag.

  • Para sa Native developer, tan-awa kini nga giya.
  • Para sa developer sa Unity, tan-awa kini nga giya. Ilabi na, kung mahimo nimo ang post-processing o HDR, ang foveation dili magamit sa hingpit. Tungod kay ang Unity mag-render sa mga butang ngadto sa kaugalingon nga namugna nga render texture, imbes nga ang runtime-generated present's render texture nga nagsuporta sa foveation.
  • Alang sa Unreal developer, tan-awa kini nga giya. Ilabi na, ang foveation dili hingpit nga magamit sa Multi-View Pag-render, tungod kay ang Unreal dili direktang maka-render sa mga butang ngadto sa runtime-generated render texture nga nagsuporta sa foveation.

3.1.5 Frame Sharpness Enhancement (FSE)
Ang FSE nga naghatag ug pagpahait sa rendering nga resulta pinaagi sa pagpaila sa sharpen filter, kini makahimo sa sulod nga mas tin-aw ug makatabang kaayo sa pagpauswag sa katin-aw sa teksto sa talan-awon. Kung ang App adunay isyu sa GPU, mahimo nimong ikonsiderar ang pag-disable sa FSE kung dili kini kinahanglanon.

VIVE VR Rendering Performance - Fig 3

  • Para sa Native developer, tan-awa kini nga giya.
  • Para sa developer sa Unity, tan-awa kini nga giya.
  • Alang sa Unreal developer, tan-awa kini nga giya.

3.1.6 Mapasibo nga Kalidad
Aron makadaginot sa baterya ug mamentinar ang performance sa rendering sa device, kini nga feature awtomatikong mo-adjust sa performance level sa CPU/GPU clock base sa ilang paggamit. Dugang pa, ang ubang mga estratehiya mahimong ipatuman aron mapausbaw ang pasundayag, sama sa awtomatikong pagpagana/pag-disable sa Foveation o ang sulod mahimong mag-adjust sa kaugalingon kung makadawat og taas/ubos nga load nga mga panghitabo.

  • Para sa Native developer, tan-awa kini nga giya.
  • Para sa developer sa Unity, tan-awa kini nga giya. Sa among Unity plugin, ang gidak-on sa buffer sa mata mahimong awtomatikong i-adjust base sa kasamtangan nga performance; Ang gidak-on sa teksto magsala sa mga kantidad sa sukdanan nga gamay ra kaayo sa lista sa Resolution. Among girekomendar ang teksto sa gidak-on labing menos 20 dmm o mas dako pa.
  • Alang sa Unreal developer, tan-awa kini nga giya.

3.1.7 Adaptive Motion Compositor
Kini nga feature kay experimental feature nga naglakip sa UMC ug PMC. Pakunhuran sa UMC ang Frame Rate sa katunga ug i-extrapolate ang bag-ong frame sa tinuud nga oras aron mapadayon ang pagkamaayo sa biswal. Bisan pa, kini adunay pipila ka latency, artifact ug pagkarga sa GPU.
Panguna nga gigamit sa PMC ang Depth Buffer aron tugotan ang ATW sa pag-asoy sa paghubad sa HMD, ipaabot sa usa ka 6-dof nga bayad. Kini nga feature makapakunhod sa latency sa paghubad pinaagi sa 1~2 nga mga frame, apan makadugang sa GPU loading.

  • Para sa Native developer, tan-awa kini nga giya.
  • Para sa developer sa Unity, tan-awa kini nga giya.
  • Alang sa Unreal developer, tan-awa kini nga giya.

3.1.8 Render Mask [Dili Suporta Dili Tinuod]
Ang mga pixel sa mga kilid nahimong halos dili makita human sa pagtuis, ang render mask nag-usab sa giladmon nga buffer values ​​niining dili makita nga mga pixel. Kung imong gi-enable ang depth testing, tungod sa early-z, kining dili makita nga mga pixel dili ma-render, sa ingon makapakunhod sa GPU load. Kini nga bahin mapuslanon kung adunay bug-at nga pagkarga nga mga butang sa kini nga dili makita nga mga lugar; kung dili, kung wala’y mga butang sa pag-render sa kini nga mga lugar, girekomenda nga i-disable kini tungod kay mag-ut-ut kini usa ka gamay nga paggamit sa GPU.

  • Para sa Native developer, tan-awa kini nga giya. Kinahanglan nimong ibugkos ang giladmon nga buffer sa dili pa tawagan ang RenderMask; kon dili, kini mahimong dili epektibo.
  • Para sa developer sa Unity, tan-awa kini nga giya.
  • Alang sa Unreal developer, sa pagkakaron wala nagsuporta sa feature sa Render Mask.

3.2 Kontento sa MR
3.2.1 Ipasibo ang Kalidad sa Passthrough
Adunay 3 nga lebel alang sa passthrough nga kalidad sa imahe:
➢ WVR_PassthroughImageQuality_DefaultMode – angay alang sa sulod sa MR nga walay espesipikong panginahanglan.
➢ WVR_PassthroughImageQuality_PerformanceMode – angayan para sa MR content nga nagkinahanglan ug dugang GPU resource para sa virtual scene rendering.
➢ WVR_PassthroughImageQuality_QualityMode – angay alang sa MR content nga nagtugot sa mga tiggamit sa pagtan-aw sa palibot nga tin-aw, apan ang virtual nga talan-awon sa sulod kinahanglang adunay mas maayo nga tuning para sa performance.
Mahimo nimong ipasibo ang kalidad sa Passthrough sa PerformanceMode aron makunhuran ang paggamit sa GPU.

  • Para sa Native, Uunity o Unreal developer, tan-awa kini nga giya.

3.2.2 I-adjust ang Passthrough Frame Rate
Sama sa Display refresh rate, mas taas nga Passthrough framerate nagtanyag og mas hapsay nga mga biswal, apan moabut sa gasto sa dugang nga load sa sistema. Sa kasukwahi, ang mubu nga mga rate sa pag-refresh makapakunhod sa load sa sistema, apan moresulta sa dili kaayo hapsay nga mga biswal. Adunay 2 ka mode sa passthrough framerate: Boost ug Normal.

  • Para sa Lumad nga developer, mahimong i-adjust ang passthrough nga kalidad gamit ang WVR_SetPassthroughImageRate.
  • Alang sa developer sa Unity, mahimong usbon pinaagi sa code, exampAng mga setting mao ang mosunod // C#
    Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode);
  • Para sa Unreal developer, setting method tan-awa ang blueprint node sa Figure 3-2-2.

VIVE VR Rendering Performance - Fig 4

VIVE OpenXR Setting

Ang OpenXR usa ka bukas nga sumbanan nga naghatag usa ka sagad nga set sa mga API alang sa pagpalambo sa mga aplikasyon sa XR nga nagdagan sa usa ka halapad nga mga aparato sa VR, nga gimugna sa Khronos Group. Gisuportahan usab sa VIVE Focus 3 ug VIVE XR Elite ang OpenXR, ang VIVE OpenXR SDK naghatag komprehensibo nga suporta alang sa mga aparato sa HTC VR, nga gitugotan ang mga developer nga magtukod og Allin-One ug kontento sa Unity ug Unreal nga makina sa mga aparato sa HTC VR. Nagpadayon kami sa pag-optimize ug pagsulbad sa lainlaing mga bug, mao nga girekomenda nga i-update sa mga developer ang bersyon sa FOTA sa ilang aparato aron mapadayon kini nga labing bag-o. Sa pagkakaron, ang VIVE OpenXR SDK nagsuporta sa OpenGL ES ug Vulkan.

4.1 Ang sulud sa VR
4.1.1 Display Refresh Rate
Ang konsepto dinhi susama sa 3.1.1 Display Refresh Rate.

  • Para sa Lumad nga developer, tan-awa ang XrEventDataDisplayRefreshRateChangedFB.
  • Para sa developer sa Unity, tan-awa kini nga giya.
  • Alang sa Unreal developer, tan-awa kini nga giya.

4.1.2 Resolusyon sa Eyebuffer
Ang konsepto dinhi susama sa 3.1.2 Eyebuffer Resolution. among girekomendar nga dili pakunhuran ang scale factor ubos sa 0.7, tungod kay kini mahimong moresulta sa dili madawat nga biswal nga kalidad.

  • Para sa Lumad nga developer, tan-awa ang xrCreateSwapchain. Kung mag-adjust sa gidak-on, kinahanglan nimo nga padaghanon ang gilapdon ug gitas-on sa usa ka ratio. ,
  • Para sa developer sa Unity, tan-awa ang mosunod nga exampug // C#
    XRSettings.eyeTextureResolutionScale = 0.7f; //girekomendar 1.0f~0.7f
  • Alang sa dili tinuod nga mga setting, tan-awa kini nga giya.

4.1.3 Daghang-View Paghubad
Ang konsepto dinhi susama sa 3.1.3 Multi-View Paghubad. Kini nga bahin nagpamenos sa load sa CPU, GPU usab adunay pipila ka mga benepisyo. Among girekomendar ang pagpagana niini nga bahin.

  • Para sa Lumad nga developer, ang KhronosGroup naghatag og OpenXR Multi-View example, tan-awa kini nga giya.
  • Para sa developer sa Unity, tan-awa ang Render Mode, ang single pass kay multi-view bahin.
  • Alang sa Unreal developer, sama sa mga setting sa VIVE Wave, tan-awa kini nga giya.

4.1.4 Foveation [Dili Pagsuporta sa Dili Tinuod]
Ang konsepto dinhi susama sa 3.1.4 Foveation. Ang foveated rendering nag-una nga gidesinyo aron makunhuran ang GPU load apan makapahimo niini nga adunay usa ka piho nga gasto sa performance sa GPU ug kung ang foveation gibutang nga ubos kaayo ug ang pipila ka mga materyales o mga texture gigamit, mahimo kini nga hilabihan
mamatikdan sa tiggamit. Busa, kini mao ang advisable sa pag-enable o pag-disable sa feature base sa imong piho nga mga kinahanglanon ug performance considerations Sa pagkakaron, Foveated functionality gisuportahan lamang sa OpenGL ES sa VIVE OpenXR SDK.

  • Alang sa Lumad nga developer, kini nga bahin anaa, apan sa pagkakaron, walay examples gihatag.
  • Para sa developer sa Unity, tan-awa kini nga giya.
  • Alang sa Unreal developer, wala nagsuporta niini nga bahin sa pagkakaron.

4.1.5 Render Mask [Dili Suporta Dili Tinuod]
Ang konsepto dinhi susama sa 3.1.8 Render Mask.

  • Para sa Lumad nga developer, gamita ang XrVisibilityMaskKHR aron makuha ang Mesh. Sa dili pa i-render ang talan-awon, gamita kini nga Mesh aron mapuno ang giladmon nga buffer value sa dili pa i-render ang talan-awon.
  • Para sa developer sa Unity, ang feature sa Render Mask gi-enable pinaagi sa default para sa OpenGL ES, ug mahimong ma-disable sa mosunod nga code; Ang Vulkan sa pagkakaron wala nagsuporta niini nga bahin. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
  • Alang sa Unreal developer, sa pagkakaron wala nagsuporta sa feature sa Render Mask.

4.2 Kontento sa MR
Ang OpenXR sa pagkakaron wala nagsuporta sa pagtakda sa Passthrough Quality ug Frame Rate. Magpadayon kami sa pag-optimize ug ayohon ang bahin sa Passthrough, busa girekomenda nga i-update sa mga developer ang bersyon sa FOTA sa aparato aron mapadayon kini nga labing bag-o.

Kasagaran nga Optimization

5.1 I-off ang High Performance Mode
Ang pagpalong sa "High performance mode" makapakunhod sa gidak-on sa display sa device, sa ingon makapakunhod sa paggamit sa GPU. Ang disbentaha mao ang pagkunhod sa resolusyon sa screen. Mahimo nimong balansehon ang kalidad ug pasundayag aron makadesisyon kung mahimo ba kini.
Ang setting nga lokasyon para sa VIVE Focus 3 gipakita sa Figure 5-1-1:

VIVE VR Rendering Performance - Fig 5

Ang lokasyon sa setting alang sa VIVE XR Elite gipakita sa Figure 5-1-2:

VIVE VR Rendering Performance - Fig 6

5.2 Daghangampling Anti-Aliasing
Daghangampling 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.

  • Para sa Lumad nga developer, MSAA OpenGL ES exsample mahimong magtumong niini; MSAA Vulkan exampler mahimong maghisgot niini.
    Ang Adreno GPU naghatag usa ka extension nga nag-optimize sa MSAA.
  • Alang sa developer sa Unity, tan-awa kini nga 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
Sa arkitektura sa Adreno GPU, adunay usa ka bahin diin, kung nagbugkos sa usa ka Target nga Render, kung ang Target nga Pag-render dili klaro o dili balido, sa matag higayon nga mahitabo ang pag-render, ang mga kantidad sa Render Target gikarga sa Graphics Memory, nga gitawag nga GMEM Load. Kung ang mga nauna nga mga kantidad wala kinahanglana, klaro o dili balido ang Render Target befaure rendering, makalikay niini nga sitwasyon aron mapauswag ang performance sa GPU.
Mahimo nimong malikayan ang GMEM Load gamit ang mga musunod nga pamaagi. Sa OpenGL ES, pagkahuman sa pagbugkos sa FBO, mahimo nimong tawagan ang glClear ug glClearDepth aron malimpyohan ang Buffer sa Color, Depth, ug Stencil, o tawagan ang glInvalidateFramebuffer aron ma-invalidate ang gitakda nga Render Target. Sa Vulkan, dili kinahanglan ang dugang nga mga panudlo; mahimo nimong klaro nga itakda kung hawanan ba ang attachment sa dili pa gamiton sa VkAttachmentDescription.loadOp.
Sa susama, ang pagtipig sa resulta sa usa ka Tile Render balik sa Main Memory gikan sa Graphics Memory gitawag nga GMEM Store; mahal usab kini nga operasyon alang sa GPU. Aron malikayan kini, among girekomendar ang pagbugkos lamang sa gikinahanglang Render Target aron malikayan ang wala kinahanglana nga mga operasyon sa Store.

5.4 Komposisyon Layer(Multi Layer)
Ang mga texture nga gipakita gamit ang Multi-Layer adunay mas maayong biswal nga kalidad. Bisan pa, kini nga bahin labi nga nagdugang sa performance sa GPU sa gidaghanon sa mga layer ug sa gidak-on sa mga texture. Girekomenda namon nga dili sobra sa tulo ka mga layer.

  • Para sa Lumad nga developer,
    o Ang VIVE Wave SDK naggamit sa WVR_SubmitFrameLayers aron ipasa ang data sa matag layer.
    o Ang VIVE OpenXR SDK nagbutang sa layer data sa XrFrameEndInfo ug isumite kini pinaagi sa xrEndFrame.
  • Alang sa developer sa Unity,
    o mga setting sa VIVE Wave SDK, tan-awa kini nga giya,
    o VIVE OpenXR settings, tan-awa kini nga giya.
  • Para sa Unreal developer,
    o Mga setting sa VIVE Wave SDK, tan-awa kini nga giya.
    o VIVE OpenXR settings, tan-awa kini nga giya.

5.5 nga CPU Spike
Kung mas bug-at ang pagkarga sa CPU, ang pipila ka background nagproseso sa mga hilo nga adunay taas nga prayoridad, mahimo’g makabalda kini sa lumad nga pagpatay. Dili kami makagarantiya nga ang Content Application dili mabalda sa ubang thread.
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.

  • Para sa Unity Developer, tan-awa ang feature sa Android thread configuration. Kung ikaw naggamit sa VIVE Wave SDK, kami adunay usa ka bahin sa WaveXRSettings nga nagtugot kanimo sa pag-adjust sa prayoridad, sama sa gipakita sa Figure 5-5-2. Ang gamay nga kantidad nagrepresentar sa mas taas nga prayoridad.

VIVE VR Rendering Performance - Fig 7

  • Dili tinuod nga walay pamaagi sa pag-usab sa thread sa dula, pag-render sa thread ug priority sa thread sa RHI pinaagi sa external settings gawas kon imong usbon ang engine code.

Copyright © 2024 HTC Corporation. Tanang katungod gigahinlogo sa VIVE

Mga Dokumento / Mga Kapanguhaan

VIVE VR Rendering Performance [pdf] Giya sa Gumagamit
VR Rendering Performance, Rendering Performance, Performance

Mga pakisayran

Pagbilin ug komento

Ang imong email address dili mamantala. Ang gikinahanglan nga mga natad gimarkahan *