Autor Wątek: Kontrola ustawień Meta Link za pomocą skryptów bat  (Przeczytany 765 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Kontrola ustawień Meta Link za pomocą skryptów bat
« dnia: Lutego 07, 2026, 12:09:25 »
Pozwolę sobie to wrzucić jako osobny wątek.

Kiedyś natknąłem się na taki skrypt na jakimś rosyjskojęzycznym forum VR:

@echo off
:: ================  Variables settings  ======================
::-----------------------------------------------------
:: Parameter"AllDefault" settings:
::     0 - Set ODT parameters,
::     1 - Reset parameters WITHOUT restart Oculus Service
::     2 - Reset Parameters WITH restart Oculus service
set AllDefault=0
::---------------------------------------------------------
:: Parameter "Performance HUD" settings:
::    0 - None (Default)
::    1 - Performance summary
::    2 - Latency Timing
::    3 - App Render Timing
::    4 - Compositor Render Timing
::    5 - Not Use (Reserved)
::    6 - Async-Space Wrap Stats
::    7 - Oculus Link
::    8 - Oculus Link Detail
set PerfHUD=7
::-------------------------------------------------------------
:: Parameters "PixelPerDisplay", "FOV" settings:
::    0 - default
set PixelPerDisplay=1.3
set FOVx=0.85
set FOVy=0.85
:: Parameter "Use FOV stencil" settings:
::    true - Auto (default)
::    false - Off
set FOVstencil=true
set EncodeWidth=0
set BitrateMbps=900
::-----------------
:: Parameter "Distortion Curvature" settings:
::    0 - Low
::    1 - High (default)
set DistCurve=1
::-------------------
:: Parameter "Link Sharpening" settings:
::    0 - Auto (default)
::    1 - Disable
::    2 - Enable
set LinkSharp=0
::------------------------
:: Parameter "Encode Dynamic Bitrate" settings:
::    0 - Disable (default)
::    1 - Enable
set DynBitRate=0
set DynBitRateMax=0
set DynBitRateOffset=0
::------------------------
:: Parameter "MobileASW" settings:
::    0 - Auto (default)
::    1 - Disabled
::    2 - Enabled
set masw=0
::------------------------
:: Parameter "ASW" settings:
::    Auto - Automatic (default)
::    Off - Disable
set asw=off
::=================================================================
if %alldefault% == 1 goto :_defaultnrs
if %alldefault% == 2 goto :_defaultrs
(
@echo service set-pixels-per-display-pixel-override %PixelPerDisplay%
@echo service set-client-fov-tan-angle-multiplier %fovx% %fovy%
@echo service set-use-fov-stencil %FOVstencil%
@echo perfhud set-mode %PerfHUD%
@echo server:asw.%asw%
@echo exit
) | "C:\Program Files\Oculus\Support\oculus-diagnostics\OculusDebugToolCLI.exe"
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v EncodeWidth /t REG_DWORD /d %EncodeWidth% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v BitrateMbps /t REG_DWORD /d %BitrateMbps% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DistortionCurve /t REG_DWORD /d %DistCurve% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v LinkSharpeningEnabled /t REG_DWORD /d %LinkSharp% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v MobileASWMode /t REG_DWORD /d %masw% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBR /t REG_DWORD /d %DynBitRate% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBRMax /t REG_DWORD /d %DynBitRateMax% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBROffsetMbps /t REG_DWORD /d %DynBitRateOffset% /f
exit
:_defaultrs
:: Set parameters to default with restart service
net stop OVRservice && net start OVRservice
@ping localhost /n 2 >nul
:_defaultnrs
:: Set parameters to default without restart service
(
@echo service set-pixels-per-display-pixel-override 0
@echo service set-client-fov-tan-angle-multiplier 0 0
@echo service set-force-mip-gen-on-all-layers true
@echo service set-offset-mip-bias-on-all-layers 0
@echo service set-use-fov-stencil true
@echo service set-pose-injection 0
@echo server:asw.Auto
::echo service enable-adaptive-gpu-perf-scale true
::echo service set-use-rec-spec-resolution
@echo exit
) | "C:\Program Files\Oculus\Support\oculus-diagnostics\OculusDebugToolCLI.exe"
reg delete "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v BitrateMbps /f
reg delete "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DistortionCurve /f
reg delete "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v LinkSharpeningEnabled /f
reg delete "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v MobileASWMode /f
reg delete "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBROffsetMbps /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v inKpiReport /t REG_DWORD /d 0 /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v EncodeWidth /t REG_DWORD /d 0 /f
::reg delete "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v EncodeWidth /t REG_DWORD /f
::reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBR /t REG_DWORD /d 0 /f
reg delete "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBR /f
reg delete "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBRMax /f
exit

Jest to o tyle fajna rzecz, że pozwala zrozumieć co kontrolują poszczególne ustawienia i jakie zmienne można stosować. Część ustawień jest modyfikowana za pomocą komend do Oculus Debug Tool. Cześć zapisywana jest w rejestrze Windowsa. Wartości zapisywane w rejestrze są stałe (odporne na reset), te ustawiane w ODT co do zasady resetują się do wartości domyślnych przy każdym uruchomieniu PC lub restarcie usługi.

Ten skrypt wyżej to generalnie trochę przerost formy nad treścią, ale na jego bazie przygotowałem sobie pliki bat, którymi mogę szybko zmieniać ustawienia Meta Link. Generalnie z tych samych komend korzysta zapewne OTT, tylko po prostu tam jest to ubrane w GUI i dodatkowe funkcje. Ja kierując się w życiu zasadą "make life harder" wybrałem kontrolowanie tych ustawień za pomocą prostych skryptów.

Jako że grywam zarówno po kablu jak i bezprzewodowo, zrobiłem sobie pliki bat do szybkiej zmiany tych ustawień.

Mam plik Link_fixed_900.bat o takiej treści:

@echo off
set EncodeWidth=0
set BitrateMbps=900
set DynBitRate=0
set DynBitRateMax=0
set DynBitRateOffset=0
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v EncodeWidth /t REG_DWORD /d %EncodeWidth% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v BitrateMbps /t REG_DWORD /d %BitrateMbps% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBR /t REG_DWORD /d %DynBitRate% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBRMax /t REG_DWORD /d %DynBitRateMax% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBROffsetMbps /t REG_DWORD /d %DynBitRateOffset% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v HEVC /t REG_DWORD /d 0 /f
exit

Analogicznie plik AirLink_dynamic.bat do grania po Wi-Fi (tutaj od siebie dodałem ustawienie kodeka x-265/HEVC, który w Air Link spisuje się świetnie):

@echo off
set EncodeWidth=0
set BitrateMbps=0
set DynBitRate=1
set DynBitRateMax=400
set DynBitRateOffset=50
@echo exit
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v EncodeWidth /t REG_DWORD /d %EncodeWidth% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v BitrateMbps /t REG_DWORD /d %BitrateMbps% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBR /t REG_DWORD /d %DynBitRate% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBRMax /t REG_DWORD /d %DynBitRateMax% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v DBROffsetMbps /t REG_DWORD /d %DynBitRateOffset% /f
reg add "HKCU\SOFTWARE\Oculus\RemoteHeadset" /v HEVC /t REG_DWORD /d 1 /f
exit

To pozwala mi na szybką zmianę tych ustawień. Z tym, że konieczny jest restart PC lub usługi Oculus by zadziałały.

Natomiast z pozostałych ustawień kluczowe są dla mnie PPDO, FOV i ASW. Te wystarczy odpalić w pliku bat przed uruchomieniem gry. Więc można stworzyć taki prosty plik:

@echo off
set PixelPerDisplay=1.5
set FOVx=0.85
set FOVy=0.85
set asw=off

(
echo service set-pixels-per-display-pixel-override %PixelPerDisplay%
echo service set-client-fov-tan-angle-multiplier %fovx% %fovy%
echo server:asw.%asw%
echo exit
) | "C:\Program Files\Oculus\Support\oculus-diagnostics\OculusDebugToolCLI.exe"
exit

Ale tutaj drobna uwaga - ustawienia PPDO i FOV resetują się do 0 przy każdym uruchomieniu komputera, natomiast ASW ustawia się na Auto przy każdym uruchomieniu Linka. Więc odpalając ten plik bat i później łącząc się poprzez Link, ASW będzie znowu jako Auto. Przez jakiś czas miałem po prostu osobny plik tylko z komendą ASW=off, który odpalałem zawsze dla pewności po połączeniu gogli przez Link. Można też korzystać ze skrótu klawiszowego CTRL+Num1. Ale teraz doszedłem do wniosku, że najlepiej wkomponować te komendy w launcher.

I tak, dla DCS mój plik z którego odpalam grę w VR wygląda tak:

@echo off

:: =========================
:: OCULUS SETTINGS
:: =========================
set PixelPerDisplay=1.5
set FOVx=0.85
set FOVy=0.85
set "asw=off"

(
echo service set-pixels-per-display-pixel-override %PixelPerDisplay%
echo service set-client-fov-tan-angle-multiplier %fovx% %fovy%
echo server:asw.%asw%
echo exit
) | "C:\Program Files\Oculus\Support\oculus-diagnostics\OculusDebugToolCLI.exe"
timeout /t 5 /nobreak

:: =========================
:: LAUNCH JOYSTICK GREMLIN
:: =========================
cd /d "C:\Program Files (x86)\H2ik\Joystick Gremlin\"
start joystick_gremlin.exe

:: =========================
:: LAUNCH DCS (VR)
:: =========================
cd /d "C:\Program Files (x86)\Steam\"
start steam.exe steam://launch/223750/VR

exit

W przypadku IL-2 GB VR (dopisałem komendy podmieniające ustawienia na te z VR, bo mam też osobny launcher 2D/FLAT):

@echo off

:: =========================
:: CONFIG FILES
:: =========================
set "FILE_A=E:\SteamLibrary\steamapps\common\IL-2 Sturmovik Battle of Stalingrad\data\startup.cfg"
set "FILE_B=E:\SteamLibrary\steamapps\common\IL-2 Sturmovik Battle of Stalingrad\data\startup_VR.cfg"

:: =========================
:: VERIFY FILES
:: =========================
if not exist "%FILE_A%" (
    echo ERROR: %FILE_A% not found
    pause
    exit /b 1
)

if not exist "%FILE_B%" (
    echo ERROR: %FILE_B% not found
    pause
    exit /b 1
)

:: =========================
:: BACKUP + VR CONFIG
:: =========================
copy /y "%FILE_A%" "%FILE_A%.OLD" >nul
copy /y "%FILE_B%" "%FILE_A%" >nul

:: =========================
:: OCULUS SETTINGS
:: =========================
set PixelPerDisplay=1.5
set FOVx=0.85
set FOVy=0.85
set "asw=off"

(
echo server:asw.%asw%
echo exit
) | "C:\Program Files\Oculus\Support\oculus-diagnostics\OculusDebugToolCLI.exe"
timeout /t 5 /nobreak

:: =========================
:: LAUNCH JOYSTICK GREMLIN
:: =========================
cd /d "C:\Program Files (x86)\H2ik\Joystick Gremlin\"
start joystick_gremlin.exe

:: =========================
:: LAUNCH IL-2 (VR)
:: =========================
cd /d "C:\Program Files (x86)\Steam\"
start steam.exe steam://launch/307960/VR

exit

Warto mieć komendę timeout aby na pewno ustawienia się zapisały przed odpaleniem gry.

Więc mój "workflow" wygląda później następująco: odpalam aplikację Meta Horizon Link, uruchamiam gogle i połączenie Link, odpalam grę plikiem bat z wirtualnego pulpitu.

Może komuś się przyda. :)
« Ostatnia zmiana: Lutego 07, 2026, 12:25:23 wysłana przez Jascha »

