🛠一些有關Quest2的畫面參數調整心得
在Oculus Quest2一體機中, 我們可以使用ADB(Android Debug Bridge)命令調整例如VR熒幕的解析度, 刷新率, 注視點渲染和驍龍XR2 SoC的CPU/GPU主頻.
✨: 請注意!設備重新啓動后將還原設定, 如果你誤更改導致問題出錯只需重啓Quest2即可, 同樣的如果你想要調整爲自己的設置每次開機或重啓后都需要重新執行一遍ADB命令
首先來講螢幕解析度問題
Oculus Quest2的熒幕物理解析度為3664x1920, 等效接近4K(3840x2160), 但由於VR需要繪製雙眼的圖形畫面, 熒幕被一分爲二, 單眼的解析度即爲1832x1920, 這是理想狀態下理論物理最大解析度, 比例爲1:1.05; 但實際上在VR一體機中, 渲染解析度和由此得出的單眼理論解析度相去甚遠, 使用Facebook提供的OVR Metrics Tool可以測出, 大部分的應用程式均運行在1440×1584@72Hz, 比例爲1:1.1與理論不符, 經過大量VR游戲/程式測試, 并非所有就運行於此解析度, 但都會維持在1:1.1的比例去倍率調整解析度, 下面提供一些測試的項目及其默認工作的解析度及刷新率狀況
測試各應用程式默認解析度及刷新率數據:
應用程式 |
解析度 |
刷新率 |
Oculus主控室 |
1440×1584 |
90Hz |
iQIYI VR 愛奇藝VR |
1440×1584 |
72Hz |
Netflix 奈飛 |
1440×1584 |
72Hz |
Arizona Sunshine 亚利桑那阳光 |
1440×1584 |
72Hz |
Ballista 弩车之战 |
1440×1584 |
72Hz |
Dead and Buried II 長眠地下2 |
1440×1584 |
72Hz |
Onward衝鋒 |
1440×1584 |
72Hz |
PavlovVR 巴普洛夫 |
1440×1584 |
72Hz |
PixelRipped1995 电子像素1995 |
1440×1584 |
72Hz |
SUPERHOT VR 超熱VR |
1440×1584 |
90Hz |
SairentoVR 墨者 |
1440×1584 |
90Hz |
SpacePirateTrainer 宇宙海盗 |
1440×1584 |
72Hz |
SportsScramble 体育争夺战 |
1440×1584 |
72Hz |
VR Chat |
1440×1584 |
72Hz |
可以看到即使解析度相同, 有些應用也會自己調整到更高的刷新率, 同樣的開發者也可以自己設定應用程式的渲染解析度
我們還發現, 一些應用程式默認不工作在1440×1584解析度下
測試默認渲染于不同解析度:
應用程式 |
解析度 |
刷新率 |
等比縮放 |
CreedRiseToGlory 荣耀擂台 |
1296×1440 |
72Hz |
0.9x |
YouTube VR |
1584×1742 |
90Hz |
1.1x |
BestSaber 节奏光剑 |
1728×1901 |
72Hz |
1.2x |
Tentacular 触手巧匠 |
1728×1901 |
72Hz |
1.2x |
GreenHellVR 绿色地狱 |
1728x1904 |
72Hz |
1.2x |
Rush 滑翔 |
2016×2218 |
72Hz |
1.4x |
GunClubVR 枪械俱乐部 |
2016×2224 |
72Hz |
1.4x |
ElevenTableTennis 真实乒乓球 |
2016×2224 |
90Hz |
1.4x |
具體以何種刷新率和解析度渲染取決於應用程式開發者, 解析度方面默認爲1440×1584@72Hz, 個人猜測如果開發者沒有指定渲染解析度和刷新率時皆以此配置渲染運行, 當開發者測試在此解析度下應用程式可以以更高的幀數運行時, 會調整開放更高的刷新率來提高最大幀速率, 但並不是所有應用程式都能跑滿開發者制定的刷新率, 例如PavlovVR 巴普洛夫在1440×1584@72Hz下實測只有40FPS左右, 但總體流暢, GreenHellVR 绿色地狱在1728x1904@72Hz下實測幀數僅30+, 偶爾甚至跌至30以下, 儘管機能不足以流暢運行的情況下, 開發者依然選擇渲染解析度等比縮放1.2x, 寧可幀數較低也要保證視覺清晰度, 另一個不同的例子在CreedRiseToGlory 荣耀擂台, 開發者選擇以0.9x渲染降低分辨率來盡可能維持其能跑滿72Hz刷新率, 但並不代表其不能通過後期優化來提高解析度和幀數, 在測試新版本的CreedRiseToGlory 荣耀擂台時, 發現渲染解析度從1296×1440提升到了1440×1584也就是1x縮放, 同時刷新率仍然能跑滿72Hz刷新率, 也就是說前面的所有案例開發者都可以通過優化應用程式來提升運行效能帶來更高的解析度和幀數.
以上為開發者設定的渲染解析度和熒幕刷新率, 當然我們可以去手動調整!
當然請瞭解開發者默認的配置代表其可以以此解析度渲染並穩定工作在指定刷新率上, 自己手動更改會導致卡頓及其帶來的幀率波動和更大的發熱量和電池消耗速度.
手動調整應用程式渲染解析度
指定應用程式的默認渲染解析度:
Command #adb shell setprop debug.oculus.textureWidth 2016
Command #adb shell setprop debug.oculus.textureHeight 2224
#textureWidth為指定畫面底邊寬, textureHeight為指定畫面側邊高
上述兩句ADB命令執行完畢后, 熒幕解析度將强制為2016x2224
但請注意! 改變此默認解析度后, 進入應用程式依然會依據其本身指定的縮放比例再次進行縮放
例如默認1440×1584, 我們啓動BestSaber 节奏光剑, 解析度按照開發者設定放大1.2x到1728×1901
手動更改2016x2224后, 啓動BestSaber 节奏光剑, 此解析度依然會被放大1.2x到約2419x2668, 這將超出你預想的設定解析度並導致幀數過低
所以手動更改分辨率前請考慮清楚最終被再次縮放后的實際解析度, 以免超出預期, 如果運行的應用程式不會再次縮放, 那麽調整後的解析度即爲最終渲染解析度
手動調整熒幕刷新率
同樣的, 即使開發者設定限制了最高刷新率, 我們依然可以通過手動設定開放最高120Hz的熒幕刷新率
指定熒幕刷新率為120Hz:
Command #adb shell setprop debug.oculus.refreshRate 120
#refreshRate為指定熒幕刷新率, 最高為120, 也可手動降低為90或72, 不建議設定這三個數值之外的刷新率, 更不要設定大於120的數值
更改後的刷新率即爲最終實際的渲染刷新率
通過一些操作來提高設備渲染幀數
當你調整了更高的解析度並開啓了120Hz刷新率, 進入游戲玩起來后, 也許會被Quest2的機能潑一盆冷水, 一個很現實的問題就是: 驍龍XR2的GPU實在是頂不住了!你發現哪怕不提高游戲幀數, 一些游戲即便開啓了120Hz刷新率, 他甚至連90FPS都跑不到…
也許一些方法可以幫助你在驍龍XR2捉襟見肘的GPU性能下提升一些幀數?
注視點渲染Foveated Rendering 技術
注视点渲染是一种新型图形计算技术,凭借降低注视点周围图像的分辨率来大幅降低计算复杂度,主要应用在集成了眼动追踪技术的虚拟现实头盔中。
人眼在看东西时,并不会整个视野范围都一样清晰,而是中心点清晰,越往两旁越模糊,因此在虚拟现实的设备上渲染(Rendering)显示图像时,并不需要整个画面都同一分辨率,而是正在注视的那个画面中间分辨率最高,往周围分辨率一次降低,一般说来会将视野切成三个同心圆,中心那一圈会使用完整的分辨率,第二圈则是 50% - 60% 分辨率,最外围分辨率则会降到 25% 以下,根据瑞典Tobii和中国七鑫易维两家公司分别给出的优化数据是“降低CPU负载30%-70%”,以及“节省50%-80%像素,CPU运算速度提升5-7倍”.
--引用自維基百科:注视点渲染
在Valve于GDC2016的這份文檔上可以窺見一些技術細節
--引用自⟪Alex Vlachos Advanced VR Rendering Performance GDC2016⟫
不難發現, 通過將人眼注視的正中心以全解析度渲染外, 視綫外一大圈綠色區域通過技術實現減少渲染的像素點來大幅度提高性能, 而人眼對注視點邊緣的清晰度并不敏感
注视点渲染旨在降低VR场景所需的计算能力。人眼注视中心凹的分辨率最高,而我们外围视觉在细节和颜色方面则较低。注视点渲染的目标是利用这一特点,只以高分辨率为中心凹渲染,亦即人眼注视点区域,然后大幅降低外围视觉的的场景复杂度。
不論是Valve還是Facebook(也許應該稱其爲Meta), 注視點渲染的技術實現原理大致相同
讓我們回到Quest2中, 要啓用固定注釋率, 執行以下ADB命令
Command #adb shell setprop debug.oculus.foveation.level 1
這個選項有很多需要説明的現象
首先你注意到這條命令將foveation.level這個參數調整爲1, 不開啓為0, 此選項有多個擋位: 0, 1, 2, 3, 4, 5; 但請注意不同的游戲支持的擋位并不相同, 且相同擋位下不同游戲注視點渲染區域也有差別, 但其規律是不變的, 數值越大代表注視點渲染的區域越少, 丟棄像素的模糊邊緣越大
經過實際測試注意到, 儘管大部分游戲并不默認開啓固定注釋點渲染, 但極個別游戲還是默認開啓的,
應用程式 |
固定注視點渲染級別 |
GreenHellVR 绿色地狱 |
2 |
CreedRiseToGlory 荣耀擂台 |
1-3 |
ElevenTableTennis 真实乒乓球 |
4 |
以上僅測試部分默認開啓固定注視點渲染的游戲並列出, 測試注意到,除了GreenHellVR 绿色地狱和ElevenTableTennis 真实乒乓球這種保持一直不變的注視點渲染級別外, CreedRiseToGlory 荣耀擂台則一直在波動, 不同的場景一直在動態調節注視點渲染級別, 複雜的場景最高到達了3
對於開啓注視點渲染后邊緣畫面由於解析度降低變得更爛, 在此使用ElevenTableTennis 真实乒乓球的實際畫面提供參考
經過數倍放大後可以發現, 邊緣的球桌攔網方格出現了更明顯的模糊由於其更低的解析度, 而右側由於更靠近畫面中心解析度更高
不過不是刻意去往邊上瞄或是截圖放大邊緣去對比幾乎沒法發現損失差別, 但如果級別過高導致中心原解析度渲染的區域過小, 模糊區域容易被人眼察覺, 則會很明顯的感受到兩者邊界, 這種情況下可以選擇手動降低其擋位擴大中心注視區至人眼邊緣注視不到的地方來提升游戲體驗
還有一個重點值得注意, 上面講到不同的游戲即使固定注視點渲染擋位相同, 但對比會發現可能實際的區域卻不一樣; 例如我手動將注視點渲染級別設定爲3, 進入游戲A, 發現區域非常完美, 注視區看不到外圈的模糊, 極大的提高了游戲幀數, 然後保持此級別進入游戲B, 卻發現模糊區域很明顯容易被觀察到, 邊緣模糊區域擴大到了你的注視區域内, 非常容易就覺察到邊界
對於這種情況不想折騰的話個人建議直接指定注視點渲染級別為1, 這種情況下就算個別程式範圍不一, 但模糊區域也不會大到被人眼察覺, 還能借此提升幀數
如果你想折騰, 建議使用OVR Metrics Tool檢查一下游戲默認是否自動開啓了, 如果自己會開啓那麽建議不更改此參數, 如果游戲本身并不會默認開啓, 渲染時固定注視渲染級別為0, 那麽你可以嘗試逐級上調直到能明顯觀察到模糊區
同樣的也講過, 不同游戲對此參數的最大支持擋位不一, 有些游戲可能最大只支持到3, 有些卻可以支持到4甚至是5, 具體還需要自己去測試比較才能得出最佳的參數配置
下面我將通過實機測試來幫助你瞭解固定注視點渲染對游戲幀數的提升
我們選擇測試的對象為人氣非常高的 BestSaber 节奏光剑, 以此為基準探討幀數的變化
默認渲染解析度 1728x1901 |
默認熒幕刷新率72Hz下測得 FPS72 |
此時默認注視點渲染級別為0 |
系統根據負載自動調整CPU Level 4 為1478MHz, 此時CPU占用率: 20%-30% |
系統根據負載自動調整GPU Level 4 為525MHz, 此時GPU占用率 60%+ |
可以看到還有很大的提升空間, GPU占用率僅60%+沒有被吃滿, 驍龍XR2表示應對此場景輕輕鬆鬆~
我們嘗試保持當前渲染解析度的同時手動調整120Hz刷新率開放更高的幀數限制后
默認渲染解析度 1728x1901 |
當前熒幕刷新率120Hz下102FPS |
此時默認注視點渲染級別為0 |
系統根據負載自動調整CPU Level 4 為1478MHz, 此時CPU占用率: 30%-40% |
系統根據負載自動調整GPU Level 4 為525MHz, 此時GPU占用率 97%+ |
可以看到開放120Hz刷新率后, GPU即便幾近榨乾, 也仍然無法跑滿當前刷新率
此時我們嘗試透過開啓注視點渲染級別1來比較其對幀數的提升
默認渲染解析度 1728x1901 |
當前熒幕刷新率120Hz下121FPS |
此時注視點渲染級別為1 |
系統根據負載自動調整CPU Level 4 為1478MHz, 此時CPU占用率: 30%-40% |
系統根據負載自動調整GPU Level 4 為525MHz, 此時GPU占用率 95%+ |
開啓固定注視點渲染后游戲幀數後獲得了近20FPS的提升, 增幅高達19%, 且完全觀察不到邊緣模糊區對游玩體驗毫無影響
可以看出固定注視點渲染在幾乎不提高硬體性能的情況下不但不影響游戲體驗還能獲得可觀的幀數提升
此時由於幀數已經跑滿120Hz天花板, 我們嘗試提高游戲渲染解析度來進一步壓榨XR2的硬體機能
默認我們的解析度為1440x1584, 前面我們講過一些開發者會根據自身游戲情況去縮放渲染解析度, BestSaber 节奏光剑爲1.2x
但如果我們把默認的解析度從1440x1584調整到1728x1901, 對於游戲而言不論當前解析度爲何, 它只會基於當前解析度去等比縮放
最終的渲染解析度即爲: 默認解析度(1440x1584) x 被我們手動拉高1.2x(1728x1901) x BestSaber 节奏光剑將當前默認解析度拉高1.2x(2074x2285)
最終也就是經過了兩次1.2x的放大達到了2074x2285, 測試結果如下:
當前解析度2074x2285 |
當前熒幕刷新率120Hz下91FPS |
此時注視點渲染級別為1 |
系統根據負載自動調整CPU Level 4 為1478MHz, 此時CPU占用率: 30%-40% |
系統根據負載自動調整GPU Level 4 為525MHz, 此時GPU占用率 99%+ |
不難發現, 渲染解析度的提高造成了嚴重的幀數損失, 但換來了更清晰的畫面
如果我們還要在此基礎上提高幀數, 除了繼續增加注視點渲染級別外, 還可以通過提高CPU/GPU級別來獲得性能提升
手動提升CPU/GPU性能級別
通過上面的測試你可能會發現一個細節, 即CPU和GPU存在一個Level等級之分, 級別越高則代表CPU/GPU主頻越高從而帶來更强勁的性能釋放, 在Quest2中系統會根據場景負載去自動調節CPU/GPU Level在1-4之間, 但CPU/GPU的最大Level為5, 這是一個隱藏的選項, 只能通過ADB命令去開啓, 系統不會根據負載自動調節到等級5, 使用下面的命令去調整CPU/GPU Level到5
Command #adb shell setprop debug.oculus.cpuLevel 5
Command #adb shell setprop debug.oculus.gpuLevel 5
注意:以手動指定為其他等級, 例如Level4對你當前的游戲來説性能足夠, 但卻因爲系統在根據負載動態調整時不時降爲Level3又升至4造成掉幀, 可以手動使用上面的命令設定爲4, 此命令設定的Level為固定值, 設定后系統不會再根據負載動態調整
接著上面的測試, 我們將CPU/GPU等級强制調整爲5, 結果如下
當前解析度2074x2285 |
當前熒幕刷新率120Hz下103FPS |
此時注視點渲染級別為1 |
手動指定CPU Level 5 為1478MHz, 此時CPU占用率: 30%-40% |
手動指定GPU Level 5 為587MHz, 此時GPU占用率 97%+ |
雖然CPU和GPU等級都從4提升到了5, 但實際上CPU主頻是沒有變化的, 看占用率在CPU方面也不存在瓶頸, 不太清楚CPU Level 5具體改變了什麽
對於GPU Level 5, 一個很直觀的變化是, GPU的主頻從等級4的525MHz提升到了587MHz, 同比提升12%, 這應該是驍龍XR2 GPU能達到的最高主頻, 也正是因此FPS獲得了10幀左右的提升, 同比提升13%, 但Quest2也會因此產生更高的溫度, 最要命的是在本身續航水平就比較爛的情況下電池消耗速度會更快, 此模式下個人建議接入電源使用, 可以插上行動電源揣到口袋裏, 也可以去購買第三方帶電池的頭戴配件.
以上就是我個人整理的有關Oculus Quest2的使用心得, 相關的數據及測試不能以偏概全, 這裏僅出於抛磚引玉的作用, 具體什麽游戲用什麽樣的解析度去跑, 固定注視點渲染多少恰當還需要自己去測試相應的游戲慢慢調整到適合自己喜好的爲佳.
這裏最後再强調一些重點:
1) ADB命令修改的參數在系統重啓後都將被恢復為默認值, 重啓後需要再次執行!!!
2) 自己調整的渲染解析度進入游戲后, 如果游戲自己本身還會自己縮放渲染, 請注意最終的渲染解析度
3) 建議按照默認的1440×1584比例去提高/降低解析度, 比例爲1:1.1, 使用其他比例的解析度渲染的畫面可能出現畸變
4) 熒幕刷新率建議直接調整至120Hz, 但不建議調整爲72Hz, 90Hz, 120Hz之外的刷新率以免造成問題
5) 不同應用程式對固定注視點渲染支持的擋位不同, 同擋位下不同應用程式的渲染範圍也不同, 測試的結果僅適用於同一個程式内
6) 提高CPU/GPU等級后可能造成設備溫度升高, 注意不要遮擋Quest2的出風口,一定要注意電池溫度情況, SoC的溫度上升本身會帶動整個設備升高溫度, 電池亦會受此影響, 況且在CPU/GPU Level5電池電量消耗速度快, 若邊充電邊進行游戲可能導致電池更高的溫度並超出鋰電池理想工作溫度範圍影響使用壽命!
本文中所有提及的ADB命令:
Command #adb shell setprop debug.oculus.cpuLevel 5
Command #adb shell setprop debug.oculus.gpuLevel 5
Command #adb shell setprop debug.oculus.refreshRate 120
Command #adb shell setprop debug.oculus.foveation.level 1
Command #adb shell setprop debug.oculus.textureWidth 2016
Command #adb shell setprop debug.oculus.textureHeight 2224
原創文章:
MiKing233: 一些有關Quest2的畫面參數調整心得
https://talkway.mknetwork.net/articles/13