niedziela, 1 grudnia 2019

FreeCAD OpenVR - obsługa gogli wirtualnej rzeczywistości.

Program FreeCAD można było do tej pory skompilować z obsługą okularów wirtualnej rzeczywistości Oculus Rift. To jednak wykluczało z użytkowników innych gogli i systemów operacyjnych. Implementacja nie wykorzystywała też kontrolerów ruchowych. Dlatego postanowiłem dodać do programu obsługę OpenVR. Na początek małe demo (okno podglądu przedstawia widok lewego oka):

Dzięki OpenVR możliwa jest obsługa gogli m.in.:
  • Oculus Rift
  • HTC Vive
  • Valve Index
  • okularów standardu Windows Mixed Reality, np. Samsung Odyssey
OpenVR działa na systemach operacyjnych:
  • Windows
  • Linux
  • macOS
OpenVR zapewnia również obsługę kontrolerów ruchowych.

Implementacja OpenVR w programie FreeCAD

Implementacja zapewnia obsługę trybu pokoju oraz dodatkowego ruchu z wykorzystaniem kontrolerów.
Binarną wersję programu dla Windows można pobrać z github.com/kwahoo2/FreeCAD/releases/tag/0.19_preVR-1
A następnie uruchomić FreeCAD.exe z katalogu bin.  Wydanie dla Linuksa w postaci AppImage planuję wykonać później. można pobrać z tego samego miejsca.

Kod źródłowy można znaleźć tutaj github.com/kwahoo2/FreeCAD
Nie ma w nim odwołań specyficznych dla systemu operacyjnego, stąd można go skompilować zarówno na Linuksie jak i Windows. Wątek na forum programu FreeCAD.

Wymagania do kompilacji z źródeł:
  1. Standardowe wymagania dla kompilacji FreeCADa: Linux, Windows,
  2. OpenVR SDK github.com/ValveSoftware/openvr,
  3. Opcja cmake BUILD_OPENVR ustawiona (np. z użyciem cmake-gui) na ON (podczas wywołania w trybie tekstowym -DBUILD_OPENVR=ON),
  4. Opcja BUILD_QT5 ustawiona na ON - implementacja korzysta z QOpenGLWidget wprowadzonego w Qt 5.4,
  5. Może być konieczne określenie katalogu plików nagłówkowych z użyciem opcji OpenVR_INCLUDE_DIR - dla Linuksa będzie to np. /usr/local/include/openvr a dla Windows C:\Program Files (x86)\OpenVRSDK\include,
  6. Może być konieczne określenie pliku biblioteki OpenVR - na Linuksie np. /usr/local/lib/libopenvr_api.a, na Windows lokalizacja_pobranego_sdk\lib\win64\openvr_api.lib,
  7. Dodatkowo w przypadku Windows do katalogu z FreeCADem, obok FreeCAD.exe trzeba skopiować plik openvr_api.dll, który można znaleźć w katalogu openvr\bin\win64,
  8. Ważne żeby na Windows ustalić kompilator w cmake na 64-bitowy, domyślnie konfiguracja jest dokonywana dla 32-bitowego, nawet gdy system jest 64-bitowy. Kompilacja dla 32-bitów spowoduje błąd konsolidatora, bo biblioteki FreeCADLibs są obecnie udostępniane wyłącznie w wersji 64-bitowej. 

Wymagania do uruchomienia:
  1. Należy podłączyć gogle, uruchomić Steam i SteamVR,
  2. Uruchomić FreeCAD, otworzyć wybrany model i wybrać z menu View pozycję FreeCAD-OpenVR,
  3. Gdy tylko SteamVR wykryje aktywność okularów, powinno pojawić się okna podglądu i obraz w samych goglach,
  4. Chcąc obejrzeć inny model/plik trzeba ponownie wybrać FreeCAD-OpenVR (kończy to rendering VR) i po otwarciu nowego modelu jeszcze raz użyć FreeCAD-OpenVR.
Teoretycznie program powinien dać się skompilować również pod macOS, ale niestety nie miałem możliwości tego sprawdzić.

Nawigacja:

Implementacja obsługuje tryb pokoju, czyli można swobodnie poruszać się w obszarze modelu. Dodatkowo można wykorzystać kontrolery do nawigacji:
  1. Gałka analogowa lub gładzik pierwszego kontrolera pozwala przesuwać się liniowo - poruszamy się wzdłuż kierunku wskazywanego przez kontroler,
  2. Gałka analogowa lub gładzik drugiego kontrolera pozwala obracać "świat" wokół dwóch osi, środkiem obrotu jest położenie kontrolera.

Przyszły rozwój

W najbliższym czasie chciałbym popracować nad wydajnością i jakością wyświetlania (wygładzanie krawędzi).

Prototyp w Pythonie

Dostępny jest też prototyp implementacji w Pythonie, który napisałem przez zabraniem się z pisanie kodu w C++. Można go pobrać stąd github.com/kwahoo2/freecad-pyopenvr i wystarczy skopiować do konsoli FreeCADa. Wymaga on Pythona wersji 3.5 lub nowszej, pyopenvr, numpy, pivy-coin i PySDL2. Prototyp nie obsługuje kontrolerów.