Offline YoYo

  • Administrator
  • *****
  • Wieczny symulant
    • YoYosims
Odp: Kontrola ustawień Meta Link za pomocą skryptów bat
« Odpowiedź #1 dnia: Lutego 07, 2026, 14:51:39 »
Super! Uratowałeś mi dzień! :D
Faktycznie, w tym układzie dalej działa i odpowiednio nadpisuje ustawienia w ODT. Ja w zasadzie potrzebuję ASW off, FOV i PixelPerDisplay. Resztę akurat ODT pamięta (ale latam tylko na Linku).
Dodałem jeszcze sobie dźwięk by odtwarzał potwierdzenie w zależności co uruchamiam, chociaż i tak kolejnym krokiem jest uruchomienie czy to DCS, czy IL-2 czy MSFS.
Świetna sprawa i dzięki za tak długi opis.

Mój przykład dla DCS:

@echo off

:: =========================
:: OCULUS SETTINGS
:: =========================
set PixelPerDisplay=1.2
set FOVx=0.80
set FOVy=0.80
set "asw=off"

(
echo service set-pixels-per-display-pixel-override %PixelPerDisplay%
echo service set-client-fov-tan-angle-multiplier %fovx% %fovy%
echo server:asw.%asw%
echo exit
) | "C:\Program Files\Oculus\Support\oculus-diagnostics\OculusDebugToolCLI.exe"

