Delen via


Camera

Om ervoor te zorgen dat lokaal en extern gerenderde inhoud naadloos kan worden samengesteld, moeten verschillende camera-eigenschappen synchroon blijven tussen server en client. Met name de cameratransformatie en -projectie. De lokaal gerenderde inhoud moet bijvoorbeeld dezelfde cameratransformatie en projectie gebruiken waarmee het nieuwste externe frame is gerenderd.

Local and remote camera

In de bovenstaande afbeelding is de lokale camera verplaatst ten opzichte van het externe frame dat door de server wordt verzonden. Als gevolg hiervan moet lokale inhoud worden weergegeven vanuit hetzelfde perspectief als het externe frame en ten slotte wordt de resulterende afbeelding opnieuw geprojecteerd naar de lokale cameraruimte, wat in detail wordt uitgelegd in latere fase van herprojectie.

De vertraging tussen de externe en lokale rendering betekent dat elke wijziging van deze instellingen met een vertraging wordt toegepast. Daarom kan elke nieuwe waarde niet onmiddellijk hetzelfde frame worden gebruikt.

De afstand tussen de nabije en verre vliegtuigen kan worden ingesteld op de camera-instellingen. Op de HoloLens 2 worden de resterende transformatie- en projectiegegevens gedefinieerd door de hardware. Wanneer u de desktopsimulatie gebruikt, worden ze ingesteld via de invoer van Update de functie.

De gewijzigde waarden kunnen lokaal worden gebruikt zodra het eerste externe frame binnenkomt dat met hen is weergegeven. Op HoloLens 2 worden de gegevens die moeten worden gebruikt voor rendering, geleverd door het HolographicFrame , net als in elke andere holografische toepassing. In desktopsimulatie worden ze opgehaald via de uitvoer van de Update functie.

Camera-instellingen

De volgende eigenschappen kunnen worden gewijzigd in de camera-instellingen:

Vlak bij en ver:

Om ervoor te zorgen dat er geen ongeldige bereiken kunnen worden ingesteld, zijn nearPlane - en FarPlane-eigenschappen alleen-lezen en bestaat er een afzonderlijke functie SetNearAndFarPlane om het bereik te wijzigen. Deze gegevens worden aan het einde van het frame naar de server verzonden. Wanneer u deze waarden instelt, moet NearPlane kleiner zijn dan FarPlane. Anders treedt er een fout op.

Belangrijk

In Unity wordt dit automatisch afgehandeld bij het wijzigen van de hoofdcamera in de buurt en ver van de vliegtuigen.

EnableDepth:

Soms is het handig om de dieptebufferschrijf van de externe installatiekopie uit te schakelen voor foutopsporingsdoeleinden. Als u diepte uitschakelt, wordt ook voorkomen dat de server dieptegegevens verzendt, waardoor de bandbreedte wordt verminderd.

Fooi

In Unity wordt een foutopsporingsonderdeel met de naam EnableDepthComponent geleverd dat kan worden gebruikt om deze functie in te schakelen in de gebruikersinterface van de editor.

InverseDepth:

Notitie

Deze instelling is alleen belangrijk als EnableDepth deze is ingesteld op true. Anders heeft deze instelling geen invloed.

Dieptebuffers registreren normaal gesproken z-waarden in een drijvendekommabereik van [0; 1], waarbij 0 de diepte van het vlak aangeeft en 1 de diepte van het vervlak aangeeft. Het is ook mogelijk om dit bereik om te keren en dieptewaarden vast te leggen in bereik [1; 0], de diepte in de buurt van het vlak wordt 1 en de diepte van het vervlak wordt 0. Over het algemeen verbetert de laatste de verdeling van drijvendekommaprecisie over het niet-lineaire z-bereik.

Waarschuwing

Een veelvoorkomende benadering is het omkeren van de waarden in het vlak en vervlak op de cameraobjecten. Dit mislukt voor Azure Remote Rendering met een fout wanneer u dit probeert op de CameraSettings.

De Azure Remote Rendering-API moet weten over de dieptebufferconventie van uw lokale renderer om externe diepte correct op te stellen in de lokale dieptebuffer. Als uw dieptebufferbereik [0; 1] laat deze vlag staan als false. Als u een omgekeerde dieptebuffer gebruikt met een [1; 0] bereik, stel de InverseDepth vlag in op true.

Notitie

Voor Unity wordt de juiste instelling al toegepast door de RenderingConnection instelling, zodat er geen handmatige interventie nodig is.

U kunt de camera-instellingen als volgt wijzigen:

void ChangeCameraSetting(RenderingSession session)
{
    CameraSettings settings = session.Connection.CameraSettings;

    settings.SetNearAndFarPlane(0.1f, 20.0f);
    settings.EnableDepth = false;
    settings.InverseDepth = false;
}
void ChangeCameraSetting(ApiHandle<RenderingSession> session)
{
    ApiHandle<CameraSettings> settings = session->Connection()->GetCameraSettings();

    settings->SetNearAndFarPlane(0.1f, 20.0f);
    settings->SetEnableDepth(false);
    settings->SetInverseDepth(false);
}

API-documentatie

Volgende stappen