Útvonalkövetés

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2013. június 14-én áttekintett verziótól ; az ellenőrzéshez 31 szerkesztés szükséges .

Az útvonalkövetés egy olyan  megjelenítési technika a számítógépes grafikában , amely a fény fizikai viselkedését igyekszik a valósághoz a lehető legközelebb szimulálni. A Path Tracing a hagyományos sugárkövetés fejlett speciális esete , amelynek algoritmusa egy virtuális kamera sugarait követi nyomon a téren keresztül; a sugár addig "visszapattan" a tárgyakról, amíg teljesen fel nem szívódik vagy szétszóródik. Az útvonalkövetési módszerrel előállított képek minősége általában jobb, mint a más renderelési módszerekkel előállított képek minősége, de az útvonalkövetés sokkal számításigényesebb.  

Az útvonalkövetés a legegyszerűbb, fizikailag legpontosabb és leglassabb megjelenítési módszer. Az útvonalkövetés természetesen számos olyan optikai hatást reprodukál, amelyek más renderelési technikákkal nehezen érhetők el, vagy akár elérhetetlenek: árnyékolás , mélységélesség , elmosódás a mozgásból , maró hatás , környezeti elzáródás és közvetett megvilágítás . Ezeknek az optikai effektusoknak az útkövetéssel való megvalósítása sokkal egyszerűbb, mint más technikákkal.   

Pontossága, valamint a közelítések és feltételezések hiánya ( angolul  unbiased ) alapján az útvonalkövetést képek generálására használják, amelyeket aztán összehasonlító mintaként használnak fel más algoritmusok renderelési minőségének értékelésére. Ahhoz, hogy az útkövetéssel előállított jó minőségű képeket kapjunk, nagyon sok sugarat kell nyomon követni; ellenkező esetben a grafikai műtermékek zaj formájában jelennek meg .

Történelem

A leképezési egyenletet és annak számítógépes grafikára való alkalmazását James  Kajiya vezette be 1986-ban [1] . Ez a bemutató volt az útvonalkövető algoritmus első leírása. Az év későbbi szakaszában Lafortune számos fejlesztést javasolt  az algoritmushoz, beleértve a kétirányú útvonalkövetést [2] .

Eric Veach és Leonidas J. [ 3 ] 1997-ben vezette be a Metropolis könnyű szállításátzavarása a teljesítmény növelése érdekében összetett jelenetekben .  

Egy idő után a GPU -k olyan fejlettségi szintet értek el, hogy érdeklődést keltettek irántuk az útvonalkövetési számítások átvitele tekintetében. Tim Purcell volt az  első, aki 2002-ben egy globális megvilágítási algoritmust vezetett be, amely GPU-n futott [4] . 2009-ben Vladimir Koilazov bemutatta a GPU-n futó útvonalkövető algoritmus első kereskedelmi megvalósítását [5] . Ezt elősegítette a GPGPU -központú programozási eszközök, például a CUDA és az OpenCL kifejlődése .

Leírás

A való világban a fény sok kis részét bocsátják ki a fényforrások, és egyenes vonalakban, sugarakként terjednek a közegen keresztül és tárgyról tárgyra, megváltoztatva színüket és intenzitását. Ez az „út” addig folytatódik, amíg a sugarakat tárgyak elnyelik, beleértve az olyan tárgyakat, mint az emberi szem vagy a kamera. Ezt a sugárterjedési folyamatot útkövetéssel szimulálják, azzal a különbséggel, hogy a sugarakat fordított irányban, a virtuális kamerától (megfigyelőtől) a fényforrásig követik. Ennek oka az a tény, hogy a fényforrásból érkező sugaraknak csak nagyon kis része éri a virtuális kamera lencséjét, így a sugarak túlnyomó többségének kiszámítása nem befolyásolja a virtuális kamera által kapott képet. bármilyen módon.

Ezt a viselkedést matematikailag leírja a megjelenítési egyenlet . Ez az egyenlet megpróbálja megoldani az útvonalkövetési algoritmusokat.

Az útvonalkövetés nem egyszerű sugárkövetés korlátlan sugárvisszaverődéssel (azaz rekurzív mélységgel). A hagyományos sugárkövetésben a fényt abban a pillanatban számítják ki, amikor a sugár közvetlenül metszi a diffúz felületet. Az útkövetés során véletlenszerűen egy új sugarat generálnak az objektum féltekén belül, majd nyomon követik, amíg az nem metszi egy fényforrást, ami megtörténhet, de előfordulhat, hogy nem. Útkövetés esetén a sugár útja sok diffúz felülettel metszheti egymást, mielőtt metszi a fényforrást.

