Hi @Garrett Isaacs ,
If I understand you correctly you, you want to use planar LSR to in combination with ARR?
The following page describes the different options and requirements that you need to meet for both LSR techniques: https://learn.microsoft.com/en-us/azure/remote-rendering/overview/features/late-stage-reprojection
At mentioned on the page, you will need to retrieve the remote focus point on your own and set it in your app. This would be the bare minimum of what you would need to do:
using Microsoft.Azure.RemoteRendering;
using Microsoft.Azure.RemoteRendering.Unity;
using System;
using UnityEngine;
public class UpdateFocusPoint : MonoBehaviour
{
// Update is called once per frame
void Update()
{
FocusPointResult validResult = FocusPointResult.Invalid;
Float3 position = new Float3();
Float3 normal = new Float3();
Float3 velocity = new Float3();
// Obtain the focus point using the same coordinate system that is used as user coordinate system.
IntPtr ptr = UnityEngine.XR.WSA.WorldManager.GetNativeISpatialCoordinateSystemPtr();
if (ptr != IntPtr.Zero)
{
validResult = RemoteManagerUnity.CurrentSession.GraphicsBinding.GetRemoteFocusPoint(ptr, out position, out normal, out velocity);
}
// Use the remote focus point whenever the data is valid, i.e., a proper focus point or a fallback one.
// In case it is invalid, we do not set a focus point and instead rely on Mirage to select a sensible fallback.
if (validResult != FocusPointResult.Invalid)
{
UnityEngine.XR.WSA.HolographicSettings.SetFocusPointForFrame(CommonExtensions.toUnity(position), CommonExtensions.toUnity(normal), CommonExtensions.toUnity(velocity));
}
}
}
For a production solution you would want to implement additional things though:
- Compute the focus point for local content (for example by a raycast in Unity) and take the closest one between local and remote focus point.
- The remote focus point is only updated every second or so thus it is recommended to interpolate the focus point over time instead of always taking the newest one. Taking discontinuities or app specific features into account.
However, these are quite application dependent so we can't provide you with a general code sample that would work in every situation.
Cheers,
Christopher