Árnyékolás

A Henri Gouraud által 1971-ben kifejlesztett Gouraud-árnyékolás az egyik első 3D-s számítógépes grafikához kifejlesztett árnyékolási technika volt.

A számítógépes grafikában az árnyékolás a 3D jelenetben lévő objektum/felület/poligon színének megváltoztatására utal, olyan dolgok alapján, mint (de nem kizárólagosan) a felület fényszöge a fényekhez képest, a fényektől való távolsága, a kamerához viszonyított szöge és az anyagtulajdonságok (pl.pl. kétirányú reflexiós eloszlási függvény) a fotórealisztikus hatás elérése érdekében.

Az árnyékolást a renderelési folyamat során egy árnyékolónak nevezett program végzi.

A felület fényforráshoz viszonyított szöge Szerkesztés

Az árnyékolás a felület fényforráshoz vagy fényforrásokhoz viszonyított szöge alapján módosítja a 3D-modell arcainak színét.

A lenti első képen a doboz arcai renderelve vannak, de mind ugyanolyan színűek. Az élvonalakat itt is rendereltük, ami megkönnyíti a kép áttekinthetőségét.

A második kép ugyanezt a modellt ábrázolja élvonalak nélkül. Nehéz megmondani, hol végződik a doboz egyik oldala, és hol kezdődik a következő.

A harmadik képen engedélyezve van az árnyékolás, ami valósághűbbé teszi a képet, és könnyebben láthatóvá teszi, hogy melyik oldal melyik.

Renderelt kép egy dobozról. Ezen a képen nincsenek árnyékolások az oldalakon, ehelyett élvonalakkal (más néven drótkeret) választja el az oldalakat, és egy merészebb körvonallal választja el az objektumot a háttértől.

Ez ugyanez a kép a vonalak eltávolításával; a belső geometriát csak az objektum sziluettjének pontjai jelzik.

Ez ugyanez az objektum sima árnyékolással renderelve. A 3 látható elülső oldal színét a fényforrásokkal bezárt (a normálvektor által meghatározott) szögük alapján állítottuk be.

A megvilágítás típusaiSzerkesztés

Sugárkövetőt használó árnyékoló effektek egy reflektorból

Mikor egy árnyékoló kiszámítja az eredmény színét, egy világítási modellt használ a felület meghatározott pontjain visszaverődő fény mennyiségének meghatározásához. A különböző világítási modellek különböző árnyékolási technikákkal kombinálhatók – míg a világítás megmondja, hogy mennyi fény tükröződik, az árnyékolás azt határozza meg, hogy ezt az információt hogyan használja fel a végeredmény kiszámításához. Lehet például, hogy csak bizonyos pontokon számítja ki a megvilágítást, a többit pedig interpolációval tölti ki. Az árnyékoló dönthet arról is, hogy hány fényforrást vesz figyelembe stb.

Környezeti megvilágításSzerkesztés

A környezeti fényforrás egy minden irányú, fix intenzitású és színű fényforrást jelent, amely a jelenet minden objektumára egyformán hat (mindenütt jelen van). A renderelés során a jelenet összes objektuma a megadott intenzitással és színnel világít. Ezt a típusú fényforrást elsősorban arra használják, hogy a jelenetben lévő különböző objektumok alapvetően láthatóvá váljanak. Ez a legegyszerűbben megvalósítható világítási típus, és azt modellezi, hogy a fény sokszor szóródhat vagy tükröződhet, ezáltal egységes hatást keltve.

A környezeti világítás kombinálható a környezeti okklúzióval, hogy megjelenítse, mennyire vannak kitéve a jelenet egyes pontjai, ami befolyásolja a környezeti fény mennyiségét, amelyet vissza tudnak tükrözni. Ez szórt, nem irányított megvilágítást eredményez az egész jelenetben, amely nem vet egyértelmű árnyékokat, de a zárt és védett területek elsötétülnek. Az eredmény vizuálisan általában egy borult naphoz hasonlít.

Point lightingEdit

A fény egyetlen pontból ered, és minden irányban kifelé terjed.

