Dela via


Omanpassa åtgärder

Omanpassningsåtgärder i World Locking Tools är när systemet fastställer att en ompositionering av några av objekten i scenen bättre skulle registrera dessa objekt med sina fysiska världsankare.

Det här avsnittet försöker ge ytterligare insikt i de situationer som leder till omanpassningsåtgärder och själva driftmekaniken.

Det är viktigt att betona här att omanpassningsåtgärder sker sällan. Standardfeltoleranserna som utlöser en återfrysningsåtgärd kan anpassas av programmet, men normalt utlöser miljöer med mixad verklighet endast återfrysningsåtgärder under extraordinära omständigheter. Villkor som kan bidra till behovet av en återfrysning är:

  • Förlust av spårning på grund av dålig miljö.
  • Snabb förflyttning av huvudet som påverkar miljögenomsökning.
  • Dynamiska miljöer.
  • Loopstängning (d.s. ackumulera spårningsfel på en rondellväg som leder tillbaka till en tidigare besökt plats).

Rotorsaken till dessa problem är dålig spårning, med andra ord spårningsfel. Med rimliga miljöer som producerar ganska bra spårning, och särskilt efter en första genomsökning av utrymmet, blir omanpassningsåtgärder mycket sällsynta.

Fragmentsammanslagning

Många villkor kan leda till att det finns flera fragment, den vanligaste orsaken är tillfällig spårningsförlust. Fragment definieras som samlingar av objekt som delar ett gemensamt koordinatutrymme, men där koordinatutrymmet för ett fragment är obestämt i förhållande till ett annat fragment.

När tillräckligt många nya sensordata tas emot och bearbetas så att innehållet i två tidigare orelaterade fragment kan placeras korrekt i förhållande till varandra i samma utrymme, kan en fragmentsammanslagning utföras.

Det nya koordinatutrymmet där innehållet i de två (eller flera) fragmenten sammanfogas är godtyckligt. Vi nämner här att det slutliga koordinatutrymmet kommer att vara ett av blankstegen, vilket bara är relevant eftersom det innebär att alla fragment som sammanfogas utom ett, målfragmentet, behöver sina koordinater justerade. Innehållet i det fragment som valts som slutmål för sammanslagningen påverkas inte.

En justeringstransformering beräknas av systemet för vart och ett av de källfragment som sammanfogas. AdjustLocationDelegate för varje fästpunkt i dessa fragment anropas med justeringstransformeringen. Återigen påverkas inte fästpunkter i målfragmentet och deras AdjustLocationDelegates anropas inte heller.

De två rum som är sammankopplade med ett mörkt hallscenario i beskrivningen av fragment är ett exempel på en sådan situation. Under den inledande fasen har båda fragmenten (rummen) genomsökts, men det finns ingen tillgänglig information om de två fragmentens relativa positioner. Så koordinatsystemet som innehållet i varje fragment placeras i är godtyckligt, så länge det är konstant över alla objekt i det rummet. Innehållet i varje rum kan till exempel finnas i ett koordinatsystem med dess ursprung i det sydvästra hörnet av rummet. Koordinaterna för två objekt i samma fragment anger positionerna för de två objekten i förhållande till varandra, men koordinaterna för två objekt i två olika fragment berättar ingenting om deras relativa positioner.

När mer information hämtas finns det en möjlighet att justera koordinaterna för innehållet i det andra fragmentet så att koordinaterna för dess innehåll är meningsfulla i förhållande till objekt i det första fragmentet. Till exempel kan halllampan vara påslagen och korridoren passeras, vilket överbryggar klyftan mellan de två fragmenten. Om koordinaterna för alla objekt i båda rummen justeras så att de är i samma konsekventa koordinatutrymme, finns det inte längre någon verklig skillnad mellan de två fragmenten, och därför kan innehållet anses tillhöra ett enda gemensamt fragment.

Den här åtgärden för att komprimera flera fragment till ett enda fragment är en sammanslagningsåtgärd.

Det är viktigt att notera här att för vanliga Unity-objekt som placeras i scenen i ett världslåst utrymme har sammanslagningsåtgärden ingen effekt. Förflyttning av objekt från omanpassningsåtgärder sker endast via bifogade filer.

Återfrysa åtgärder

En annan situation som uppstår är när fästpunkternas positioner förfinas med tiden. Det blir uppenbart att en rotations-/förskjutningstransformation inte längre är tillräcklig för att kompensera för skillnaden mellan de inledande grova ankarpositionerna och de nyare förbättrade positionerna i den fysiska världen. Tänk på att fästpunkterna själva ständigt rör sig i förhållande till varandra i spongy utrymme. Men de fästpunkter som härleds från dessa fästpunkter är fasta i världslåst utrymme.

När systemet inser att de bifogade filer som det hanterar kan registreras bättre med den fysiska världen på grund av uppdateringar av ankarpositioner, har det en annan möjlighet för en korrigeringshändelse. Den här justeringen av fästpunktspositioner för att återspegla nya sensordata kallas för en återfrysningsåtgärd. Medan innehållet i ett fragment i en sammanslagningsåtgärd justeras av en enda transformering för att sammanfoga koordinatutrymmen i två fragment till ett enda enhetligt utrymme, justerar en återfrysning varje fästpunkt individuellt baserat på de uppdaterade positionerna för fästpunkterna som påverkar den.

Precis som i sammanfogningsåtgärden informeras varje fästpunkt om sin beräknade justeringstransformering via dess AdjustLocationDelegate.

Om villkoren är uppfyllda kan återfrysningen också utföra en sammanslagningsåtgärd. Den här sammanfogningen betraktas som en implicit del av återfrysningen: Det kommer inte att genereras några separata händelser för sammanfogningen, och justeringstransformen som levereras som en del av återfrysningen inkluderar både den enskilda justeringen på grund av fästpunktsrörelsen och fragmentjusteringen på grund av sammanfogningen.

Reagera på omanpassning av händelser

I antingen sammanfogning eller återfrysning är reaktionen på omanpassningshändelser upp till programmet. Mer exakt är det upp till var och en av de bifogade punkthanterarna, eftersom olika objekttyper kan reagera på olika sätt. Vanligtvis flyttas objekten som påverkas av fästpunkten av justeringstransformen via deras GameObject.transform. Rörelse kan i stället implementeras av någon annan mekanism, till exempel att flytta hörn manuellt. Det kan till och med vara fördelaktigt för vissa program att ta bort objekt som påverkas av en sammanslagning och påbörja en ny skapandecykel.

Poängen är att World Locking Tools inte är beroende av hur eller om programmet reagerar på omanpassningsåtgärder. Det är helt upp till programutvecklarens behov.

Den bästa mekanismen för att meddela och reagera på omanpassningsåtgärder är fästpunkten. Mer information och alternativ beskrivs i den artikeln.

Se även