We vervolgen onze verkenning van Mixed Reality-capaciteiten van de Meta Quest 3 met Unreal Engine en de MetaXR-plugin die we zijn begonnen in een vorige devlog-post.
In dit bericht kijken we naar de mogelijkheden van het gebruik van Passthrough Materialen om de virtuele en echte wereld dynamisch te mengen in Mixed Reality. Met dergelijke materialen kunnen we een gat in de virtuele wereld prikken, zodat de echte wereld zichtbaar wordt.
Tech Stack
Voor deze verkenning gebruiken we de volgende tech stack:
Eenvoudig Passthrough Materiaal
In zijn eenvoudigste vorm is een Passthrough Materiaal een Unreal Engine Materiaal met de volgende eigenschappen:
- Material Domain
Surface - Blend Mode
Translucent - Shading Model
Unlit - Write Only Alpha
true - Opacity tussen
0.0(geen passthrough) en1.0(volledige passthrough)
Wanneer het materiaal wordt toegepast op een mesh, zal de mesh zelf niet zichtbaar zijn, behalve het passthrough blend-effect. Dit is te zien in de afbeeldingen hieronder, waar het Passthrough Materiaal is toegepast op het ronde deel van een gele mesh.



Het materiaalgraph is zeer eenvoudig, zoals verwacht. We gebruiken een Material Parameter voor de opacity, zodat het eenvoudig kan worden aangepast in Material Instances.

Passthrough Materiaal met Vertex Color
Unreal Engine biedt een standaard grijze/gele kubus die Vertex Color gebruikt om te bepalen welk deel de zijkant is (grijs), en welk deel de rand is (geel/zwart).
Wat als we de grijze zijkanten van de kubus passthrough willen inschakelen, terwijl we nog steeds de gele/zwarte randen van de kubus tonen?

Wanneer we het eenvoudige Passthrough Materiaal op de kubus toepassen, zal de volledige kubus passthrough inschakelen, waardoor alle details over zijkanten en randen verloren gaan.

Dus we moeten ten minste een Passthrough Materiaal creëren dat de Vertex Color node gebruikt om de Opacity-waarde te bepalen, zodat we Passthrough kunnen inschakelen voor de zijkanten en uitschakelen voor de rand.
In het materiaalgraph gebruiken we een Material Parameter om te selecteren welk vertex color kanaal we willen gebruiken (Rood / Groen / Blauw / Alpha), en een andere Material Parameter om de vertex color-waarde te kunnen inverteren om de opacity te produceren (bijvoorbeeld als we passthrough willen tonen op alles behalve de zijkanten).

Wanneer we dit materiaal aan de kubus toewijzen, zien we dat de zijkanten passthrough inschakelen zoals bedoeld, maar we zien nog steeds niet de gele/zwarte randen. Dit komt omdat een Passthrough Materiaal alleen het alphakanaal beïnvloedt, in principe beslissend of de Passthrough-afbeelding wordt getoond of wat er zichtbaar is in de virtuele wereld (in dit geval de virtuele houten bureau).

Dus als we het Passthrough-materiaal (passthrough of niet) willen combineren met het originele kubusmateriaal (grijs of geel), dan kunnen we dit doen door de Overlay Material-eigenschap op de static mesh te gebruiken.
Materialis ingesteld op het kubusmateriaalOverlay Materialis ingesteld op het Passthrough-materiaal
In principe wordt de kubus nu tweemaal gerenderd, eenmaal met het reguliere materiaal om grijs of geel te renderen, en eenmaal met het overlay-materiaal om de virtuele of echte wereld te tonen.

Wat precies het beoogde effect is dat we wilden hebben.
Overlappende Passthrough Materiaal met een dynamische rand
Als voorbeeld met wat meer interactie hebben we de projectielen die kunnen worden afgevuurd met een pistool verbeterd.
Wanneer een projectiel een gegenereerde mesh raakt (zoals een muur, plafond of vloer), zal het een vierkant vlak spawnen uitgelijnd met het impactpunt, en zichzelf vernietigen. Na een paar seconden zal het vlak schalen en uiteindelijk verdwijnen.
De materiaalconfiguratie is vergelijkbaar met de kubus uit de vorige sectie:
Materialis ingesteld op het randmateriaal, dat een vloeiende blauw/witte rand rendert tussen de virtuele en echte wereldOverlay Materialis ingesteld op het Passthrough-materiaal, dat Passthrough inschakelt aan de binnenkant van de rand met een vergelijkbaar verloop
Het eindeffect is te zien in de video hieronder, waar we meerdere projectielen rond dezelfde plek op de muur kunnen afvuren, waardoor een gebied met ingeschakelde passthrough wordt samengesteld, omgeven door een blauwe rand.

Als je op de afspeelknop klikt, wordt de YouTube-speler ingesloten en kunnen cookies van derden worden ingesteld en gegevens van YouTube worden verzameld.
In de projectiel Blueprint om het vlak te spawnen wanneer het een gegenereerd oppervlak raakt, biedt de OnComponentHit-event alle informatie die we nodig hebben om het vlak goed te plaatsen en uit te lijnen.

In de vlak Blueprint zorgen we ervoor dat na een korte vertraging een timeline wordt afgespeeld om het vlak te krimpen, waarna het volledig wordt vernietigd.

Om de overlap van meerdere vlakken goed te laten werken, moeten we de Blend Mode op het Passthrough Materiaal wijzigen van Translucent naar AlphaHoldout. Op deze manier wordt de Passthrough alpha van overlappende vlakken correct samengevoegd, in plaats van de Passthrough alpha voor elk vlak te overschrijven (wat de blauwe randen zichtbaar maakt binnen waar de vlakken overlappen, en zelfs delen van de rand toont die normaal volledig onzichtbaar zouden zijn).


De materiaalgraphs voor de passthrough- en randmaterialen gebruiken dezelfde Material Function die we hebben gemaakt om een cirkelvormige rand te genereren met wat animatie om het dynamischer te maken.



Conclusie
Mixed Reality is een opwindende manier om unieke ervaringen te creëren die de echte en virtuele wereld mengen. Passthrough Materialen maken de blend echt dynamisch, waardoor nieuwe mogelijkheden worden geopend om geweldige ervaringen te creëren.
Wij bij Immerstory zijn enthousiast om onze klanten te ondersteunen met hun immersieve ervaringen, en kijken ernaar uit om binnenkort meer verkenning voortgang te delen.
Welke immersieve ervaring zou je graag willen zien? Laat het ons weten!
Aanvullende bronnen
Documentatie voor de MetaXR plugin, specifiek de Mixed Reality Utility Kit die voor deze demo werd gebruikt, is te vinden hier
Geluideffecten in de demo-app zijn gelukkig afkomstig van Sonniss GameAudioGDC