:: =========================
:: LAUNCH Sound
:: =========================

powershell -c "(New-Object Media.SoundPlayer 'C:\Program Files\Oculus\Support\oculus-diagnostics\Sound_yoyo\DCSprofileloaded.wav').PlaySync()"
timeout /t 1 /nobreak

:: =========================
:: LAUNCH DCS (VR)
:: =========================
cd /d "S:\DCS World OpenBeta\bin-mt"
start "" "DCS.exe"

exit
webmaster,   YoYosims - jeśli lubisz symulatory lotnicze

www.yoyosims.pl

Odp: Kontrola ustawień Meta Link za pomocą skryptów bat
« Odpowiedź #2 dnia: Lutego 07, 2026, 15:27:22 »
No to git. :) Dobrze, że działa, bo już miałem obawy że coś namieszali znowu. Wrzucę może później ten opis też na forum EDków. Może się przyda.

Ja teraz namiętnie tworzę te pliki wsadowe, zwłaszcza do gier gdzie uruchamiam aplikacje towarzyszące. Czyli np. do DCS w 2D uruchamia mi automatycznie TrackIR również. Fajna sprawa.

Tak z ciekawości - Ty masz ustawioną rozdzielczość maksymalną w aplikacji Meta i stąd tylko PPDPO 1.2, tak? Ja akurat mam ustawioną tam natywną rozdzielczość Quest 3, czyli 4128x2208 (chociaż w sumie to raczej powinno być podane jako 2064x2208 na oko). Łatwiej tak mi się w tym połapać. Chociaż w aplikacji to jest podane w jakiś skopany sposób, bo jakiś mnożnik się wyświetla, który jest zmienny w zależności od oświeżania. W przypadku 72 Hz jest chyba podane x1.1, gdzie tak naprawdę ta rozdzielczość to zawsze powinno być x1.0, bez względu na Hz.

