Developedia
Developedia
A Render Pipeline-ok

A Render Pipeline-ok

Azt, hogy az adott virtuális világból miként lesz pixelgrafikus kép azt a render pipeline (magyarul néha csővezeték) határozza meg. Ez egy összetett erősen párhuzamosított algoritmus ami általában több elkülöníthető lépésből épül fel. Ezért is nevezzük, pipeline-nak vagy csővezetéknek, mert az adatok “végigcsorognak” ezen a folyamaton, ami végén egy pixelgrafikus képet kapunk.

icon
Rendering / Renderelés / Képszintézis

Azt a folyamatot, amikor egy számítógépes modellről vagy jelenetről egy virtuális kamera pixelgrafikus vagy más néven rasztergrafikus képet készít, renderelésnek vagy képszintézisnek nevezzük.

Ha a képeket folytonosan meg is jelenítjük gyors egymásutánban, akár egy filmet, valós idejű vagy “real-time” renderelésről beszélünk.

image

A következőkben a raszterizációs renderelés pipeline-ját vizsgáljuk meg. Egyéb 3D-s render technikákról itt olvashatsz: Renderelési stratégiákRenderelési stratégiák

A raszterizációs renderelés folyamata

A pipeline felbontható szeparált lépésekre. Minden lépésnek van egy megfelelő típusú bemenete, ezen a bemeneten végez valami műveletet és kiad magából egy módosított adatot. A legelső lépés bemenet a játék világ információi lesznek és a végső kiment pedig a képernyőn megjelenített kép.

Ezen lépések nagy része a modern renderpipeline-okban manipulálható, programozható a fejlesztő igényei szerint. Ezeket a kiegészítő programokat, amik a renderelés közben a videokártyán, vagy más néven GPU-n futnak le shader-eknek nevezzük.

A renderelés folyamata legtöbbször a következő lépésekre bontható:

A. Culling (selejtezés)

A látható objektumok összeválogatása a nem megjelenítendő modellek “kiselejtezésével”. Ezen lépésben szükséges számítások nagy részét még a processzor végzi el.

  • Frustum culling: Azon objektumok összeválogatása, amik a kamera látóterén belül vannak.
  • Occlusion culling: Egy újabb szűrés, ami a más modellek által kitakart objektumokat selejtezi ki.

B. Renderelés (Képszintézis)

Ez a magja a render pipeline-nak. Ez dönti el, hogy a megjelenítendő objektumok mi módon lesznek kirajzolva. Ez a folyamat is felbontható kisebb lépésekre:

  1. Camera transformation - Kamera transzformáció
  2. A térbeli modellek áttranszformálása kameratérbe

    Ezen folyamat során a tér modellek és azok minden vertexe a kamera koordinátarendszerébe kerül áttranszformálásra. Ez a koordinátarendszer különbözik a 3D-s tértől, amiben dolgozunk. Helyette az X és Y koordináták az fogják meghatározni, hogy egy adott pont a képernyő melyik pontján fog megjelenni a vízszintes és a függőleges tengely mentén. A Z koordinátát pedig a kamerától való távolság határozza majd meg.

  3. Vertex shading
  4. A fejlesztő által is írható program lefutása, ami fényelési, textúrázási és egyéb információkat számol ki minden egyes vertexhez.

  5. Triangle Assembly - Háromszögesítés
  6. A vertexekből 3 háromszögeket állít össze.

  7. Tesselation & Geometry shading - Tesszalláció és a geometriai módosítása
  8. Opcionális lépés, ami a háromszögeket felbontja kisebbekre vagy egy shader programmal módosítja őket.

  9. Rasteriastion & Cropping - Raszterizáció és vágás
  10. A pixelek és hozzá szükséges adatok létrehozása a hároszögekből. A képrnyőn kívül eső pixeleket eldobjuk.

  11. Fragment (pixel) shading
  12. A fejlesztő által is írható program lefutása, ami az egyes pixelek színét állapítja meg a vertex információk, textúrák és egyéb elérhető információk alapján.

  13. Testing & Culling - Tesztelés és keverés
  14. Tesztelés esetén eldobjuk objektumok azon pixeleit, amiket kamerához közelebbi pixelek eltakarnak. Ha átlátszó materiálok is szerepelnek a képen akkor a pixeleket nem feltétlenül eldobjuk, hanem keverjük egymással.

C. Post Processing (Utólagos képfeldolgozás)

A renderelés utáni rasztergrafikus kép pixel szintű módosítása. Ezt a műveletet a post-processing shader program végzi. Ezen a ponton már nem egyedileg lépegetünk végig az objektumokon, csupán a lerenderelt képet manipuláljuk ahhoz hasonlóan, ahogy azt egy képszerkesztő szoftverben tehetnénk. Bővebben.: Prost Processing (Hamarosan)Prost Processing (Hamarosan)

A pipeline több ponton erősen párhozamosítható. Például különböző vertexek vagy pixelek feldolgozása futhat egymás mellett is. Ezért is a renderelés számításának nagy része a videokártyán fog futni, ami egy erősen párhuzamos számítóeszköz, ellentétben a processzorral.

A raszterizáció hátránya