SpotlightingEdit

Spotlightot modellez: a fény egyetlen pontból ered, és kúp alakban terjed kifelé.

Area lightingEdit

A fény egyetlen sík kis területéről ered. (Valósághűbb modell, mint a pontszerű fényforrás.)

Irányított világításSzerkesztés

Az irányított fényforrás egy adott irányból egyformán világít meg minden objektumot, mint egy végtelen méretű és végtelen távolságra lévő területi fény; van árnyékolás, de nem lehet távolságcsökkenés. Ez olyan, mint a nap.

Distance falloffEdit

Két OpenGL-lel renderelt doboz. (Figyeljük meg, hogy a két elülső felület színe azonos, annak ellenére, hogy az egyik távolabb van.)

Az ARRIS CAD segítségével renderelt modell, amely távolságcsökkenést valósít meg, hogy a szemhez közelebb eső felületek világosabbak legyenek.

elméletileg két párhuzamos felületet gyakorlatilag ugyanannyira világít meg egy távoli, nem blokkolt fényforrás, például a Nap. A távolság esés hatása olyan képeket eredményez, amelyek több árnyékot tartalmaznak, és így a közeli fényforrások esetében reálisak lennének.

A bal oldali kép nem használja a távolság esést. Vegye észre, hogy a két doboz előlapjának színei pontosan megegyeznek. Úgy tűnhet, hogy a két felület közvetlen átfedésénél van egy kis különbség, de ez egy optikai csalódás, amelyet a két felület találkozásának helye alatt lévő függőleges él okoz.

A jobb oldali képen a távolságfüggést használjuk. Vegye észre, hogy a közelebbi doboz elülső oldala világosabb, mint a hátsó doboz elülső oldala. A padló is világosból sötétbe megy át, ahogy távolodik.

SzámításSzerkesztés

A távolsági esés többféleképpen is kiszámítható:

  • A távolság hatványa – A fényforrástól x távolságra lévő adott pont esetében a kapott fényerősség 1/xn arányos.
    • Nincs (n = 0) – A kapott fényerősség a pont és a fényforrás közötti távolságtól függetlenül azonos.
    • Lineáris (n = 1) – A fényforrástól x távolságra lévő adott pont esetében a kapott fényintenzitás 1/x arányos.
    • Kvadratikus (n = 2) – Így csökken a fényintenzitás a valóságban, ha a fénynek szabad útja van (azaz nincs köd vagy bármi más a levegőben, ami elnyeli vagy szórja a fényt). A fényforrástól x távolságra lévő adott pont esetében a kapott fényintenzitás 1/x2 arányos.
  • Minden más matematikai függvény is használható.

Árnyékolási technikákSzerkesztés

Az árnyékolás során gyakran van szükség a felületi normálisra a világítás kiszámításához. A normálisok előre kiszámíthatók és tárolhatók a modell minden egyes vertexére.

Lapos árnyékolásSzerkesztés

Egy texturált kocka lapos árnyékolása

Itt, a megvilágítás csak egyszer kerül kiértékelésre minden egyes poligonra (általában a poligon első csúcsára, de néha háromszögháló esetén a középpontra is), a poligon felületi normálisa alapján és azon a feltételezésen alapulva, hogy minden poligon lapos. A kiszámított színt az egész poligonra használjuk, így a sarkok élesnek tűnnek. Ezt általában akkor használják, ha a fejlettebb árnyékolási technikák túl számításigényesek. A tükrös fénypontok lapos árnyékolással rosszul ábrázolódnak: Ha a reprezentatív csúcson történetesen nagy fényes komponens van, akkor ez a fényesség egyenletesen kirajzolódik az egész arcra. Ha a tükrös fénypont nem a reprezentatív pontra esik, akkor az teljesen kimarad. Következésképpen a tükörreflexiós komponens általában nem szerepel a lapos árnyékolás számításában.

Sima árnyékolásSzerkesztés

