Noting up-front: XRIK is a preview package and it has been over 100 days since XRIK has been updated by Unity. Unity claims they are still actively developing it. So far the primary feedback has been that it was designed in a way that makes it uncharacteristically difficult to extend.
It is likely to change and possibly significantly.
Main Components of XRIK:
XR Rig (wraps up user-space in a movable room-scale rig)
Controllers (InputDevice or XRNode)
Interaction via:
Interactors
Interactables
Interaction States
Hover (direct or ray-interaction is currently valid: similar to mouse-over event in UI)
Selected (action following a hover, indicating user intent: grab, trigger teleport, make active selection)
Activated (a secondary state of selected item. shoot a held gun, flashlight switch, etc)
Locomotion
typically triggered via Interaction system (usually by ray interactors)
managed by a locomotion system, which is fed requests by one or more locomotion providers
teleport and snap-turn locomotion providers are included
custom provider can be made to perform smooth locomotion or alternatives
Hands (Grab Interactor)
Teleport ray (Ray Interactor - w/ layer mask)
Telekinesis Ray (Ray Interactor - w/ layer mask)
Socket (custom Interactor - child of XRBaseInteractor)
Grabbable Items in the World
Teleportation Area
Teleportation Anchor
Weapons / Tools / Gameplay Items
The primary concept in the XRTK is the relation between Interactors and Interactables
The framework takes care of a lot of other things (namely easing multiplatform development), but the central Interaction metaphor is broken down into those two things: Interactor and Interactable.
Interactables are interactive "things in the world"
They may react to the users hands via Interactors on their hands or in the world
Your hands are interactors, the raycast for teleporting is an interactor
Velocity Tracking vs Kinematic:
Kinematic Directly controls Interactable
Velocity tracking considers Interactables physics constraints
hinged doors, drawers, switches, etc
Use ASTC texture compression
Vulkan still problematic
REDUCE DRAW CALLS
batch meshes
atlased textures (2k atlas texture)
limit number of materials
"more efficient to push a lot of vertices in few draw calls, than a few vertices in many draw calls"
Light & Shadows
Pixel lights: no more than 1, preferably 0
limit real-time/dynamic lights
limit what those lights effect
hard shadows ok, no shadows preferred
use blob shadow mesh for characters
Baked lighting
lightmap at 4k has worked well
non-directional
light probes are efficient and mobile friendly
Faked lighting
"volumetric lighting" on geometry
possible Oculus dome lightbeam mesh? Manipulate angle via blendshapes?
particles provide atmosphere
Stereo Rendering Method: Single Pass (CPU gains via fewer draw calls)
need Android ADB bridge