Dela via


Fästpunkter

Först och främst tillhandahåller World Locking Tools ett stabilt världlåst koordinatsystem: världens låsta utrymme. Det här utrymmet förblir så fast som möjligt i förhållande till den fysiska världen. Och objekt i världens låsta utrymme har funktioner som kräver en sådan stabil referensram, till exempel att upprätthålla relativ placering till andra virtuella objekt, simulering av lagar om naturlig fysik, kinematik och andra animeringstekniker.

Beroende på programmets behov kan det vara tillräckligt med världslåst utrymme för en del eller allt sceninnehåll.

Men även om världlåst utrymme förblir optimalt anpassat till fysiskt utrymme, finns det situationer som kan beskrivas senare där det inte är möjligt för flera punkter i världen låst utrymme att förbli både fasta i sitt gemensamma koordinatutrymme och fasta i förhållande till referenspunkter i den fysiska världen.

För ett trivialt men belysande exempel antar vi att sensorn mappar en fästpunkt till positionen (3,0,0) och en annan till positionen (-3,0,0). Senare, när sensorförfiningar bearbetas, fastställs det att de två koordinaterna ska ha varit (3,0,0) och (-2,0,0). Det finns helt klart ingen rotation och förskjutning som kan tillämpas på kameran som omvandlar ett sex meter långt avstånd mellan de två fästpunkterna till en fem meter förskjutning.

Med unitys rumsliga fästpunktssystem skulle de två fästpunkterna bara tyst flytta till sina nyligen skannade positioner.

Men World Locking Tools garanterar att icke-rörliga objekt "mestadels" aldrig kommer att röra sig i världens låsta utrymme. Och i själva verket är varje rörelse upp till ägande ansökan.

Ett annat vanligt "onormalt" villkor är spårningsförlust. När spårning går förlorad i en miljö (till exempel rum) och återvinns i en annan miljö finns det först ingen information som länkar de två blankstegen. Koordinaterna i ett utrymme är meningslösa i förhållande till koordinater i det andra utrymmet. Paradigmet för fästpunkt gör att programmet kan hantera den inledande fasen korrekt när rumslig information om det gamla utrymmet är okänd (till exempel genom att dölja objekten i det gamla utrymmet), samt återställa när den rumsliga relationen mellan de två blankstegen blir känd.

Mer information finns om dessa särskilda villkor och de omanpassningsåtgärder som WLT utför för att hantera dem. Diskussionen här fokuserar på kontraktet mellan WLT och programmet för att lösa sådana villkor på ett smidigt sätt.

Kopplingspunkter är kodifieringen av det kontraktet mellan World Locking Tools och programmet. Ett program skapar och placerar bifogade filer med hjälp av API:er för World Locking Tools. När en korrigering i positionen för en fästpunkt bestäms av en omanpassningsåtgärd meddelas programmet via återanrop av den nya positionen i det världslåst utrymme som håller fästpunkten vid sin gamla position i fysiskt utrymme.

Vissa scenarier där bifogade filer för World Locking Tools kan vara lösningen:

  • Det är viktigare att vara fast i förhållande till funktioner i den fysiska världen än i förhållande till andra virtuella objekt.
  • Objekt placeras i världen vid körning i stället för i Unity vid designtillfället, och det kan vara viktigt att stämma av relativa positioner avgränsade med avbrott i spårningen (se diskussion om fragment).
  • Det är viktigt att hantera ett objekts synlighet baserat på giltigheten för dess fysiska utrymmespositionering.

Använda bifogade filer

Det är ganska enkelt att använda bifogade filer.

Klientansvar

För varje bifogad punkt som krävs måste klienten:

  1. Begär bifogade filer från systemet. Se CreateAttachmentPoint
  2. Ta bort bifogade filer som inte längre behövs. Se ReleaseAttachmentPoint
  3. Apprise systemet för den bifogade punktens inledande position och rörelse. Se CreateAttachmentPoint, MoveAttachmentPoint och TeleportAttachmentPoint
  4. Hantera omanpassningsåtgärdshändelser. Se nedan.

Ansvarsområden för låsningsverktyg i världen

World Locking Tools meddelar programmet för varje berörd fästpunkt när något av följande inträffar:

  1. Giltigheten för den bifogade punktens fysiska världsspårningsändringar.
  2. Koordinaterna i världens låsta utrymme ändras på grund av en omanpassningsåtgärd, som kan vara antingen en fragmentsammanslagning eller en återfrysning.

Dessa meddelanden sänds via ombud som programmet skickar till WorldLockingManager när den bifogade filen skapas.

Hur du bäst hanterar dessa meddelanden lämnas till programmet, eftersom var och en har sina egna överväganden. Exempelhanterare, som används internt och kan antingen användas som är eller används som utgångspunkt för anpassade implementeringar, tillhandahålls.

Exempelimplementeringar

För en fästpunkt som ska förbli fast i den fysiska världen och som ska dölja innehållet när spårningen inte är giltig implementerar AdjusterFixed AdjustStateDelegate med sin HandleAdjustState-medlem och AdjustLocationDelegate med sin HandleAdjustLocationLocation-medlem. En liknande komponent för att flytta objekt finns i AdjusterMoving.

Det är värt att notera att det är valfritt att tillhandahålla någon av eller båda dessa ombud, och i själva verket kan reaktioner på tillstånds- och platsändringar implementeras baserat på avsökning snarare än händelser. Men om inte deras användning är omöjlig på grund av programmets detaljer, utgör det händelsebaserade systemet med ombud en mycket effektivare implementering.

Vi rekommenderar att du börjar med AdjusterFixed-komponenten (eller mycket liknande AdjusterMoving) och ändrar hanterarna HandleAdjustLocation och HandleAdjustState efter dina programbehov.

Se även