A lapos árnyékolással ellentétben, ahol a színek a poligonok határainál diszkontinuusan változnak, a sima árnyékolásnál a szín pixelről pixelre változik, ami két szomszédos poligon között sima színátmenetet eredményez. Általában először a csúcspontokban számítjuk ki az értékeket, majd bilineáris interpolációt alkalmazunk a poligonok csúcsai közötti pixelek értékeinek kiszámításához. A sima árnyékolás típusai közé tartozik a Gouraud-árnyékolás és a Phong-árnyékolás.

Gouraud-árnyékolásSzerkesztés
  1. Meghatározza a normált minden egyes poligon-csúcson.
  2. Alkalmazzon egy megvilágítási modellt minden egyes csúcsra a fényintenzitás kiszámításához a csúcsnormálból.
  3. Interpolálja a csúcsintenzitásokat bilineáris interpolációval a felületi poligonon.

Problémák:

  • Mivel a megvilágítás csak a csúcsokon kerül kiszámításra, a pontatlanságok (különösen a nagy háromszögeken a tükrös kiemeléseknél) túlságosan nyilvánvalóvá válhatnak.
  • A szomszédos poligonokkal való T-csatlakozások néha vizuális anomáliákat eredményezhetnek. Általában a T-összeköttetéseket kerülni kell.
Phong árnyékolásSzerkesztés

A Phong árnyékolás hasonló a Gouraud árnyékoláshoz, kivéve, hogy a fényintenzitások interpolálása helyett a normálisok interpolálódnak a csúcsok között, és a megvilágítás pixelenként kerül kiértékelésre. Így a tükröződő fénypontok sokkal pontosabban kerülnek kiszámításra, mint a Gouraud árnyékolási modellben.

  1. Kiszámít egy N normált a sokszög minden egyes csúcsához.
  2. Bilineáris interpolációval kiszámít egy Ni normált minden egyes pixelhez. (A normált minden alkalommal újranormalizálni kell.)
  3. Alkalmazzon egy megvilágítási modellt minden egyes pixelre, hogy a Ni-ből kiszámítsa a fényintenzitást.

Halasztott árnyékolásSzerkesztés

A halasztott árnyékolás egy olyan árnyékolási technika, amellyel az árnyékolás kiszámítása két menetben történő rendereléssel későbbi szakaszra halasztódik, ami potenciálisan növeli a teljesítményt, mivel nem dobja el a drágán árnyékolt pixeleket. Az első menet csak a felületi paramétereket rögzíti (például a mélység, a normálisok és az anyagparaméterek), a második menet elvégzi a tényleges árnyékolást és kiszámítja a végső színeket.:884

Egyéb megközelítésekEdit

A Gouraud-árnyékolás és a Phong-árnyékolás is megvalósítható bilineáris interpolációval. Bishop és Weimer a megvilágítási modell alkalmazásából és a normálisok bilineáris interpolációjából eredő kifejezés Taylor-soros kiterjesztését javasolta. Ezért másodfokú polinom interpolációt használtak. Ezt a fajta bikvadratikus interpolációt Barrera és társai továbbfejlesztették, ahol egy másodrendű polinomot használtak a Phong reflexiós modell diffúz fényének interpolálásához, és egy másik másodrendű polinomot a tükrös fényhez.

Szférikus lineáris interpolációt (Slerp) használt Kuij és Blake mind a sokszög feletti normális, mind a fényforrás irányába mutató vektor kiszámításához. Hasonló megközelítést javasolt Hast is, amely a normálisok kvaternerion-interpolációját használja, azzal az előnnyel, hogy a normális mindig egységnyi hosszúságú lesz, és elkerülhető a számításigényes normalizálás.

Flat vs. smooth shadingEdit

Flat Smooth
Uses the same color for every pixel in a face – usually the color of the first vertex Smooth shading uses linear interpolation of either colors or normals between vertices
Edges appear more pronounced than they would on a real object because in reality almost all edges are somewhat round The edges disappear with this technique
Same color for any point of the face Each point of the face has its own color
Individual faces are visualized Visualize underlying surface
Not suitable for smooth objects Suitable for any objects
Less computationally expensive More computationally expensive