Offline YoYo

  • Administrator
  • *****
  • Wieczny symulant
    • YoYosims
Odp: Kontrola ustawień Meta Link za pomocą skryptów bat
« Odpowiedź #3 dnia: Lutego 07, 2026, 17:14:50 »
Tak z ciekawości - Ty masz ustawioną rozdzielczość maksymalną w aplikacji Meta i stąd tylko PPDPO 1.2 ...

Tak, tam mam 1,5. Istnieją 2 szkoły, w sumie różnic zasadniczych nie widzę, czy tak, czy tak.

Dorobiłem nie tylko dźwięki ale i ikonki do batów ;).

webmaster,   YoYosims - jeśli lubisz symulatory lotnicze

www.yoyosims.pl

Odp: Kontrola ustawień Meta Link za pomocą skryptów bat
« Odpowiedź #4 dnia: Lutego 07, 2026, 19:17:37 »
Też mi się wydaje, że różnic nie ma. Gdzieś czytałem, że PPDPO nie powinno się ustawiać powyżej 1.5, ale nie wiem ile w tym prawdy.

Skąd takie ładne ikonki masz? :) Ja idę zawsze na łatwiznę i po prostu biorę z pliku exe danej gry:



Korzystam też plików bat do szybkiego odpalenia overlaya Oculusa.

HUD Link:

@echo off
(
@echo perfhud set-mode 7
) | "C:\Program Files\Oculus\Support\oculus-diagnostics\OculusDebugToolCLI.exe"
exit

HUD Performance:

@echo off
(
@echo perfhud set-mode 1
) | "C:\Program Files\Oculus\Support\oculus-diagnostics\OculusDebugToolCLI.exe"
Exit

HUD Off:

@echo off
(
@echo perfhud set-mode 0
) | "C:\Program Files\Oculus\Support\oculus-diagnostics\OculusDebugToolCLI.exe"
exit

Niby gdzieś było, że można to zmieniać za pomocą F11, ale u mnie nie działa. Ta nakładka Link jest fajna do monitorowania jakości połączenia bezprzewodowego. A nakładkę Performance lubię czasem włączyć by sprawdzić jaki jest zapas (headroom) lub nie jest dostępny OpenXR Toolkit.

