Ponto de foco no Unity
Namespace: UnityEngine.XR.WSA
Tipo: HolographicSettings
Use o ponto de foco para fornecer ao HoloLens uma dica sobre como estabilizar melhor os hologramas que estão sendo exibidos no momento.
Se você quiser definir o Ponto de Foco no Unity, ele precisará ser definido a cada quadro usando HolographicSettings.SetFocusPointForFrame(). Quando o Ponto de foco não está definido para um quadro, o plano de estabilização padrão é usado.
Observação
Por padrão, os novos projetos do Unity têm a opção "Habilitar compartilhamento de buffer de profundidade" definida. Com essa opção, um aplicativo do Unity em execução em um headset de área de trabalho imersivo ou em um HoloLens que executa a Atualização de abril de 2018 do Windows 10 (RS4) ou posterior enviará seu buffer de profundidade para Windows para otimizar a estabilidade do holograma automaticamente, sem que seu aplicativo especifique um ponto de foco:
- Em um headset de desktop imersivo, isso permitirá a reprojeção baseada em profundidade por pixel.
- Em um HoloLens que executa a Atualização de abril de 2018 do Windows 10 ou posterior, isso analisará o buffer de profundidade para escolher um plano de estabilização ideal automaticamente.
Qualquer uma das abordagens deve fornecer uma qualidade de imagem ainda melhor sem o trabalho explícito do seu aplicativo para selecionar um ponto de foco para cada quadro. Observe que, se você fornecer um ponto de foco manualmente, isso substituirá o comportamento automático descrito acima e geralmente reduzirá a estabilidade do holograma. Geralmente, você só deve especificar um ponto de foco manual quando seu aplicativo estiver em execução em um HoloLens que ainda não foi atualizado para a Atualização de abril de 2018 do Windows 10.
Exemplo
Há muitas maneiras de definir o Ponto de Foco, conforme sugerido pelas sobrecargas disponíveis na função estática SetFocusPointForFrame . Abaixo está um exemplo simples para definir o plano de foco para o objeto fornecido para cada quadro:
public GameObject focusedObject;
void Update()
{
// Normally the normal is best set to be the opposite of the main camera's
// forward vector.
// If the content is actually all on a plane (like text), set the normal to
// the normal of the plane and ensure the user does not pass through the
// plane.
var normal = -Camera.main.transform.forward;
var position = focusedObject.transform.position;
UnityEngine.XR.WSA.HolographicSettings.SetFocusPointForFrame(position, normal);
}
Observação
O código simples acima pode reduzir a estabilidade do holograma se o objeto focalizado acabar atrás do usuário. Geralmente, recomendamos definir Ativar compartilhamento de buffer de profundidade em vez de especificar manualmente um ponto de foco.
Próximo ponto de verificação de desenvolvimento
Se você estiver seguindo a jornada de desenvolvimento do Unity que apresentamos, estará explorando os recursos e as APIs da plataforma Realidade Misturada. Deste ponto, você pode prosseguir para o próximo tópico:
Ou vá diretamente para a implantação de seu aplicativo em um dispositivo ou emulador:
Você sempre pode voltar para os pontos de verificação de desenvolvimento do Unity a qualquer momento.