Ruimtelijke toewijzing
Ruimtelijke toewijzing biedt een gedetailleerde weergave van echte oppervlakken in de omgeving rond de HoloLens, zodat ontwikkelaars een overtuigende mixed reality-ervaring kunnen creëren. Door de echte wereld samen te voegen met de virtuele wereld, kan een toepassing hologrammen echt laten lijken. Toepassingen kunnen ook op natuurlijke wijze worden afgestemd op de verwachtingen van gebruikers door vertrouwd gedrag en interacties in de echte wereld te bieden.
Apparaat ondersteunt
Functie | HoloLens (1e generatie) | HoloLens 2 | Immersive headsets |
Ruimtelijke toewijzing | ✔️ | ✔️ | ❌ |
Waarom is ruimtelijke toewijzing belangrijk?
Ruimtelijke toewijzing maakt het mogelijk om objecten op echte oppervlakken te plaatsen. Dit helpt objecten te verankeren in de wereld van de gebruiker en profiteert van echte dieptehints. Door uw hologrammen af te sluiten op basis van andere hologrammen en objecten in de echte wereld, kunt u de gebruiker ervan overtuigen dat deze hologrammen zich daadwerkelijk in hun ruimte bevinden. Hologrammen die in de ruimte zweven of met de gebruiker meebewegen, voelen niet zo echt aan. Plaats indien mogelijk items voor comfort.
Visualiseer oppervlakken bij het plaatsen of verplaatsen van hologrammen (gebruik een geprojecteerd raster). Dit helpt gebruikers te weten waar ze hun hologrammen het beste kunnen plaatsen en laat zien of de plek waar ze het hologram willen plaatsen, niet is toegewezen. U kunt 'reclameborditems' naar de gebruiker toe als ze te veel van een hoek terechtkomen.
Conceptueel overzicht
Een voorbeeld van een ruimtelijk kaartgaas dat een ruimte bedekt
De twee primaire objecttypen die worden gebruikt voor ruimtelijke toewijzing zijn de 'Spatial Surface Observer' en de 'Spatial Surface'.
De toepassing biedt de Spatial Surface Observer een of meer begrenzingsvolumes om de ruimtegebieden te definiëren waarin de toepassing ruimtelijke kaartgegevens wil ontvangen. Voor elk van deze volumes biedt ruimtelijke toewijzing de toepassing een set ruimtelijke oppervlakken.
Deze volumes kunnen stationair zijn (op een vaste locatie op basis van de echte wereld) of ze kunnen zijn gekoppeld aan de HoloLens (ze verplaatsen, maar draaien niet, met de HoloLens terwijl deze zich door de omgeving beweegt). Elk ruimtelijk oppervlak beschrijft echte oppervlakken in een klein volume ruimte, weergegeven als een driehoeksgaas dat is gekoppeld aan een ruimtelijk coördinatensysteem met een wereldvergrendeling.
Wanneer de HoloLens nieuwe gegevens over de omgeving verzamelt en er wijzigingen in de omgeving optreden, worden ruimtelijke oppervlakken weergegeven, verdwijnen en veranderen ze.
Demo van ontwerpconcepten voor ruimtelijk bewustzijn
Als u ontwerpconcepten voor ruimtelijk bewustzijn in actie wilt zien, bekijkt u onze videodemo Hologrammen ontwerpen - Ruimtelijk bewustzijn hieronder. Wanneer u klaar bent, gaat u verder voor een gedetailleerdere duik in specifieke onderwerpen.
Deze video is afkomstig uit de HoloLens 2-app Hologrammen ontwerpen. Download en geniet hier van de volledige ervaring.
Spatial Mapping vs. Scene Understanding WorldMesh
Voor HoloLens 2 is het mogelijk om een query uit te voeren op een statische versie van de ruimtelijke toewijzingsgegevens met behulp van de Scene understanding SDK (instelling EnableWorldMesh). Dit zijn de verschillen tussen twee manieren om toegang te krijgen tot de ruimtelijke toewijzingsgegevens:
- Api voor ruimtelijke toewijzing:
- Beperkt bereik: de ruimtelijke toewijzingsgegevens die beschikbaar zijn voor toepassingen in een 'bel' van beperkte grootte in cache rond de gebruiker.
- Biedt updates met lage latentie van gewijzigde mesh-regio's via SurfacesChanged-gebeurtenissen.
- Variabel detailniveau dat wordt bepaald door de parameter Driehoeken per kubieke meter.
- Sdk voor scènes:
- Onbeperkt bereik: biedt alle gescande ruimtelijke toewijzingsgegevens binnen de queryradius.
- Biedt een statische momentopname van de ruimtelijke toewijzingsgegevens. Voor het ophalen van de bijgewerkte ruimtelijke toewijzingsgegevens moet een nieuwe query worden uitgevoerd voor de hele mesh.
- Consistent detailniveau dat wordt beheerd door de instelling RequestedMeshLevelOfDetail.
Wat is van invloed op de kwaliteit van ruimtelijke kaarten?
Verschillende factoren, die hier worden beschreven, kunnen van invloed zijn op de frequentie en ernst van deze fouten. U moet uw toepassing echter zo ontwerpen dat de gebruiker zijn doelen kan bereiken, zelfs als er fouten optreden in de ruimtelijke toewijzingsgegevens.
Veelvoorkomende gebruiksscenario's
Plaatsing
Ruimtelijke toewijzing biedt toepassingen de mogelijkheid om natuurlijke en vertrouwde vormen van interactie aan de gebruiker te presenteren; Wat is er natuurlijker dan uw telefoon op het bureau te leggen?
Het beperken van de plaatsing van hologrammen (of meer in het algemeen een selectie van ruimtelijke locaties) om op oppervlakken te liggen, biedt een natuurlijke toewijzing van 3D (punt in ruimte) tot 2D (punt op oppervlak). Dit vermindert de hoeveelheid informatie die de gebruiker aan de toepassing moet verstrekken en maakt de interacties van de gebruiker sneller, eenvoudiger en nauwkeuriger. Dit is waar omdat 'afstand' niet iets is dat we gewend zijn om fysiek met anderen of computers te communiceren. Wanneer we met onze vinger wijzen, geven we een richting op, maar geen afstand.
Een belangrijk voorbehoud hier is dat wanneer een toepassing afstand van richting afdingt (bijvoorbeeld door een raycast uit te voeren langs de gazerichting van de gebruiker om het dichtstbijzijnde ruimtelijke oppervlak te vinden), dit resultaten moet opleveren die de gebruiker op betrouwbare wijze kan voorspellen. Anders verliest de gebruiker zijn gevoel van controle en kan dit snel frustrerend worden. Een methode die hierbij helpt, is door meerdere raycasts uit te voeren in plaats van slechts één raycast. De geaggregeerde resultaten moeten soepeler en voorspelbaarder zijn, minder vatbaar voor invloed van tijdelijke 'uitbijter'-resultaten (zoals kan worden veroorzaakt door stralen die door kleine gaten gaan of kleine stukjes geometrie raken waarvan de gebruiker zich niet bewust is). Aggregatie of afvlakking kan ook in de loop van de tijd worden uitgevoerd; U kunt bijvoorbeeld de maximale snelheid beperken waarmee een hologram kan variëren in de afstand tot de gebruiker. Het beperken van de waarde van de minimum- en maximumafstand kan ook helpen, zodat het hologram dat wordt verplaatst niet plotseling in de verte wegvliegt of terugstort in het gezicht van de gebruiker.
Toepassingen kunnen ook de vorm en richting van oppervlakken gebruiken om de plaatsing van hologrammen te begeleiden. Een holografische stoel mag niet door muren dringen en moet vlak met de vloer zitten, zelfs als deze enigszins ongelijk is. Dit soort functionaliteit is waarschijnlijk afhankelijk van het gebruik van natuurkundeconflicten in plaats van raycasts, maar vergelijkbare problemen zijn van toepassing. Als het hologram dat wordt geplaatst veel kleine veelhoeken heeft die uitsteken, zoals de poten op een stoel, kan het zinvol zijn om de fysicaweergave van die veelhoeken uit te breiden naar iets breder en gladder, zodat ze beter over ruimtelijke oppervlakken kunnen schuiven zonder te snagging.
Aan het uiterste kan gebruikersinvoer volledig worden vereenvoudigd en ruimtelijke oppervlakken kunnen worden gebruikt om volledig automatische plaatsing van hologrammen uit te voeren. De toepassing kan bijvoorbeeld ergens op de muur een holografische lichtschakelaar plaatsen waar de gebruiker op kan drukken. Hetzelfde voorbehoud over voorspelbaarheid geldt hier dubbel; Als de gebruiker controle verwacht over de plaatsing van hologrammen, maar de toepassing niet altijd hologrammen plaatst waar ze verwachten (als de lichtschakelaar ergens verschijnt die de gebruiker niet kan bereiken), is dit een frustrerende ervaring. Het kan zelfs erger zijn om automatische plaatsing uit te voeren die een deel van de tijd door de gebruiker moet worden gecorrigeerd, dan om de gebruiker te verplichten altijd zelf plaatsing uit te voeren; omdat een geslaagde automatische plaatsing wordt verwacht, voelt handmatige correctie als een last!
Houd er ook rekening mee dat de mogelijkheid van een toepassing om ruimtelijke oppervlakken te gebruiken voor plaatsing sterk afhankelijk is van de scanervaring van de toepassing. Als een oppervlak niet is gescand, kan deze niet worden gebruikt voor plaatsing. Het is aan de toepassing om dit duidelijk te maken aan de gebruiker, zodat deze kan helpen bij het scannen van nieuwe oppervlakken of het selecteren van een nieuwe locatie.
Visuele feedback aan de gebruiker is van het grootste belang tijdens de plaatsing. De gebruiker moet weten waar het hologram is gebaseerd op het dichtstbijzijnde oppervlak met aardingseffecten. Ze moeten begrijpen waarom de beweging van hun hologram wordt beperkt (bijvoorbeeld vanwege botsingen met een ander nabijgelegen oppervlak). Als ze geen hologram op de huidige locatie kunnen plaatsen, moet visuele feedback duidelijk maken waarom dat niet het geval is. Als de gebruiker bijvoorbeeld probeert een holografische bank halverwege de muur te plaatsen, moeten de gedeelten van de bank achter de muur in een boze kleur pulseren. Of omgekeerd, als de toepassing geen ruimtelijk oppervlak kan vinden op een locatie waar de gebruiker een echt oppervlak kan zien, moet de toepassing dit duidelijk maken. Het duidelijke ontbreken van een grondeffect op dit gebied kan dit doel bereiken.
Occlusie
Een van de belangrijkste toepassingen van ruimtelijke toewijzingsoppervlakken is eenvoudigweg het occluden van hologrammen. Dit eenvoudige gedrag heeft een enorme invloed op het waargenomen realisme van hologrammen, waardoor een visceraal gevoel ontstaat dat echt dezelfde fysieke ruimte bewoont als de gebruiker.
Occlusie biedt ook informatie aan de gebruiker; wanneer een hologram lijkt te zijn afgesloten door een echt oppervlak, biedt dit extra visuele feedback over de ruimtelijke locatie van dat hologram in de wereld. Omgekeerd kan occlusie ook nuttig zijn om informatie voor de gebruiker te verbergen ; het occluderen van hologrammen achter wanden kan visuele onbelangrijke e-mail op een intuïtieve manier verminderen. Om een hologram te verbergen of te onthullen, hoeft de gebruiker alleen zijn hoofd te verplaatsen.
Occlusie kan ook worden gebruikt om verwachtingen voor een natuurlijke gebruikersinterface te primen op basis van bekende fysieke interacties; Als een hologram door een oppervlak wordt afgesloten, komt dit omdat dat oppervlak effen is, dus de gebruiker moet verwachten dat het hologram met dat oppervlak botst en er niet doorheen gaat.
Soms is occlusie van hologrammen ongewenst. Als een gebruiker moet communiceren met een hologram, moet deze het zien, zelfs als het zich achter een echt oppervlak bevindt. In dergelijke gevallen is het meestal zinvol om zo'n hologram anders weer te geven wanneer het is occluded (bijvoorbeeld door de helderheid te verminderen). Op deze manier kan de gebruiker het hologram visueel vinden, maar weten ze nog steeds dat het zich ergens achter bevindt.
Natuurkunde
Het gebruik van fysicasimulatie is een andere manier waarop ruimtelijke toewijzing kan worden gebruikt om de aanwezigheid van hologrammen in de fysieke ruimte van de gebruiker te versterken. Als mijn holografische rubberen bal realistisch van mijn bureau rolt, stuitert over de vloer en onder de bank verdwijnt, is het misschien moeilijk te geloven dat het er niet is.
Fysicasimulatie biedt ook de mogelijkheid voor een toepassing om natuurlijke en vertrouwde interacties op basis van fysica te gebruiken. Het verplaatsen van een holografisch meubilair op de vloer is waarschijnlijk gemakkelijker voor de gebruiker als het meubilair reageert alsof het met de juiste traagheid en wrijving over de vloer glijdt.
Om realistisch fysiek gedrag te genereren, moet u waarschijnlijk wat gaasverwerking uitvoeren, zoals het vullen van gaten, het verwijderen van zwevende hallucinaties en het gladmaken van ruwe oppervlakken.
U moet ook nagaan hoe de scanervaring van uw toepassing van invloed is op de fysicasimulatie. Ten eerste botsen ontbrekende oppervlakken nergens mee; Wat gebeurt er als de rubberen bal van de gang af rolt en van het einde van de bekende wereld afkomt? Ten tweede moet u beslissen of u in de loop van de tijd blijft reageren op wijzigingen in de omgeving. In sommige gevallen wilt u zo snel mogelijk reageren; stel dat de gebruiker deuren en meubels gebruikt als beweegbare barri sms ter verdediging tegen een storm van binnenkomende Romeinse pijlen. In andere gevallen kunt u echter nieuwe updates negeren; het rijden met je holografische sportwagen rond de racebaan op je vloer kan plotseling niet zo leuk zijn als je hond besluit om in het midden van de baan te zitten.
Navigatie
Toepassingen kunnen ruimtelijke toewijzingsgegevens gebruiken om holografische tekens (of agents) de mogelijkheid te geven om op dezelfde manier door de echte wereld te navigeren als een echt persoon. Dit kan helpen de aanwezigheid van holografische tekens te versterken door ze te beperken tot hetzelfde natuurlijke, vertrouwde gedrag als dat van de gebruiker en hun vrienden.
Navigatiemogelijkheden kunnen ook nuttig zijn voor gebruikers. Zodra een navigatiekaart is gebouwd in een bepaald gebied, kan deze worden gedeeld om holografische aanwijzingen te bieden voor nieuwe gebruikers die niet bekend zijn met die locatie. Deze kaart kan worden ontworpen om het voetgangersverkeer soepel te laten doorstromen of om ongevallen op gevaarlijke locaties zoals bouwplaatsen te voorkomen.
De belangrijkste technische uitdagingen bij het implementeren van navigatiefunctionaliteit zijn betrouwbare detectie van beloopbare oppervlakken (mensen lopen niet op tafels!) en een goede aanpassing aan veranderingen in de omgeving (mensen lopen niet door gesloten deuren!). Het mesh kan enige verwerking vereisen voordat het kan worden gebruikt voor padplanning en navigatie door een virtueel teken. Het gladmaken van het gaas en het verwijderen van hallucinaties kan helpen voorkomen dat tekens vastlopen. U kunt ook de mesh drastisch vereenvoudigen om de padplanning en navigatieberekeningen van uw personage te versnellen. Deze uitdagingen hebben veel aandacht gekregen in de ontwikkeling van videogametechnologie en er is een schat aan beschikbare onderzoeksliteratuur over deze onderwerpen.
De ingebouwde NavMesh-functionaliteit in Unity kan niet standaard worden gebruikt voor ruimtelijke toewijzingsoppervlakken, omdat de oppervlakken pas bekend zijn als de toepassing wordt gestart. U kunt tijdens runtime echter een NavMesh maken door NavMeshComponents te installeren. Houd er rekening mee dat het systeem voor ruimtelijke toewijzing geen informatie biedt over oppervlakken die ver van de huidige locatie van de gebruiker verwijderd zijn; Als u een kaart van een groot gebied wilt maken, moet de toepassing oppervlakken 'onthouden'. U kunt ook de instelling voor observatiebereiken in het ruimtelijk bewustzijnsprofiel verhogen, waardoor het gebied waarop u uw NavMesh kunt bouwen, wordt vergroot.
Visualisatie
Meestal is het geschikt voor ruimtelijke oppervlakken om onzichtbaar te zijn; om visuele overzichtelijkheid te minimaliseren en de echte wereld voor zichzelf te laten spreken. Soms is het echter handig om ruimtelijke kaartoppervlakken rechtstreeks te visualiseren, ondanks dat hun echte tegenhangers zichtbaar zijn.
Wanneer de gebruiker bijvoorbeeld een hologram op een oppervlak probeert te plaatsen (bijvoorbeeld door een holografische kast op de muur te plaatsen), kan het handig zijn om het hologram te 'aarden' door een schaduw op het oppervlak te werpen. Hierdoor krijgt de gebruiker een veel duidelijker beeld van de exacte fysieke nabijheid tussen het hologram en het oppervlak. Dit is ook een voorbeeld van de meer algemene praktijk van het visueel 'previewen' van een wijziging voordat de gebruiker deze doorvoert.
Door oppervlakken te visualiseren, kan de toepassing zijn kennis van de omgeving met de gebruiker delen. Een holografisch bordspel kan bijvoorbeeld de horizontale oppervlakken visualiseren die het heeft geïdentificeerd als 'tafels', zodat de gebruiker weet waar ze naartoe moeten gaan om te communiceren.
Het visualiseren van oppervlakken kan een handige manier zijn om de gebruiker ruimten in de buurt te laten zien die niet zichtbaar zijn. Dit kan een manier bieden om de gebruiker toegang te geven tot de keuken (en alle bijbehorende hologrammen) vanuit de woonkamer.
De oppervlaktenetten die door ruimtelijke toewijzing worden geleverd, zijn mogelijk niet bijzonder "schoon". Het is belangrijk om ze op de juiste manier te visualiseren. Traditionele belichtingsberekeningen kunnen fouten in normale oppervlakken op een visueel afleidende manier markeren, terwijl 'schone' texturen die op het oppervlak worden geprojecteerd, kunnen helpen om het een opgeruimder uiterlijk te geven. Het is ook mogelijk om mesh-verwerking uit te voeren om de eigenschappen van het gaas te verbeteren, voordat de oppervlakken worden gerenderd.
Notitie
HoloLens 2 implementeert een nieuwe Scene Understanding Runtime, die Mixed Reality ontwikkelaars een gestructureerde omgevingsweergave op hoog niveau biedt die is ontworpen om de implementatie van plaatsing, occlusie, fysica en navigatie te vereenvoudigen.
De Surface Observer gebruiken
Het uitgangspunt voor ruimtelijke toewijzing is de oppervlakteobservator. De programmastroom is als volgt:
- Een surface observer-object maken
- Geef een of meer ruimtelijke volumes op om de interessegebieden te definiëren waarin de toepassing ruimtelijke kaartgegevens wil ontvangen. Een ruimtelijk volume is gewoon een vorm die een ruimtegebied definieert, zoals een bol of een vak.
- Gebruik een ruimtelijk volume met een door de wereld vergrendeld ruimtelijk coördinatensysteem om een vast gebied van de fysieke wereld te identificeren.
- Gebruik een ruimtelijk volume en werk elk frame bij met een ruimtelijk coördinaatsysteem dat is vergrendeld met het lichaam, om een ruimtegebied te identificeren dat met de gebruiker wordt verplaatst (maar niet wordt gedraaid).
- Deze ruimtelijke volumes kunnen later op elk gewenst moment worden gewijzigd als de status van de toepassing of de gebruiker verandert.
- Polling of meldingen gebruiken om informatie over ruimtelijke oppervlakken op te halen
- U kunt de oppervlakteobservator op elk gewenst moment 'peilen' naar de status van het ruimtelijke oppervlak. In plaats daarvan kunt u zich registreren voor de gebeurtenis 'oppervlakten gewijzigd' van de surfaceobservator, die de toepassing op de hoogte stelt wanneer ruimtelijke oppervlakken zijn gewijzigd.
- Voor een dynamisch ruimtelijk volume, zoals de weergave frustum, of een volume dat is vergrendeld met de body, moeten toepassingen elk frame peilen naar wijzigingen door het interessegebied in te stellen en vervolgens de huidige set ruimtelijke oppervlakken te verkrijgen.
- Voor een statisch volume, zoals een wereld-vergrendelde kubus die een enkele ruimte bedekt, kunnen toepassingen zich registreren voor de gebeurtenis 'surfaces changed' om een melding te ontvangen wanneer ruimtelijke oppervlakken binnen dat volume mogelijk zijn gewijzigd.
- Wijzigingen in procesoppervlakken
- De opgegeven set ruimtelijke oppervlakken herhalen.
- Ruimtelijke oppervlakken classificeren als toegevoegd, gewijzigd of verwijderd.
- Voor elk toegevoegd of gewijzigd ruimtelijk oppervlak dient u, indien van toepassing, een asynchrone aanvraag in om bijgewerkte mesh te ontvangen die de huidige toestand van het oppervlak op het gewenste detailniveau weergeeft.
- Verwerk de asynchrone mesh-aanvraag (meer informatie in de volgende secties).
Mesh Caching
Ruimtelijke oppervlakken worden vertegenwoordigd door dichte driehoeksnetten. Het opslaan, weergeven en verwerken van deze meshes kan aanzienlijke reken- en opslagresources verbruiken. Als zodanig moet elke toepassing een mesh caching-schema gebruiken dat geschikt is voor de behoeften, om de resources te minimaliseren die worden gebruikt voor mesh-verwerking en -opslag. Dit schema moet bepalen welke meshes moeten worden bewaard en welke moeten worden verwijderd, en wanneer het gaas voor elk ruimteoppervlak moet worden bijgewerkt.
Veel van de overwegingen die daar worden besproken, zijn rechtstreeks van toepassing op de manier waarop uw toepassing mesh-caching moet benaderen. U moet overwegen hoe de gebruiker zich door de omgeving beweegt, welke oppervlakken nodig zijn, wanneer verschillende oppervlakken worden waargenomen en wanneer wijzigingen in de omgeving moeten worden vastgelegd.
Bij het interpreteren van de gebeurtenis 'surfaces changed' van de surface-waarnemer, is de basislogica voor meshcaching als volgt:
- Als de toepassing een ruimtelijke oppervlakte-id ziet die nog niet eerder is gezien, moet deze als een nieuw ruimtelijk oppervlak worden behandeld.
- Als de toepassing een ruimtelijk oppervlak met een bekende id ziet, maar met een nieuwe updatetijd, moet dit worden behandeld als een bijgewerkt ruimtelijk oppervlak.
- Als de toepassing een ruimtelijk oppervlak met een bekende id niet meer ziet, moet deze worden behandeld als een verwijderd ruimtelijk oppervlak.
Het is aan elke toepassing om vervolgens de volgende keuzes te maken:
- Moet voor nieuwe ruimtelijke oppervlakken gaas worden aangevraagd?
- Over het algemeen moet gaas onmiddellijk worden aangevraagd voor nieuwe ruimtelijke oppervlakken, wat de gebruiker nuttige nieuwe informatie kan bieden.
- Nieuwe ruimtelijke oppervlakken nabij en voor de gebruiker moeten echter prioriteit krijgen en hun mesh moet eerst worden aangevraagd.
- Als de nieuwe mesh niet nodig is, bijvoorbeeld als de toepassing het model van de omgeving permanent of tijdelijk heeft 'geblokkeerd', moet het niet worden aangevraagd.
- Moet voor bijgewerkte ruimtelijke oppervlakken gaas worden aangevraagd?
- Bijgewerkte ruimtelijke oppervlakken in de buurt van en voor de gebruiker moeten prioriteit krijgen en hun mesh moet eerst worden aangevraagd.
- Het kan ook handig zijn om nieuwe oppervlakken een hogere prioriteit te geven dan aan bijgewerkte oppervlakken, met name tijdens het scannen.
- Om de verwerkingskosten te beperken, willen toepassingen mogelijk de snelheid beperken waarmee updates van ruimtelijke oppervlakken worden verwerkt.
- Het is mogelijk om af te stellen dat wijzigingen aan een ruimtelijk oppervlak gering zijn, bijvoorbeeld als de grenzen van het oppervlak klein zijn, in welk geval de update mogelijk niet belangrijk genoeg is om te verwerken.
- Updates naar ruimtelijke oppervlakken buiten het huidige interessegebied van de gebruiker kan volledig worden genegeerd, hoewel het in dit geval efficiënter kan zijn om de ruimtegrensvolumes te wijzigen die door de oppervlakteobservator worden gebruikt.
- Voor verwijderde ruimtelijke oppervlakken moet gaas worden weggegooid?
- Over het algemeen moet mesh onmiddellijk worden verwijderd voor verwijderde ruimtelijke oppervlakken, zodat de occlusie van hologrammen correct blijft.
- Als de toepassing echter redenen heeft om aan te nemen dat een ruimtelijk oppervlak binnenkort opnieuw zal verschijnen (op basis van het ontwerp van de gebruikerservaring), kan het efficiënter zijn om het te behouden dan het mesh te verwijderen en het later opnieuw te maken.
- Als de toepassing een grootschalig model van de omgeving van de gebruiker bouwt, wil de toepassing mogelijk helemaal geen meshes verwijderen. Het resourcegebruik moet echter nog steeds worden beperkt, mogelijk door meshes op schijf te spoolen als ruimtelijke oppervlakken verdwijnen.
- Sommige relatief zeldzame gebeurtenissen tijdens het genereren van een ruimtelijk oppervlak kunnen ertoe leiden dat ruimtelijke oppervlakken worden vervangen door nieuwe ruimtelijke oppervlakken op een vergelijkbare locatie, maar met verschillende id's. Toepassingen die ervoor kiezen om een verwijderd oppervlak niet te verwijderen, moeten er dus voor zorgen dat ze niet eindigen met meerdere, sterk overlappende ruimteoppervlakken die dezelfde locatie bedekken.
- Moet gaas worden weggegooid voor andere ruimtelijke oppervlakken?
- Zelfs als er een ruimtelijk oppervlak bestaat, moet het worden verwijderd als het niet meer nuttig is voor de gebruikerservaring. Als de toepassing bijvoorbeeld de ruimte aan de andere kant van een deuropening 'vervangt' door een alternatieve virtuele ruimte, doen de ruimtelijke oppervlakken in die ruimte er niet meer toe.
Hier volgt een voorbeeld van een mesh-cachingstrategie, met behulp van ruimtelijke en tijdelijke hysterese:
- Overweeg een toepassing die een frustumvormig ruimtelijk volume van belang wil gebruiken dat de blik van de gebruiker volgt terwijl deze rondkijkt en rondloopt.
- Een ruimtelijk oppervlak kan tijdelijk van dit volume verdwijnen omdat de gebruiker wegklikken van het oppervlak of verder weg van het oppervlak... alleen om terug te kijken of een moment later weer dichterbij te komen. In dit geval betekent het verwijderen en opnieuw maken van de mesh voor dit oppervlak veel redundante verwerkingen.
- Om het aantal verwerkte wijzigingen te verminderen, gebruikt de toepassing twee waarnemers van het ruimtelijke oppervlak, de ene in de andere. Het grotere volume is bolvormig en volgt de gebruiker 'lazily'; het beweegt alleen wanneer dat nodig is om ervoor te zorgen dat het midden zich binnen 2,0 meter van de gebruiker bevindt.
- Nieuwe en bijgewerkte ruimtelijke oppervlaktegaas worden altijd verwerkt vanuit de kleinere binnenste oppervlakteobservator, maar meshes worden in de cache opgeslagen totdat ze verdwijnen van de grotere buitenste oppervlakteobservator. Hierdoor kan de toepassing voorkomen dat veel redundante wijzigingen worden verwerkt vanwege lokale gebruikersverplaatsing.
- Omdat een ruimtelijk oppervlak ook tijdelijk kan verdwijnen vanwege traceringsverlies, wordt het verwijderen van verwijderde ruimtelijke oppervlakken tijdens het bijhouden van verlies ook uit de toepassing uitgestelde.
- Over het algemeen moet een toepassing de afweging evalueren tussen verminderde updateverwerking en verhoogd geheugengebruik om de ideale cachestrategie te bepalen.
Rendering
Er zijn drie primaire manieren waarop meshes voor ruimtelijke toewijzing worden gebruikt voor rendering:
- Voor surface-visualisatie
- Het is vaak handig om ruimtelijke oppervlakken rechtstreeks te visualiseren. Het werpen van 'schaduwen' van objecten op ruimtelijke oppervlakken kan bijvoorbeeld nuttige visuele feedback geven aan de gebruiker tijdens het plaatsen van hologrammen op oppervlakken.
- Een ding om in gedachten te houden is dat ruimtelijke meshes anders zijn dan het soort meshes dat een 3D-kunstenaar zou kunnen maken. De driehoektopologie zal niet zo 'schoon' zijn als de door de mens gemaakte topologie en het net zal last hebben van verschillende fouten.
- Om een aantrekkelijke visuele esthetiek te creëren, wilt u misschien wat gaasverwerking uitvoeren, bijvoorbeeld om gaten of gladde oppervlakken te vullen. U kunt ook een arcering gebruiken om door de kunstenaar ontworpen texturen op uw mesh te projecteren in plaats van de mesh-topologie en normale functies rechtstreeks te visualiseren.
- Voor het occluderen van hologrammen achter echte oppervlakken
- Ruimtelijke oppervlakken kunnen worden weergegeven in een diepte-only-pass, wat alleen van invloed is op de dieptebuffer en geen invloed heeft op de doelen voor kleurweergave.
- Hiermee wordt de dieptebuffer geprimeerd om vervolgens gerenderde hologrammen achter ruimtelijke oppervlakken af te sluiten. Nauwkeurige occlusie van hologrammen vergroot het gevoel dat hologrammen echt bestaan in de fysieke ruimte van de gebruiker.
- Als u alleen diepteweergave wilt inschakelen, werkt u de overvloeistatus bij om RenderTargetWriteMask in te stellen op nul voor alle kleurenweergavedoelen.
- Voor het wijzigen van het uiterlijk van hologrammen die zijn afgesloten door echte oppervlakken
- Normaal gesproken weergegeven geometrie is verborgen wanneer deze wordt overgedekt. Dit wordt bereikt door de dieptefunctie in de dieptestencilstatus in te stellen op 'kleiner dan of gelijk', waardoor geometrie alleen zichtbaar is wanneer deze zich dichter bij de camera bevindt dan alle eerder weergegeven geometrie.
- Het kan echter nuttig zijn om bepaalde geometrie zichtbaar te houden, zelfs wanneer deze is afgedekt, en om het uiterlijk ervan te wijzigen wanneer deze wordt afgetrokken als een manier om visuele feedback aan de gebruiker te geven. Hierdoor kan de toepassing de gebruiker bijvoorbeeld de locatie van een object laten zien en tegelijkertijd duidelijk maken dat zich achter een echt oppervlak bevindt.
- Om dit te bereiken, geeft u de geometrie een tweede keer weer met een andere arcering die het gewenste 'occluded' uiterlijk creëert. Voordat u de geometrie voor de tweede keer weergeeft, moet u twee wijzigingen aanbrengen in de diepte-stencilstatus. Stel eerst de dieptefunctie in op 'groter dan of gelijk' zodat de geometrie alleen zichtbaar is wanneer deze zich verder van de camera bevindt dan alle eerder gerenderde geometrie. Stel ten tweede de DepthWriteMask in op nul, zodat de dieptebuffer niet wordt gewijzigd (de dieptebuffer moet de diepte van de geometrie blijven vertegenwoordigen die zich het dichtst bij de camera bevindt).
Prestaties zijn belangrijk bij het weergeven van meshes van ruimtelijke toewijzingen. Hier volgen enkele technieken voor renderingprestaties die specifiek zijn voor het weergeven van meshes voor ruimtelijke toewijzing:
- Driehoekdichtheid aanpassen
- Wanneer u ruimtelijk oppervlakgaas aanvraagt bij uw oppervlakteobservator, vraagt u de laagste dichtheid van driehoeksnetten aan die voldoende is voor uw behoeften.
- Het kan zinvol zijn om de driehoekdichtheid per oppervlak te variëren, afhankelijk van de afstand van het oppervlak tot de gebruiker en de relevantie ervan voor de gebruikerservaring.
- Het verminderen van het aantal driehoeken vermindert het geheugengebruik en de kosten voor het verwerken van hoekpunten op de GPU, hoewel dit geen invloed heeft op de pixelverwerkingskosten.
- Frustum-ruiming gebruiken
- Frustum-ruiming slaat het tekenen van objecten over die niet zichtbaar zijn omdat ze zich buiten de huidige weergave frustum bevinden. Dit vermindert zowel de CPU- als de GPU-verwerkingskosten.
- Aangezien ruiming per mesh wordt uitgevoerd en ruimtelijke oppervlakken groot kunnen zijn, kan het opsplitsen van elk ruimteoppervlak in kleinere segmenten resulteren in een efficiëntere ruiming (in dat geval worden er minder offscreen driehoeken weergegeven). Er is echter een compromis; Hoe meer meshes u hebt, hoe meer aanroepen u moet doen, wat de CPU-kosten kan verhogen. In een extreem geval kunnen de frustum-ruimingsberekeningen zelf zelfs meetbare CPU-kosten hebben.
- Weergavevolgorde aanpassen
- Ruimtelijke oppervlakken zijn meestal groot, omdat ze de hele omgeving van de gebruiker om hen heen vertegenwoordigen. Pixelverwerkingskosten op de GPU kunnen hoog zijn, met name in gevallen waarin er meer dan één laag zichtbare geometrie is (inclusief zowel ruimtelijke oppervlakken als andere hologrammen). In dit geval sluit de laag die zich het dichtst bij de gebruiker bevindt alle lagen verder weg op, dus alle GPU-tijd die wordt besteed aan het weergeven van die meer afgelegen lagen, wordt verspild.
- Om dit redundante werk op de GPU te verminderen, helpt het om ondoorzichtige oppervlakken weer te geven in volgorde van voor naar achteren (dichtere eerst, meer afgelegen als laatste). Met 'ondoorzichtig' bedoelen we oppervlakken waarvoor de DepthWriteMask is ingesteld op één in uw dieptestencilstatus. Wanneer de dichtstbijzijnde oppervlakken worden weergegeven, wordt de dieptebuffer geprimeerd, zodat verder gelegen oppervlakken efficiënt worden overgeslagen door de pixelprocessor op de GPU.
Mesh-verwerking
Een toepassing kan verschillende bewerkingen op ruimtelijke oppervlaktenetten uitvoeren om aan zijn behoeften te voldoen. De index- en hoekpuntgegevens die bij elk ruimteoppervlakgaas worden geleverd, gebruiken dezelfde vertrouwde indeling als de hoekpunt- en indexbuffers die worden gebruikt voor het renderen van driehoeksnetten in alle moderne rendering-API's. Een belangrijk feit om rekening mee te houden, is echter dat driehoeken voor ruimtelijke kaarten een wikkelvolgorde met de klok mee hebben. Elke driehoek wordt vertegenwoordigd door drie hoekpuntindexen in de indexbuffer van het net en deze indexen identificeren de hoekpunten van de driehoek in een volgorde met de klok mee , wanneer de driehoek vanaf de voorzijde wordt bekeken. De voorzijde (of buitenkant) van ruimtelijke oppervlaktenetten komt overeen met de voorzijde (zichtbare) kant van echte oppervlakken.
Toepassingen moeten alleen mesh-vereenvoudiging uitvoeren als de grofste driehoekdichtheid van de oppervlakteobservator nog steeds onvoldoende grof is . Dit werk is rekenkundig duur en wordt al uitgevoerd door de runtime om de verschillende opgegeven detailniveaus te genereren.
Omdat elke oppervlakteobservator meerdere niet-verbonden ruimtelijke oppervlakken kan leveren, willen sommige toepassingen deze ruimteoppervlakgaasjes mogelijk tegen elkaar knippen en ze vervolgens aan elkaar ritsen. Over het algemeen is de knipstap vereist, omdat de nabijgelegen ruimtelijke oppervlaktenetten elkaar vaak enigszins overlappen.
Raycasting en botsing
Om ervoor te zorgen dat een physics-API (zoals Havok) een toepassing kan bieden met raycasting- en botsingsfunctionaliteit voor ruimtelijke oppervlakken, moet de toepassing ruimtelijk oppervlak meshes aan de physics-API bieden. Meshes die voor natuurkunde worden gebruikt, hebben vaak de volgende eigenschappen:
- Ze bevatten slechts een klein aantal driehoeken. Fysica-bewerkingen zijn rekenintensiever dan renderingbewerkingen.
- Ze zijn 'waterdicht'. Oppervlakken die zijn bedoeld om vast te zijn, mogen geen kleine gaatjes bevatten; zelfs gaten die te klein zijn om zichtbaar te zijn, kunnen problemen veroorzaken.
- Ze worden omgezet in convexe rompen. Convexe rompen hebben weinig veelhoeken en zijn vrij van gaten, en ze zijn rekenkundig veel efficiënter te verwerken dan onbewerkte driehoeksnetten.
Wanneer u raycasts tegen ruimtelijke oppervlakken uitvoert, moet u er rekening mee houden dat deze oppervlakken vaak complexe, rommelige vormen vol rommelige kleine details zijn, net als uw bureau! Dit betekent dat één raycast vaak onvoldoende is om u voldoende informatie te geven over de vorm van het oppervlak en de vorm van de lege ruimte in de buurt. Het is meestal een goed idee om veel raycasts binnen een klein gebied uit te voeren en de geaggregeerde resultaten te gebruiken om een betrouwbaarder begrip van het oppervlak af te leiden. Als u bijvoorbeeld het gemiddelde van 10 raycasts gebruikt om de plaatsing van hologrammen op een oppervlak te begeleiden, levert dit een veel vloeiender en minder jittery resultaat op dan het gebruik van slechts één raycast.
Houd er echter rekening mee dat elke raycast hoge rekenkosten kan hebben. Afhankelijk van uw gebruiksscenario moet u de rekenkosten van extra raycasts (uitgevoerd elk frame) inruilen tegen de rekenkundige kosten van mesh-verwerking om gaten in ruimtelijke oppervlakken glad te maken en te verwijderen (gedaan wanneer ruimtelijke meshes worden bijgewerkt).
De omgevingsscanervaring
Elke toepassing die gebruikmaakt van ruimtelijke toewijzing moet overwegen om een 'scanervaring' te bieden; het proces waarmee de toepassing de gebruiker begeleidt bij het scannen van oppervlakken die nodig zijn om de toepassing correct te laten functioneren.
Voorbeeld van scannen
De aard van deze scanervaring kan sterk variëren, afhankelijk van de behoeften van elke toepassing, maar er moeten twee hoofdprincipes zijn als leidraad voor het ontwerp.
Ten eerste is duidelijke communicatie met de gebruiker de belangrijkste zorg. De gebruiker moet altijd weten of aan de vereisten van de toepassing wordt voldaan. Wanneer er niet aan deze voorwaarden wordt voldaan, moet het onmiddellijk duidelijk zijn voor de gebruiker waarom dit zo is en moeten ze snel worden geleid om de juiste actie te ondernemen.
Ten tweede moeten toepassingen proberen een balans te vinden tussen efficiëntie en betrouwbaarheid. Wanneer het mogelijk is om dit op betrouwbare wijze te doen, moeten toepassingen automatisch ruimtelijke toewijzingsgegevens analyseren om de gebruikerstijd te besparen. Wanneer het niet mogelijk is om dit betrouwbaar te doen, moeten toepassingen in plaats daarvan de gebruiker in staat stellen om de toepassing snel te voorzien van de aanvullende informatie die nodig is.
Als u de juiste scanervaring wilt ontwerpen, moet u overwegen welke van de volgende mogelijkheden van toepassing zijn op uw toepassing:
Geen scanervaring
- Een toepassing kan perfect functioneren zonder enige begeleide scanervaring; het zal leren over oppervlakken die worden waargenomen in de loop van natuurlijke beweging van de gebruiker.
- Een toepassing waarmee de gebruiker bijvoorbeeld met holografische spuitverf op oppervlakken kan tekenen, vereist alleen kennis van de oppervlakken die momenteel zichtbaar zijn voor de gebruiker.
- De omgeving is mogelijk al gescand als de gebruiker al veel tijd heeft besteed aan het gebruik van de HoloLens.
- Houd er echter rekening mee dat de camera die door ruimtelijke toewijzing wordt gebruikt, slechts 3,1 m voor de gebruiker kan zien, zodat ruimtelijk kaarten niet op de hoogte zijn van meer afgelegen oppervlakken, tenzij de gebruiker deze in het verleden van dichterbij heeft waargenomen.
- Zodat de gebruiker begrijpt welke oppervlakken zijn gescand, moet de toepassing hierover visuele feedback geven. Het werpen van virtuele schaduwen op gescande oppervlakken kan bijvoorbeeld helpen hologrammen op die oppervlakken te plaatsen.
- In dit geval moeten de begrenzingsvolumes van de waarnemer van het ruimtelijke oppervlak elk frame worden bijgewerkt naar een door het lichaam vergrendeld ruimtelijk coördinatensysteem, zodat ze de gebruiker volgen.
Een geschikte locatie zoeken
- Een toepassing kan worden ontworpen voor gebruik op een locatie met specifieke vereisten.
- De toepassing kan bijvoorbeeld een leeg gebied rond de gebruiker vereisen, zodat deze veilig holografische kung-fu kan oefenen.
- Toepassingen moeten eventuele specifieke vereisten vooraf doorgeven aan de gebruiker en deze versterken met duidelijke visuele feedback.
- In dit voorbeeld moet de toepassing de omvang van het vereiste lege gebied visualiseren en de aanwezigheid van ongewenste objecten in deze zone visueel markeren.
- In dit geval moeten de begrenzingsvolumes van de waarnemer van het ruimtelijke oppervlak een wereldwijd vergrendeld ruimtelijk coördinatensysteem op de gekozen locatie gebruiken.
Een geschikte configuratie van oppervlakken vinden
- Een toepassing kan een specifieke configuratie van oppervlakken vereisen, bijvoorbeeld twee grote, platte, tegengestelde wanden om een holografische spiegelzaal te creëren.
- In dergelijke gevallen moet de toepassing de oppervlakken analyseren die door ruimtelijke toewijzing worden geleverd om geschikte oppervlakken te detecteren en de gebruiker ernaartoe te leiden.
- De gebruiker moet een terugvaloptie hebben als de surface-analyse van de toepassing niet betrouwbaar is. Als de toepassing bijvoorbeeld een deuropening onjuist identificeert als een platte wand, heeft de gebruiker een eenvoudige manier nodig om deze fout te corrigeren.
Een deel van de omgeving scannen
- Een toepassing wil mogelijk slechts een deel van de omgeving vastleggen, zoals aangegeven door de gebruiker.
- De toepassing scant bijvoorbeeld een deel van een ruimte, zodat de gebruiker een holografische geclassificeerde advertentie kan plaatsen voor meubels die ze willen verkopen.
- In dit geval moet de toepassing ruimtelijke toewijzingsgegevens vastleggen binnen de regio's die de gebruiker tijdens de scan heeft waargenomen.
De hele kamer scannen
- Voor een toepassing is mogelijk een scan van alle oppervlakken in de huidige ruimte vereist, inclusief die achter de gebruiker.
- Een spel kan bijvoorbeeld de gebruiker in de rol van Gulliver plaatsen, onder beleg van honderden kleine Lilliputians die vanuit alle richtingen naderen.
- In dergelijke gevallen moet de toepassing bepalen hoeveel van de oppervlakken in de huidige ruimte al zijn gescand en de blik van de gebruiker richten om aanzienlijke gaten op te vullen.
- De sleutel tot dit proces is het geven van visuele feedback die de gebruiker duidelijk maakt welke surfaces nog niet zijn gescand. De toepassing kan bijvoorbeeld op afstand gebaseerde mist gebruiken om regio's die niet worden gedekt door ruimtelijke toewijzingsoppervlakken visueel te markeren.
Een eerste momentopname van de omgeving maken
- Een toepassing wil mogelijk alle wijzigingen in de omgeving negeren na het maken van een eerste 'momentopname'.
- Dit kan geschikt zijn om onderbreking van door de gebruiker gemaakte gegevens te voorkomen die nauw zijn gekoppeld aan de initiële status van de omgeving.
- In dit geval moet de toepassing een kopie maken van de ruimtelijke toewijzingsgegevens in de oorspronkelijke staat zodra de scan is voltooid.
- Toepassingen moeten updates voor ruimtelijke toewijzingsgegevens blijven ontvangen als hologrammen nog steeds correct moeten worden afgesloten door de omgeving.
- Continue updates van ruimtelijke toewijzingsgegevens maken het ook mogelijk om wijzigingen te visualiseren die zijn opgetreden, waardoor de gebruiker de verschillen tussen eerdere en huidige statussen van de omgeving kan verduidelijken.
Door de gebruiker geïnitieerde momentopnamen van de omgeving maken
- Een toepassing wil mogelijk alleen reageren op omgevingswijzigingen wanneer de gebruiker hiertoe instructies krijgt.
- De gebruiker kan bijvoorbeeld meerdere 3D-'beelden' van een vriend maken door hun poses op verschillende momenten vast te leggen.
De gebruiker toestaan de omgeving te wijzigen
- Een toepassing kan worden ontworpen om in realtime te reageren op wijzigingen in de omgeving van de gebruiker.
- De gebruiker die een gordijn tekent, kan bijvoorbeeld een 'scènewijziging' activeren voor een holografisch toneelstuk dat aan de andere kant plaatsvindt.
De gebruiker begeleiden bij het voorkomen van fouten in de ruimtelijke toewijzingsgegevens
- Een toepassing wil mogelijk richtlijnen bieden aan de gebruiker tijdens het scannen van de omgeving.
- Dit kan de gebruiker helpen bepaalde soorten fouten in de ruimtelijke toewijzingsgegevens te voorkomen, bijvoorbeeld door uit de buurt te blijven van zonovergoten ramen of spiegels.
Een extra detail waarmee u rekening moet houden, is dat het 'bereik' van ruimtelijke kaartgegevens niet onbeperkt is. Hoewel ruimtelijke toewijzing een permanente database met grote ruimten maakt, worden die gegevens alleen beschikbaar gemaakt voor toepassingen in een 'bel' van beperkte grootte rond de gebruiker. Als je begint aan het begin van een lange gang en ver genoeg van het begin af loopt, dan zullen uiteindelijk de ruimtelijke oppervlakken aan het begin verdwijnen. U kunt dit verhelpen door deze oppervlakken in de cache in uw toepassing op te slaan nadat ze zijn verdwenen uit de beschikbare ruimtelijke toewijzingsgegevens.
Mesh-verwerking
Het kan helpen om veelvoorkomende typen fouten in oppervlakken te detecteren en om de ruimtelijke toewijzingsgegevens te filteren, te verwijderen of te wijzigen.
Houd er rekening mee dat ruimtelijke kaartgegevens zijn bedoeld om zo getrouw mogelijk te zijn aan echte oppervlakken, dus elke verwerking die u toepast, loopt het risico dat uw oppervlakken verder van de 'waarheid' worden verplaatst.
Hier volgen enkele voorbeelden van verschillende soorten mesh-verwerking die nuttig kunnen zijn:
Gat vullen
- Als een klein object van een donker materiaal niet kan worden gescand, zal het een gat in het omringende oppervlak achterlaten.
- Gaten beïnvloeden occlusie: hologrammen kunnen 'door' een gat in een zogenaamd ondoorzichtig echt oppervlak worden gezien.
- Gaten hebben invloed op raycasts: als u raycasts gebruikt om gebruikers te helpen bij de interactie met oppervlakken, kan het ongewenst zijn dat deze stralen door gaten gaan. Een oplossing is het gebruik van een bundel van meerdere raycasts voor een regio van de juiste grootte. Hiermee kunt u 'uitbijter'-resultaten filteren, zodat zelfs als één raycast door een klein gaatje gaat, het geaggregeerde resultaat nog steeds geldig is. Deze benadering brengt echter wel rekenkundige kosten met zich mee.
- Gaten hebben invloed op fysicaconflicten: een object dat wordt gecontroleerd door fysicasimulatie kan door een gat in de vloer vallen en verloren gaan.
- Het is mogelijk om dergelijke gaten in het oppervlakgaas algoritmisch op te vullen. U moet uw algoritme echter zo afstemmen dat 'echte gaten' zoals ramen en deuropeningen niet worden opgevuld. Het kan lastig zijn om 'echte gaten' op betrouwbare wijze te onderscheiden van 'imaginaire gaten', dus u moet experimenteren met verschillende heuristieken, zoals 'grootte' en 'grensvorm'.
Hallucinatie verwijderen
- Reflecties, felle lichten en bewegende objecten kunnen kleine'hallucinaties' laten zweven in de lucht.
- Hallucinaties zijn van invloed op occlusie: hallucinaties kunnen zichtbaar worden als donkere vormen zich voor en occluderen van andere hologrammen.
- Hallucinaties hebben invloed op raycasts: als u raycasts gebruikt om gebruikers te helpen bij de interactie met oppervlakken, kunnen deze stralen een hallucinatie raken in plaats van het onderliggende oppervlak. Net als bij gaten is een oplossing het gebruik van veel raycasts in plaats van één raycast, maar ook hier zijn rekenkundige kosten verbonden.
- Hallucinaties zijn van invloed op fysicaconflicten: een object dat door natuurkundesimulatie wordt bestuurd, kan vastlopen tegen een hallucinatie en niet in staat zijn om door een schijnbaar helder ruimtegebied te bewegen.
- Het is mogelijk om dergelijke hallucinaties uit het oppervlakgaas te filteren. Net als bij gaten moet u uw algoritme echter zo afstemmen dat echte kleine objecten, zoals lampstanden en deurgrepen, niet worden verwijderd.
Smoothing
- Ruimtelijke toewijzing kan oppervlakken retourneren die ruw of 'luidruchtig' lijken te zijn in vergelijking met hun echte tegenhangers.
- Gladheid heeft invloed op fysieke conflicten: als de vloer ruw is, rolt een fysiek gesimuleerde golfbal er niet soepel overheen in een rechte lijn.
- Gladheid heeft invloed op de weergave: als een oppervlak direct wordt gevisualiseerd, kunnen ruwe oppervlakken het uiterlijk beïnvloeden en een 'schoon' uiterlijk verstoren. Het is mogelijk om dit te verhelpen door de juiste belichting en texturen te gebruiken in de arcering die wordt gebruikt om het oppervlak weer te geven.
- Het is mogelijk om ruwheid in een oppervlaktegaas glad te maken. Dit kan het oppervlak echter verder van het overeenkomstige werkelijke oppervlak afduwen. Het onderhouden van nauwe overeenkomsten is belangrijk om nauwkeurige hologram occlusie te produceren en om gebruikers in staat te stellen nauwkeurige en voorspelbare interacties met holografische oppervlakken te bereiken.
- Als alleen een cosmetische wijziging vereist is, kan het voldoende zijn om het hoekpunt normaler te maken zonder de hoekpuntposities te veranderen.
Vliegtuig zoeken
- Er zijn veel vormen van analyse die een toepassing kan uitvoeren op de oppervlakken die door ruimtelijke toewijzing worden geleverd.
- Een eenvoudig voorbeeld is 'vliegtuig zoeken'; het identificeren van begrensde, meestal planaire gebieden van oppervlakken.
- Planar-regio's kunnen worden gebruikt als holografische werkoppervlakken, regio's waar holografische inhoud automatisch door de toepassing kan worden geplaatst.
- Planar-regio's kunnen de gebruikersinterface beperken, zodat gebruikers kunnen communiceren met de oppervlakken die het beste bij hun behoeften passen.
- Planaire gebieden kunnen worden gebruikt als in de echte wereld, voor holografische tegenhangers van functionele objecten zoals LCD-schermen, tabellen of whiteboards.
- Planar-regio's kunnen speelgebieden definiëren, die de basis vormen van gameniveaus.
- Planar-regio's kunnen virtuele agents helpen om door de echte wereld te navigeren door de vloergebieden te identificeren waarop echte mensen waarschijnlijk zullen lopen.
Prototypen en foutopsporing
Handige hulpprogramma's
- De HoloLens-emulator kan worden gebruikt om toepassingen te ontwikkelen met behulp van ruimtelijke toewijzing zonder toegang tot een fysieke HoloLens. Hiermee kunt u een livesessie op een HoloLens simuleren in een realistische omgeving, met alle gegevens die uw toepassing normaal gesproken zou verbruiken, inclusief HoloLens-beweging, ruimtelijke coördinatensystemen en ruimtelijke toewijzings meshes. Dit kan worden gebruikt om betrouwbare, herhaalbare invoer te bieden, wat handig kan zijn voor het opsporen van problemen en het evalueren van wijzigingen in uw code.
- Als u een scenario wilt reproduceren, legt u ruimtelijke toewijzingsgegevens vast via het netwerk van een live HoloLens, slaat u deze vervolgens op schijf op en gebruikt u deze in latere foutopsporingssessies.
- De 3D-weergave van de Windows-apparaatportal biedt een manier om alle ruimtelijke oppervlakken te zien die momenteel beschikbaar zijn via het systeem voor ruimtelijke toewijzing. Dit biedt een basis voor de vergelijking van de ruimtelijke oppervlakken in uw toepassing; U kunt bijvoorbeeld eenvoudig zien of ruimteoppervlakken ontbreken of op de verkeerde plaats worden weergegeven.
Algemene richtlijnen voor het maken van prototypen
- Omdat fouten in de ruimtelijke toewijzingsgegevens van grote invloed kunnen zijn op de gebruikerservaring, raden we u aan uw toepassing in een groot aantal verschillende omgevingen te testen.
- Laat je niet vastzitten in de gewoonte om altijd op dezelfde locatie te testen, bijvoorbeeld aan je bureau. Zorg ervoor dat u test op verschillende oppervlakken met verschillende posities, vormen, maten en materialen.
- Op dezelfde manier kunt u, hoewel synthetische of vastgelegde gegevens nuttig kunnen zijn voor foutopsporing, niet te afhankelijk worden van dezelfde paar testcases. Dit kan het vinden van belangrijke problemen vertragen die eerder door meer gevarieerde tests zouden zijn ondervangen.
- Het is een goed idee om tests uit te voeren met echte (en idealiter niet-getrainde) gebruikers, omdat ze de HoloLens of uw toepassing mogelijk niet op dezelfde manier gebruiken als u. Het kan u zelfs verbazen hoe afwijkend gedrag, kennis en veronderstellingen van mensen kunnen zijn.
Problemen oplossen
- Om ervoor te zorgen dat de oppervlaktegaas correct worden georiënteerd, moet elk GameObject actief zijn voordat het naar de SurfaceObserver wordt verzonden om de mesh te laten bouwen. Anders worden de meshes weergegeven in uw ruimte, maar worden ze onder vreemde hoeken gedraaid.
- Het GameObject dat het script uitvoert dat communiceert met de SurfaceObserver, moet worden ingesteld op de oorsprong. Anders hebben alle GameObjects die u maakt en verzendt naar de SurfaceObserver om de meshes te laten bouwen, een verschuiving die gelijk is aan de verschuiving van het bovenliggende gameobject. Hierdoor kunnen uw meshes enkele meters verderop worden weergegeven, waardoor het moeilijk is om fouten op te sporen in wat er aan de hand is.