il nuovo VRTemplate segue l’OpenXR quindi funziona con tutti i visori – royality-free, open standard, high performance AR e VR – in pratica se sei un developer ora è un po’ più semplice lavorare con altri device.
in pratica è
- un API per applicazioni XR
- può essere considerata come un interfaccia tra l’applicazione e il runtime
- platform-agnostic
https://www.khronos.org/openxr/
https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html
One plugin 22:11
Se apri il vrtemplate dalla 4.27 in su il plugion OpenXR è abilitato di default, ed è abilitato solo quello e quelli che hanno fatto l’estensione (vedi OculusXR), che serve se vuoi fare un nuovo hardware e vuoi innovare, ed essendo open è previsto (guardare cosa fa Varjo per il pass throuh).
se apri un blank template sono abilitati tutti oculus, steam (controllare)
https://www.youtube.com/watch?v=zfcnIrRlGy8
Epic XR Rendering Engineer Steve Smith walks you through the current state of XR in UE4, the new XR features you’ll find in the engine, and where we are headed. This talk covers the new OpenXR API and how that fits in UE4 and the ecosystem in general, Variable Rate Shading (or, how to put more into your pixels for less cost), new features/functionality around AR (Augmented Reality), and updates for Hololens 2 support.
il novo vrtemplate, se sei apposto con tutto hardware, runtime (oculus app o steam vr) etc se fai play parte!
non c’è più bisogno di cambiare la mappa, start in vr.. è già pronto
Se hai più visori openXr vuole saper quale runtime deve usare, vale a dire che UE userà il runtime del primo visore che colleghi al pc.
Puoi settare una varianbile d’ambiente (credo) che dica ai runtime quale ha la priorità, o direttamente nelle app dei runtime.
Se Play in Vr è disabilitato può essere che aprendo UE sia partito il runtime steamVR ma te hai collegato un quest con il link..
Nei project settings sono già settate alcune cose, diversamente dal blank template:
- forward shading abilitato, quindi non si ha accesso a tutti i buffer che si hanno nel deferred, niente ray trace e altre robe
- Mobile Multiview abilitato – riguarda il mobile vr credo
- Mobile HDR disabilitato, niente post-process effects (questi ultimi due riguardano solo il mobile e non hanno nulla a che fare con il pcVR)
VRTemplate usa il gameplay Framework
https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/Framework/ – Ripassalo se serve!
Entriamo in VRPawn 36:30
Aggiungiamo l’HMD per sapere sempre dov’è la testa
Add Component>StaticMesh
al posto del cubo, dopo aver aggiunto nelle view option (foto) possiamo cercare il genericHMD
lo scaliamo uniformemente a 1.5
lo spostiamo di 8 sulla x
in pratica davanti alla comera, alla quale lo parentiamo
ricordarsi Owner no see altrimenti ci coprirà la vista, mentre il VRSpectator potrà vedere dove siamo e cosa facciamo.
Togliamo le collision all’HMDModel , e generate Overlap, e aggiungiamo una sphere collision a cui diamo Pawn come CollisonPreset.
Questo serve perchè a volte fai play e non ci sono i controller..
Scaliamo e posizioniamo la sphere in modo che sembri la testa in rapporta all’HMDModel
Facciamo Play!
se clicchiamo Tab diventiamo il VRSpectator e possiamo vedere il pawn (WASD, F fade, Mouse click fa zoom (cambia il field of view del sceneCaptureComponent)
è più comodo usare il VRSpectator che il thirdperson (non ho capito perchè 44:00), cmq let’s dive in
VRSpectator 44:22
selezioniamo il BP dalla viewport e facciamo Ctrl+E (apre il BP – fico!)
Qui in pratica mette un plane daventi alla camera e come materiale ci collega quello creato dal RenderTarget RT_VRSpectator
in questo modo il player in vr può vedere cosa sta vedendo il VRSpectator.. cosa molto pesante perchè fa una img1080 ogni tick
Grab in VR 51:00
Gli actors che sono sul tavolo hanno in comune il GrabComponent.
quando a una static o skeletal mesh dai questo componente, questa può essere grabbata in VR
Se l’actor a cui si da questo component è movable allora funziona il drag and drop.
Apriamo il GrabComponent
qui possiamo definire il GrabType: none, free, snap o custom.
free sono i cubi e snap è la pistola, dove appunto puoi impostare il trasform di dove verrà impugnata.
none non si può grabbare
Custom serve a chi vuole scriversi la sua funzionalità ma esternamente a questo component, per non fare casino.
Niente 2handed con il default, è stato fatto barebones, ma per questo c’è GrabType custom.. cioè te la scrivi tu.
(Alex consiglia di guardare il fucile a pompa di robot recal mod)
MotionControllers 56:00
nel VRPawn ci sono i MotionControllerRight e Left, ma non li vediamo.
in realtà tra le opzioni del componente c’è Visualization Display Device abilitato e DisplayMode per scegliere quale controller vedere.
con le opzioni di visualizzazione dei plugin abilitate possiamo veder openXR>device >tutti i vari modelli di controller
con OpenXR tutti i motionController hanno lo 0,0,0 all’altezza del pulsante grab, quindi quando gli chiedi la sua WorldLocation sarà uguale alla grip position e alla grip rotation che OpenXR ti rimanda.
Dentro all’eventGraph del VRPawn c’è il Get Motion Controller Data e dopo ha un nodo break XRMotionControlleData che ti fa guardare a tutti questi data, tra cui anche l’aim
se vuoi mirare senza usare tutto quello struct nelle proprietà del motioncontroller sotto motioncontroller motion source puoi impostare LeftAim o RightAim, aggiungerci una sfera a scale 0.05 e vederla attaccata al controller come un mirino
Questo è molto comodo se devi lavorare con diversi controller, 1 funzione capita da tutti i controller invece che hadrcode se è oculus così, se è vive cosà..
poi fino a 1:09:44 fa il cappello grabbabile e con la fisica e fa in moto che si possa snappare alla testa
abbiamo due nuovi eventi con il grab component: On Grabbed e On Dropped
[https://www.youtube.com/watch?v=EM_HYqQdToE
https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/HowTo/se ti serve un recap sulla comunicazione tra BP]
aggiunge un socket al cappello
gli da un nome
on Dropped mette una sfera che cerca oggetti, un array con dentro il pawn, quindi se questa sfera coplisce il pawn a una distanza di 20 cm dal socket attacca il componente che colpisce a se stesso
in questo modo si aggiungono cose sopra al codice già funzionante e testato
l’event dispatcher è settato nel try grab
e try release
se vuoi aggiungere un nuovo grab custom 1:17:48
non succederà nulla finche non scrivi una grab e una drop function
oppure puoi aggiungere le tue custom funtionality nella enum
1:20:33 se apriamo la pistola c’è un’altro modo che ci permette grap + trigger = è un’interface
se apriamo le proprietà della classe vediamo che si chaima VRInteraction BPI, quindi potremmo parlare con qualsiasi actor che implementa quella interface, se sapere chi è
remote control 1:25:12