Den 8: Jak používat okluzi ke skrytí objektů pomocí AR Foundation v Unity. - Návody pro AR

V tomto tutoriálu se naučíme, jak pomocí okluze skrýt objekty za objekty a zdmi reálného světa, abychom mohli vytvořit realističtější zážitek v AR. K dosažení tohoto cíle použijeme nadaci AR v Unity.

Toto je součást 30denního sprintu, kde se snažíme publikovat 30 projektů za 30 dní, to znamená budování úplných projektů od nuly. Znovu zkontrolujte kód, zapište výukový program a poté jej zaúčtujte. Pokud existují překlepy, dejte nám vědět a doufám, že se vám tento tutoriál a projekt líbí.

V předchozích článcích jsme se dozvěděli o AR Foundation a principech AR. Také jsme se naučili a vytvořili sledovatelné předměty, jako je detekce letadel a umístili objekty na detekované letadla.

Z toho článku, pokud jste si toho všimli, kostky, které jsme umístili na letadla, vypadaly a cítily se skutečně, když na otevřeném prostoru. Realismus se však brzy rozpadl, když bylo v prostředí mnoho objektů a geometrie.

Co můžeme udělat, aby bylo realističtější, aby se naše virtuální objekty prolínaly se skutečným světem?

Okluze

Okluze je proces skrytí jednoho objektu za druhým. Například ve virtuálním světě zeď skrývá vše, co je za ní. Z pohledu kamery jsou výpočty prováděny po pixelech a zkoumány v celé scéně. A ty objekty, které nemusí být nakresleny nebo vykresleny na pohled, jsou vyloučeny nebo utraceny. Zde si můžete přečíst více o různých typech technik okluze používaných v jednotě zde.

Jak to uplatníme v AR?

Používáme Shadery, shadery jsou skripty, které provádějí matematické výpočty a drží algoritmy pro každý pixel, který má být vykreslen do pohledu. Závisí na materiálních a světelných vlastnostech objektu, na který se aplikuje.

Vytvoříme a použijeme shader na náš Plane objekt. V tomto shaderu zapíšeme do Z-Bufferu, který ukládá polohu z každého pixelu, který pak rozhodne, jak bude vykreslování probíhat na základě hodnoty tohoto pixelu.

Když aplikujeme tento shader na naše letadlo. Jakýkoli objekt, který je za sebou, bude mít nižší hodnotu Z-Buffer, a proto nebude vykreslen. Skryje tak naše virtuální objekty za detekovanou rovinou. Například stůl nebo zeď.

Vytvoříme aplikaci, abychom to demonstrovali v tomto článku.

Takto bude vypadat konečný výsledek.

Začínáme

Předpoklady

  1. Jednota 2019.2.18f1.
  2. Základní porozumění programování.
  3. Předchozí článek o založení AR Foundation a sledování letadel odtud.

Stáhněte si zdrojový kód

Vytvoření Shaderu

Toto je práce pro Android i iOS, protože shader je nezávislý na platformě.

Jakmile jste postupovali podle předchozího článku, začněme vytvořením shaderu skriptu.

V okně projektu vytvořte novou složku nazvanou „Shaders“ a uvnitř ní klepněte pravým tlačítkem -> Create -> Shader -> Shader Standard Surface. Pro náš účel upravíme a upravíme.

Přejmenujte jej na „PlaneOcclusionShader“.

Poklepejte na shader a otevře se v aplikaci Visual Studio. Odstraňte vše ve skriptu a nahraďte jej následujícím skriptem

Shader "Custom / PlaneOcclusionShader" {SubShader {Tags {"RenderType" = "Opaque"} Tags {"Queue" = "Geometry-1"} ZWrite On ZTest LEqual ColorMask 0 Pass {CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata {float4 vertex: POSITION; }; struct v2f {float4 vertex: SV_POSITION; }; v2f vert (appdata v) {v2f o; o.vertex = UnityObjectToClipPos (v.vertex); návrat o; } fixed4 frag (v2f i): SV_Target {return fixed4 (0.0, 0.0, 0.0, 0.0); } ENDCG}}}

Uložte to a vraťte se k jednotě. Náš shader je nyní připraven.

Vytvoření materiálu

Nyní vytvoříme nový materiál a přiřaďte mu tento shader. Poté bude materiál přiřazen k našemu panelovému panelovému panelu.

Vytvořte složku s názvem Materiály v pohledu projektu a uvnitř něj, klikněte pravým tlačítkem myši -> Vytvořit -> Materiál.

Přejmenujte jej na PlaneOcclusionMat

Vyberte materiál a v okně Inspector vyhledejte rozbalovací nabídku shaderu a zvolte -> Vlastní -> PlaneOcclusionShader,

Nyní přejděte na panelový panel ve složce Prefabs a v jeho okně Inspector, v rámci komponenty Mesh Renderer nastavte vlastnost size size na 2.

Přiřaďte materiál PlaneOcclusionMat k poli prvku 1 vlastnosti Materiály.

A je to. Letadlo má nyní vlastnost okluze a skryje jakýkoli virtuální objekt, který je za ním.

Roviny budou ve výchozím stavu viditelné díky prvnímu materiálu - prvek 0 má přiřazený materiál ladicí roviny. Pokud nechcete, aby byly roviny viditelné, jednoduše odstraňte první prvek 0.

Nyní můžete aplikaci sestavit do svého zařízení a vyzkoušet ji.

Ponechte prosím jakoukoli zpětnou vazbu nebo dotazy v sekci komentářů níže!

Původně zveřejněno na adrese https://tutorialsforar.com dne 24. února 2020.