Mint azt a Renderelési stratégiákRenderelési stratégiák leckében tárgyaltuk, a raszterizációval elvesztünk olyan fizikai jelenségeket, mint árnyékok, tükröződés, fénytörés, fényvérzés, és valószerű ambiens árnyalás.

Mivel mindezek nélkül nehezen lehet elképzelni realisztikus látványt, ha a valósághűség a célunk elmés szoftveres trükkökkel vissza kell “csalni” az említett jelenségeket a raszterizációs munkafolyamatba. Hogy ez miként zajlik, azzal későbbi fejezetek foglalkoznak:

Árnyékok mélyebben (Hamarosan)Árnyékok mélyebben (Hamarosan), Fény és tükröződés Probe-ok (Hamarosan)Fény és tükröződés Probe-ok (Hamarosan), Sütött fények (Hamarosan)Sütött fények (Hamarosan)

Unity Pipeline-ok

Különböző Pipeline-ok különböző grafikai funkciókat nyújtanak különböző minőségben és számítási igénnyel.

A Unity játékmotorban létezik többféle render pipeline. Ezek közül a fejlesztők kiválaszthatják sőt felprogramozhatják a játékaik megjelenítéséhez a legmegfelelőbbet. Ez a megoldás egy elég komoly innováció. A Unity az első engine, ami ilyen szintű befolyásolást enged a renderejéhez.

A Unity legrégibb és alapértelmezett render pipeline-ja a Core Render Pipeline, amely biztosítja az olyan alapvető megjelenítési funkciókat, mint például árnyalások, világítás és árnyékok. A Core render pipeline funkcionalitása is eléggé kiterjedt, de valamennyire korlátozott, ezért vezette be a Unity-a a Scriptable Render Pipeline-okat, röviden SRP.

Az SRP funkció lehetővé teszi, hogy mindenki magának készítsen Render Pipeline-t Unity-ben, ez azonban igen nagy szakértelmet és erőfeszítést jelent ezért eléggé ritka. Általában a három Unity által biztosított pipeline közül választanak a fejlesztők:

  • Core / Legacy Render Pipeline
  • Universal Render Pipeline: URP
  • High Definition Render Pipeline: HDRP

Core vs. URP vs. HDRP

A fejlesztők a Core Pipeline-hoz képest több kontrollt és szabadságot kapnak a másik két lehetőséggel, a URP-vel és a HDRP-vel. Ezen renderer-ek újabbak, szélesebb funkcionalitásúak, optimalizáltabbak és lehetővé teszik a magasabb minőségű képmegjelenítést.

Mikor használd a Core Render Pipelinet?

Ha kezdő vagy és most tanulod a játék-fejelsztést.

Kevesebb funkciója van mint az URP-nek és a HDRP-nek, de cserébe jóval egyszerűbb.

Mikor használd az Universal Render Pipeline-t?

Ha van némi tapasztalatod a Unity-vel akkor az URP legyen mindig az alapértelmezett választásod főleg ha a játék vizuálisan nem kifejezetten realisztikus.

Ha kiadásra tervezed a játékot akkor érdemes lehet URP-t használni. Ha nem vagy biztos ebben, ne aggódj. Kezdheted a projekt Core-ban és később is lehet váltani másik Pipeline-ra közt.

Mikor használd az High Definition Render Pipeline-t?

Csak akkor állj neki a HDRP projektnek, ha már tapasztalt fejlesztőnek érzed magad és nagy grafikai számításigényű, 3D játékot készítetek.

Ha 2D játékot készítesz, NE használj HDRP-t.

Nagy grafikai számításigényű, 3D játékokhoz használatos a HDRP.

Kizárólag PC-re, PlayStation-re és X-BOX platformokra.

Ha mobil, vagy a Nintendo Switch konzolokra szeretnél kiadni a játékot NE használj HDRP-t.

Valószínűleg nem érdemes egyedül nekiállnod egy HDRP projektnek, legalább legyetek 4-5-en a csapatban.

Core
URP
HDRP
Kezdő-barát
✅
🚫
🚫
WebGL, Android, iOS, Nintendo Switch Build
✅
✅
🚫
Fejlettebb 2D renderelés: (Fények, árnyékok, …)
🚫
✅
🚫
VFX Graph (A Particle System fejlettebb verziója)
🚫
✅
✅
Shader Batching (Teljesítmény javító eljárás)
🚫
✅
✅
Beépített Post process effektek
🚫
✅
✅
Fejlettebb 3D renderelés: (Ray Tracing, Path Tracing, …)
🚫
🚫
✅

A döntéshozásról bővebben itt olvashatsz:

Choosing and configuring a render pipeline and lighting solution

This guide is an updated version of the following Unity blog post: Spotlight Team Best Practices: Setting up the Lighting Pipeline - Pierre Yves Donzallaz. First, let's go through the definitions of several important graphics rendering terms that you will encounter frequently in this article.

docs.unity3d.com

Choosing and configuring a render pipeline and lighting solution
Logo

Főoldal

Blog

Elmélet

3D Studio

Adatvédelmi nyilatkozat

GY.I.K.

Házirend

Szerző: Marosi Csaba / marosi.csaba@3d-studio.hu

DiscordGitHubLinkedIn