Offline YoYo

  • Administrator
  • *****
  • Wieczny symulant
    • YoYosims
Odp: Kontrola ustawień Meta Link za pomocą skryptów bat
« Odpowiedź #5 dnia: Lutego 07, 2026, 21:00:37 »
A ikonki sam zrobiłem, jak ktoś chce to proszę: https://www.sendspace.com/file/wbuish.
webmaster,   YoYosims - jeśli lubisz symulatory lotnicze

www.yoyosims.pl

Odp: Kontrola ustawień Meta Link za pomocą skryptów bat
« Odpowiedź #6 dnia: Lutego 08, 2026, 11:44:55 »
Dzięki. Ładnie się prezentują. :)

Przy okazji - miałem problem z uruchamianiem IL2 VR za pomocą skrótu z pulpitu. Z jakiegoś powodu dźwięk nie przełączał się automatycznie na słuchawki w Quest 3 i był generowany dalej z głośników. Sprawdzałem ustawienia dźwięku w aplikacji Meta i niby przekazywanie dźwięku było włączone.

Z pomocą przyszedł program SoundVolumeView - https://www.nirsoft.net/utils/sound_volume_view.html

Dzięki temu mogę wymusić zmianę urządzenia dźwiękowego za pomocą komendy CLI w pliku bat:

SoundVolumeView.exe /SetDefault [Device ID] all
Teraz nie muszę już pamiętać by ręcznie zmieniać wyjście dźwięku przed odpaleniem IL2. :)

Można sobie na końcu skryptu dodać pauzę i zamianę z powrotem na głośniki po naciśnięciu klawisza, po powrocie do pulpitu.

Offline YoYo

  • Administrator
  • *****
  • Wieczny symulant
    • YoYosims
Odp: Kontrola ustawień Meta Link za pomocą skryptów bat
« Odpowiedź #7 dnia: Lutego 10, 2026, 12:18:10 »
Akurat nie miałem żadnego problemu z dźwiękiem w IL-2, ale co "kraj to obyczaj".

A ja mam pytanko, chcę opóźnić start programu supportującego MSFS2024 i chcę by się uruchamiał np. 20 sekund po FlightSimulator2024.exe.

Generalnie działa ta komenda na opóźnienie: timeout /t 20 /nobreak, ale przez ten czas widoczne jest to czarne DOS'owe okienko. Da radę to zmienić? Albo użyć jakiejś innej funkcji, kodu na opóźnienie uruchomienia?
webmaster,   YoYosims - jeśli lubisz symulatory lotnicze

www.yoyosims.pl

Odp: Kontrola ustawień Meta Link za pomocą skryptów bat
« Odpowiedź #8 dnia: Lutego 10, 2026, 13:23:15 »
U mnie taki problem występował, ale udało się go rozwiązać. Przydatne również do puszczania dźwięku z aplikacji w tle (np. ze Spotify) przez gogle.

Ja stosuję komendę timeout. Na przykład w Elite Dangerous uruchamia mi EDCopilot po 2 minutach w tle. To okienko wtedy zostaje i później w tle się zamyka. Dlaczego Tobie przeszkadza? Przecież w VR go nie widzisz.

Z tego co sprawdziłem, możesz dodać do skryptu linię, która zamyka CMD, otwiera go w wersji zminimalizowanej i kontynuuje dalszą część skryptu.

Np:

@echo off

if not defined WIDOCZNY (
set "WIDOCZNY=1"
echo Część pierwsza widoczna
timeout /t 3 >nul
start "" /min "%~f0"
exit
)
echo Część druga w tle
pause
exit

Albo możesz sobie ustawić by razu całość startowała zminimalizowana - po prostu skrót do pliku bat i we właściwościach wybrać Uruchom: zminimalizowane. ;)

Offline YoYo

  • Administrator
  • *****
  • Wieczny symulant
    • YoYosims
Odp: Kontrola ustawień Meta Link za pomocą skryptów bat
« Odpowiedź #9 dnia: Lutego 10, 2026, 18:18:26 »
O, ta druga opcja pasi najbardziej, fakt :).
webmaster,   YoYosims - jeśli lubisz symulatory lotnicze

www.yoyosims.pl