Az útvonalkövetést megvalósító pszeudokód így nézhet ki:

Color TracePath ( sugár , számlálási mélység ) { _ if ( mélység >= MaxMélység ) { vissza Fekete ; // Eleget ugrált. } sugár . FindNearestObject (); if ( ray . hitSomething == false ) { vissza Fekete ; // Semmit sem találtak el. } Anyag anyag = sugár . thingHit -> anyag ; színkibocsátás = anyag . _ kibocsátás ; // Válasszon egy véletlenszerű irányt innen, és folytassa. Ray newRay ; newRay . eredet = sugár . pointWhereObjWasHit ; // Ez NEM koszinusz-súlyozott eloszlás! newRay . irány = RandomUnitVectorInHemisphereOf ( ray . normalWhereObjWasHit ); // A newRay valószínűsége const float p = 1 / ( 2 * M_PI ); // Számítsa ki ennek a sugárnak a BRDF értékét (Lamberti reflexiót feltételezve) float cos_theta = DotProduct ( newRay . direction , ray . normalWhereObjWasHit ); Szín BRDF = anyag . reflektancia / M_PI ; // Visszavert fényforrások rekurzív követése. Színes bejövő = TracePath ( newRay , mélység + 1 ); // Alkalmazza itt a megjelenítési egyenletet. visszatérési kibocsátás + ( BRDF * bejövő * cos_theta / p ); } void Render ( Image finalImage , count numSamples ) { foreach ( pixel a finalImage - ben ) { foreach ( i in numSamples ) { Ray r = kamera . generRay ( pixel ); pixel . szín += TracePath ( r , 0 ); } pixel . szín /= számMinták ; //Átlagos minták. } }

A fenti példában, ha minden zárt térfelület kisugárzik és visszaverődik (0,5, 0,5, 0,5), akkor a kép minden pixele fehér lenne .

Kétirányú sugárkövetés

Két független módszerrel mintát vehet egy pont integráljából:

  •  Fényforrásokból származó sugarak felvétele és ösvények létrehozása a jelenetben. Az utat a sugár véletlenszámú lépései-pattanásai szakítják meg. A fény ezután az eredményül kapott kép kivetített pixelére irányul. A renderelési módszer során több millió útvonal jön létre, és a közreműködő útvonalak renderelési eredményei a képen tárolódnak.
  • Sugárgyűjtés  a felszín egy pontjáról. A sugár a kép pixelein keresztül áramlik, és addig ugrál a jelenet körül, amíg az útjában álló fényforrással nem találkozik. A fényforrás fénye ezután a képpontok irányába kerül. Az útvonal létrehozásának folyamatát "mintavételezésnek" nevezik. Egy felületi pont általában 800 (legfeljebb 3 ezer) mintából érkezik. A végső képet nem a minták egyszerű összegzésével, hanem aritmetikai műveletek segítségével fordítjuk le.

A kétirányú sugárkövetés egyetlen algoritmusban egyesíti a fényképezést  és  a gyűjtést  , és ez gyorsabb képkonvergenciát eredményez (gyorsabb és kevesebb zaj). Ezt a 2 útvonalgenerálási módszert egymástól függetlenül nyomon követjük, majd a lőút elejét a nyerőút végéhez kapcsoljuk. A fény csillapítását a sugár minden egyes visszaverődésénél figyelembe veszi és képpontokban tárolja. Ez a technika első pillantásra paradox módon lassúnak tűnik, de ez annak a ténynek köszönhető, hogy egyszerre 2 utat vesz figyelembe. A gyakorlatban éppen ellenkezőleg, a kép további konvergenciája kompenzálja azokat a lassulásokat, amelyek az újabb és újabb sugarak kibocsátásának szükségessége miatt keletkeznek.

A képek konvergenciájának (konvergenciájának, közeledésének) felgyorsítása érdekében a kétirányú algoritmusok mindkét irányban nyomon követik az utakat. Előrefelé a sugarakat a fényforrásból addig követik, amíg olyan gyengék nem lesznek, hogy nem láthatók, vagy amíg el nem érik egy virtuális kamera lencséjét. A virtuális kamerából az ellenkező irányban, azaz a szokásos hagyományos irányban a sugarakat addig követjük, amíg a fényforrással ütköznek, vagy amíg visszaverődésük száma meg nem halad egy bizonyos határt. Ez a megközelítés általában olyan képet eredményez, amely sokkal gyorsabban konvergál, mintha csak egy irányt használnánk.

Veach és Guibas pontosabb leírást adtak a kétirányú útkövetésről [3] :

Ezek a módszerek két részútvonalat generálnak: az egyik a fényforrástól, a másik pedig a virtuális kamera lencséjétől indul. Ezután a <metódusok> figyelembe veszik az összes olyan útvonalat, amelyet úgy kapnak meg, hogy egy részútvonal minden előtagját összefűzik egy másik részútvonal minden utótagjával. Ez különböző fontos mintavételi technikák családjához vezet, amelyeket azután kombinálnak az eltérések minimalizálása érdekében.

Eredeti szöveg  (angol)[ showelrejt]

Ezek a módszerek előállítanak egy részútvonalat a fényforrástól, egy másikat pedig a lencsétől, majd figyelembe veszik az összes olyan utat, amelyet az egyik részút minden előtagjának a másik utótagjával való összekapcsolásával kapunk. Ez az útvonalak különböző fontosságú mintavételi technikáihoz vezet, amelyeket aztán kombinálnak a variancia minimalizálása érdekében.

Teljesítmény

Az útvonalkövető folyamatosan mintát vesz ( angolul  mintavétel - mintavétel ) a kép képpontjaiból. A kép csak akkor válik megkülönböztethetővé, ha pixelenként több mintát vesz, legfeljebb 100 mintát pixelenként. A normál képekhez és a digitális zaj elfogadható szintre csökkentéséhez általában körülbelül 5000 mintát vesznek. A esetekben a minták száma sokkal nagyobb lesz A renderelési folyamat órákig vagy napokig tarthat a jelenet összetettségétől, valamint a hardver és szoftver teljesítményétől függően. A jelenlegi GPU -megvalósítások 1 és 10 Ms/s közötti sebességet ígérnek, ami lehetővé teszi egy viszonylag zajtalan, elfogadható minőségű kép létrehozását másodpercek vagy percek alatt. A digitális zaj különös problémát jelent az animáció számára , mivel általában nemkívánatos "szemcsés" hatást kelt a képen.

Metropolis könnyűtranszport kismértékben módosítja a korábban bevezetett sikeres utakat, és először a fontosabb mintákat állítja elő. Ez csökkentheti a képzajt és kevesebb mintát.

Meglehetősen nehéz igazságosan értékelni egy renderelő teljesítményszintjét. Az egyik megközelítés a minták másodpercenkénti számlálása, a másik pedig a nyomon követhető és a képhez hozzáadható utak számát másodpercenként. Ezeknek a módszereknek az eredménye jelenetenként jelentősen eltér, és az „útmélységtől” függ, vagyis attól, hogy a sugár hányszor verődik vissza az objektumról, mielőtt leállítaná. A teljesítménymérés eredménye nagymértékben függ a használt hardvertől is. Végül az egyik megjelenítő sok rossz minőségű mintát állíthat elő, míg egy másik gyorsabban rendereli a végső képet kevesebb jobb minőségű minta használatával.

Szórási eloszlásfüggvények

A felületek visszaverő képességét – a visszavert fény mennyiségét, irányát és színét – kétsugaras reflexiós függvény segítségével modellezzük . Az átvitt fény (az objektumon áthaladó fény) megfelelője a kétirányú felületi reflexiós szórás függvénye ( eng.  Bidirectional scattering elosztó függvény ). Az útvonalkövető teljes mértékben ki tudja használni az összetett, gondosan modellezett vagy kiszámított eloszlási függvényeket, amelyek meghatározzák egy objektum megjelenését ("anyag", "textúra" és "árnyékolás" CG-ben).

Jegyzetek

  1. Kajiya, JT, The rendering equation Archivált : 2012. október 6., a Wayback Machine , Proceedings of the 13th Years Conference on Computer grafika és interaktív technikák , ACM, 1986
  2. Lafortune, E, Mathematical Models and Monte Carlo Algorithms for Physically Based Rendering Archiválva : 2010. április 24. a Wayback Machine -nél (PhD értekezés), 1996
  3. 1 2 Veach, E. és Guibas, LJ Metropolis light transport Archivált : 2017. május 16. a Wayback Machine -nél . In SIGGRAPH'97 (1997. augusztus), pp. 65–76.
  4. Purcell, TJ; Bak, én; Mark, W; és Hanrahan, P, "Ray Tracing on Programmable Graphics Hardware", Proc. SIGGRAPH 2002 , 703 - 712. Lásd még Purcell, T, Ray tracing on a stream processor Archivált : 2017. október 10., a Wayback Machine (PhD értekezés), 2004
  5. Vray demó Archivált : 2016. május 2. a Wayback Machine -nél ; További példák az Octane Render, az Arion és a Luxrender.

Külső linkek