Devlog: Passthrough Materialen voor Mixed Reality

Devlog: Passthrough Materialen voor Mixed Reality

Thijs ReusThijs Reus
·29 augustus 2025·9 min. leestijd
Let op: dit bericht is automatisch vertaald.

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) en 1.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.

Geen passthrough op de ronde gele mesh
Geen passthrough op de ronde gele mesh
50% passthrough op de ronde gele mesh
50% passthrough op de ronde gele mesh
Volledige passthrough op de ronde gele mesh
Volledige passthrough op de ronde 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.

Eenvoudig Passthrough Materiaal graph
Eenvoudig Passthrough Materiaal graph

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?

Geen passthrough op enig deel van de kubus
Geen passthrough op enig deel van de kubus

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.

Passthrough op de volledige kubus
Passthrough op de volledige kubus

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).

Vertex Color Passthrough Materiaal graph
Vertex Color Passthrough Materiaal graph

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).

Passthrough op delen van de kubus met onzichtbare randen
Passthrough op delen van de kubus met onzichtbare randen

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.

  • Material is ingesteld op het kubusmateriaal
  • Overlay Material is 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.

Passthrough op delen van de kubus met zichtbare randen
Passthrough op delen van de kubus met zichtbare randen

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:

  • Material is ingesteld op het randmateriaal, dat een vloeiende blauw/witte rand rendert tussen de virtuele en echte wereld
  • Overlay Material is 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.

Video Voorvertoning

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.

Blueprint om het vlak te spawnen wanneer het projectiel een gegenereerd oppervlak raakt
Blueprint om het vlak te spawnen wanneer het projectiel een gegenereerd oppervlak raakt

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.

Blueprint om het vlak te krimpen en te vernietigen na een tijdje
Blueprint om het vlak te krimpen en te vernietigen na een tijdje

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).

Overlappende meerdere vlakken werkt niet goed met Translucent Blend Mode - de binnenste randen zijn volledig zichtbaar
Overlappende meerdere vlakken werkt niet goed met Translucent Blend Mode - de binnenste randen zijn volledig zichtbaar
Overlappende meerdere vlakken werkt goed met AlphaHoldout Blend Mode - de rand is alleen aan de buitenkant van alle vlakken
Overlappende meerdere vlakken werkt goed met AlphaHoldout Blend Mode - de rand is alleen aan de buitenkant van alle vlakken

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.

Dynamische Rand Passthrough Materiaal graph
Dynamische Rand Passthrough Materiaal graph
Dynamische Rand Materiaal graph
Dynamische Rand Materiaal graph
Dynamische Rand Materiaal Function graph
Dynamische Rand Materiaal Function graph

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

Meer van de blog