Objektum vázlatának kiválasztása ue4-ben
Ebben a cikkben megmutatom, miként hozhat létre kontúrkijelzőt az UE4-ben. A fejlesztők jellemzően két különböző módon használatosak erre:
- Kétszer adja át a rácsot. Ebben az esetben először egy rács (normál anyaggal), majd a második (kissé kibővített skála és emissziós anyag)
- A kontúrfelismerés algoritmusa használatos. Ez utófeldolgozási anyagként definiálható
Alapvető lépések
A kontúrnak az utófeldolgozó anyag formájában történő körvonalazásának hatása több lépcsőben valósul meg:
- Készítsen utófeldolgozó anyagot, amely kiemeli az objektumok körvonalát, ha a Render Custom Depth opció engedélyezve van.
- Adja hozzá ezt az utófeldolgozási anyagot a Blendables listához, amely a Post Process Volume blokk paramétereiben található.
- A Render Custom Depth paraméter engedélyezése minden olyan csontváz és statikus rács esetében, amelyre kontúrot szeretne kiválasztani
Mélység térkép
Az UE4-ben van egy kiváló funkció, amely lehetővé teszi, hogy az egyes rácsokat külön mélységi térképre állítsa, majd felhasználja az anyagokban. Ez a mélységi térkép tartalmazza az egyes képpontok távolságát - mind a világ koordinátáiban, mind a fényképezőgép területén. Egy tipikus mélységi térkép így néz ki:
A mélységi térképünk hasonlónak tűnik, kivéve, hogy csak olyan objektumokat jelenít meg, amelyeken a "Render Custom Depth" beállítás be van kapcsolva:
Anyag létrehozása
A legnehezebb szakasz. Olyan anyagot fogunk létrehozni, amelyben a Sobel üzemeltetője megvalósul, egy egyedi mélységi térképgel összeomlik. Más szavakkal, egy kontúrérzékelő szűrőt alkalmazunk az egyéni mélységi térképre.
Kezdjük a konvolúciós algoritmussal. Ez meglehetősen kifinomult matematikán alapul, de valójában mindent néhány egyszerű lépésre enged
- Vegyük a P pontot
- A pixel P-hez közel 8 pixeles pixelét veszünk
- Szorozzuk össze az értékeket P és PN képpontokban a konvolúciós kernelben lévő értékekkel (azaz 9-szeresítéssel)
- Adja hozzá a kapott értékeket
- Az eredmény visszaadása
Először mélységi térképet kell használnia. Ez egyszerűen elvégezhető: add hozzá a Scene Texture csomópontot, és csatlakoztassa az Emissive Color anyaghoz. Ezenkívül állítsa be a Scene Texture ID beállítást CustomDepth értékre.
Most használja a szomszédos képpontokat. Ehhez a Scene Texture csomópont UV-paramétereit használhatja. De a probléma az, hogy az UV-paraméterek textúra koordinátákon dolgoznak, azaz. értékének felhasználásával „0.0” (a bal felső sarkában a textúra) a „1.1” (a jobb alsó sarkában a textúra). Ezért kell, hogy a fordított érték a magassága és szélessége a textúra, szorozzuk őket az eltolás a központtól a cella (-1, -1), majd hozzáadjuk az UV-koordinátái az aktuális képpont. Tehát kiválasztjuk a bal felső pixelt.
Most ugyanezt tesszük a fennmaradó hét szomszédos képpontnál. Ennek eredményeként az összes nyolc szomszédos képpont eltolásának kiszámítása így fog kinézni:
Tehát van egy sor UV-paraméter az összes szomszédos képpont számára, így most már használhatod az adatokat az egyéni mélységi térképből. Egy egyszerű anyagi funkciót hoztam létre: bemeneti paramétereként UV-koordinátákat kell követnie, majd visszaadja a feldolgozott képpont értékét.
Ha ezt a funkciót használja a szomszédos képpontok adatainak feldolgozásához, valójában rendelkezünk a szükséges adatokkal a körvonal felismeréséhez. Most hozzunk létre egy másik függvényt az anyaghoz, amely összekeveredik.
Tehát összegyűjtöttük az algoritmus összes darabját. Most csak a végső anyagon belül kell őket ötvözni.
A Sobel operátorban valójában két konvolúciós funkció van: függőleges és vízszintes. Valószínűleg észrevette, hogy az egyetlen különbség a konvolúciós kernel bemeneti adatai között.
Most vegyük össze ezt a két értéket.
Megjegyzés: Győződjön meg arról, hogy az anyag a tartomány Post Process, hanem a felület (ami azt jelenti, «anyag domén»; ez a paraméter, amely úgy van kialakítva, amelyre az adott anyagot kell használni). Ez megváltozhat az anyag tulajdonságaiban.
Jelenet beállítása
Most, hogy az anyag készen áll, hozzá kell adnunk a jelenet feldolgozás utáni hatások listájához. Válassza ki a "Post Process Volume" blokkot a jelenetből, és keresse meg a Blendables elemet. Adjon hozzá egy új összetevőt az Blendables listához, majd válassza ki a létrehozott anyagot a listából. Ha nem jelenik meg utófeldolgozó egység a jelenetben, akkor hozza létre. Győződjön meg róla, hogy a Post Process blokkban a Nem kötött tulajdonság értéke "true". Ellenkező esetben a játékos csak a húr hatását fogja látni, ha az a Post Process Volume-ben van.
Az eredmény ellenőrzéséhez helyezze el a rácsot a helyszínre, és kapcsolja be Render Custom Depth paraméterét.
Olyan módon állítottam fel a jelenetet, hogy a sztring hatása csak akkor jelenik meg a statikus rácson, ha a játékos a célpontra mutat. Úgy döntöttem, hogy a sablont az FPS-hez használom. Ezenkívül hozzáadtam a Trace funkciót a MyCharacter bluetooth-hoz. Ezt egy időzítő hívja, amely 0,1 másodpercenként ketyeg, és ellenőrzi, hogy a játékos a statikus rácsot néz. Ha úgy néz ki, a Render Custom Depth paraméter értéke "true". Ha a lejátszó megáll a rácson, akkor a Render Custom Depth változó értéke "false" értékre változik. Tekintse meg, hogyan működik ez mindegyik, a fájlban megtalálhatja az alábbi linket a "Letöltések" részben.
- Itt letöltheti az anyagot a kontúr kiválasztásával, melyet ennek a kézikönyvnek az alapján készített.
- Itt letölthet egy olyan projektet, amely ezt a hatást használja.
Itt olvasható az eredeti.