Kiire marssimine ruumis

**Kiire marssimine ruumis** ehk **ruumi kiirtejälitus** on pildipõhine ruumi visualiseerimine (ingl *image-based volume rendering technique*), mis arvutab 2D-pilte 3D-ruumilistest andmekogumitest (3D-skalaar väljadest). Kiire marssimist ruumis, mis töötleb ruumilisi andmeid, ei tohi segi ajada kiirte väljasaatmisega (ingl *ray casting*), mida kasutatakse kiirtejälituses (ingl *ray tracing*), mis töötleb pinna andmeid. Ruumilises variandis arvutamine ei peatu objekti pinnal, vaid liigub objekti sisse, kus võetakse lugemeid mööda kiirt. Erinevalt kiirtejälitusest ei loo kiirte marssimine sekundaarseid kiiri. Kui rakendus või kontekst on selge, siis mõned autorid kutsuvad seda *kiirte viskamiseks*. Kuna kiirte marssimine ei vaja täpset lahendust kiire ja objekti lõikepunkti leidmisele, on see sobilik reaalaja arvutusteks (ingl *real-time computing*) paljudes rakendustes, kus kiirtejälitus on liiga aeglane.

## Klassifikatsioon
Kiire ruumis marssimise meetodi saab otse tuletada visualiseerimisvõrrandist (ingl *rendering equation*). Sellega saab saavutada kõrge kvaliteediga visualiseeringuid. Kiire marssimist ruumis klassifitseeritakse pildipõhise ruumi visualiseermis tehnikana, kuna arvutused lähtuvad väljund pildist, mitte ruumilisest sisend andmetest, mida kasutatakse objekti põhiste visualiseermise tehnikatega.

## Peamine algoritm

Oma algelises vormis, kiire ruumis marssimise algoritm koosneb neljast sammust:
# **Kiirte väljasaatmine.** Iga lõpp-pildi piksli kohta visatakse kiir läbi ruumi. Selle sammu juures on kasulik arvesse võtta, et ruum on puudutatud ja ümbritsetud *piiravas primitiivis*, mingi lihtne geomeetriline objekt — tavaliselt risttahukas — mida kasutatakse kiire ja ruumi algus- ja lõpp-punktide leidmiseks.
# **Diskreetimine.** Mööda seda kiire osa, mis asub ruumi sees, valitakse võrdkaugsed *diskreetimispunktid* või *lugemid*. Üldiselt ruum ei joondu kiirega ja seega lugemid asuvad vokselite (*voxel*) vahel. Sellepärast on vajalik interpoleerida lugemite väärtused ümbritsevatest vokselitest (tavaliselt kasutades trilineaarset interpoleerimist).
# **Varjutamine.** Iga diskreetimispunkti kohta, teisendus funktsioon otsib välja materjali RGBA värvi väärtuse ja arvutatakse gradient valgustus väärtustest. Gradient väljendab ruumis olevate kohalike pindade orientatsiooni. Lugemid *varjutatakse* (värvitakse ja valgustatakse) võttes arvesse nende pindadade orientatsiooni ja stseeni valgusallika asukohta.
# **Kompositsioon.** Pärast iga diskreetimispunkti varjutamist, võetakse kõik kiire peal asuvad punktid kokku ning saadakse töödeldava piksli lõplik värvi väärtus. Kompositsioon tuletatakse otse visualiseerimis võrrandist ning on sarnane atsetaatplaatide sujutamisele õhuprojektoris. See võib töötada *tagant-ettepoole*, arvutus algab vaatajast kõige kaugemast lugemist ning lõppeb vaatajale kõige lähima lugemiga. See töövoog tagab, et teiste objektide või marssitava objekti poolt peidetud ruumi osad ei mõjuta piksli värvi. Eest-tahapoole järjekord võib olla arvutuslikult tõhuslikum, sest kiire energia langeb, kui ta liigub kaamerast eemale ning iga järgnev sämpel panustab tulemusele väheneb. Seega saab kasutada agressiivsemaid optimeeringuid (näiteks tõstes kaugust lugemite vahel).

## Viited

## Välislingid
* Acceleration Techniques for GPU-based Volume Rendering (J. Krüger, R. Westermann, IEEE Visualization 2003)
* Volumetric Clouds
* Volumetric Rendering: Raymarching
* Creating a Volumetric Ray Marcher