VolumePro 500
Velká (červnová) voxelová revoluce!
Zobrazení objemu 256 x 256 x 256 vzorků v reálném čase, 30 snímků za sekundu!
Objemové zobrazování přechází z pracovních stanic na platformu osobních počítačů!
Prohlédněte si svůj mozek na PC doma či v kanceláři!
Tak nějak vypadají – nebo by mohly vypadat – nápisy na reklamních letácích a nadpisy recenzí v odborných časopisech. Podívejme se spolu na zařízení, které to vše způsobilo.
Jde o grafický akcelerátor pro osobní počítače nazvaný VolumePro 500, který v technickém vybavení implementuje algoritmus starý téměř 20 let – téměř tak starý jako rastrová grafika. Doposud se však používal velmi málo, neboť neexistovala optimální kombinace vstupních zařízení vytvářejících objemová data, programů, které je zpracovávají, a technického vybavení, na němž zpracování probíhá. Přesněji řečeno: programy již existovaly a prostorová snímací zařízení také (geofyzikální či atmosférické měřicí sondy, počítačová tomografie – CT, magnetická rezonance – MR, konfokální mikroskopie, …). Co scházelo, bylo zařízení, které by zvládlo v reálném čase zobrazovat objemové scény a jehož cena by přitom byla srovnatelná s cenami kvalitních klasických grafických akcelerátorů, používaných v osobních počítačích. 
Jak se liší objemová a povrchová data? A jak onen výše zmíněný algoritmus pracuje?

Povrchové versus objemové zobrazování
V současnosti běžně používaný způsob zobrazování pracuje převážně s povrchy. Zobrazujeme-li například kouli či kapotu automobilu, soustřeďujeme se na vytvoření iluze, že vidíme takový předmět ve skutečnosti. Protože je vnímání povrchů a zejména hran pro lidské oko nejpodstatnější, napodobujeme působení světla na povrchu těles. Způsobu zobrazování odpovídá i v současnosti nejrozšířenější reprezentace dat v zobrazovacích akcelerátorech povrchovými elementy. 
Pokud je cílem zkoumání vnitřních struktur těles, jako například nedestruktivní zjišťování kvality materiálu, lékařské vyšetření mozku pacienta nebo objektů, které žádné povrchy nemají (jsou beztvaré jako mlha, mrak či plamen), zobrazování extrahovaného povrchu jednoduše nestačí. Vytvořením povrchu totiž zároveň ztrácíme informace o tom, co je uvnitř, jaká je vnitřní struktura objektu. Je nutno použít kvalitativně odlišný přístup, uchovávat informace o celém objemu a objemová data též celá zobrazovat.

Metoda vrhání paprsku (ray-casting)
Jak název napovídá, pracujeme s paprsky, které jsou vrhány z oka pozorovatele a procházejí plochou obrazovky a zkoumaným objemem. Až potud jde o princip využívaný i při vysílání primárních paprsků v metodě sledování paprsku (ray-tracing), včetně možnosti paralelního a rovnoběžného způsobu promítání a principu sčítání příspěvků při výpočtu výsledného jasu pixelu. Podstatně se ale liší chování paprsku ve “scéně” a způsob výpočtu příspěvků. 
U metody sledování paprsku letí primární paprsek prostorem tak dlouho, dokud nenarazí na povrch některého z těles, která dohromady tvoří zobrazovanou scénu. V místě průsečíku se vypočítá světelný příspěvek okolí a příspěvek světelných zdrojů, určený sklonem plochy a použitým osvětlovacím modelem. Další příspěvek je od sekundárních paprsků, které vznikly odrazem a lomem. Okolní objekty mohou na dané místo vrhat stín, paprsek může být v závislosti na dráze uražené volným prostorem utlumován. Výpočty se tedy provádějí pouze v místech, kde paprsek protnul povrch tělesa.
U metody vrhání paprsku, jejíž varianta je použita v případě VolumePro, je scéna tvořena objemem dat, obvykle pravoúhlou mřížkou hodnot reprezentujících vzorky nějaké fyzikální veličiny, například pohltivosti rentgenového záření různými typy tkání lidského těla u počítačové tomografie. Pro základní element datové mřížky se vžil název voxel, jako obdoba dvojrozměrného pixelu. Metoda se snaží všechny informace v mřížce využít, a proto při zobrazování započítává příspěvky z celého objemu. Paprsek je během průletu objemem vzorkován v pravidelných krocích srovnatelných s velikostí voxelů. V každém kroku se vypočítá příspěvek tohoto kousku objemu k výsledné barvě pixelu na obrazovce. Zároveň se akumuluje hodnota neprůhlednosti. Barva a neprůhlednost voxelu se určují explicitně segmentací nebo se odvozují z hodnoty vzorku a z hodnot v jeho nejbližším okolí. Dosáhne-li neprůhlednost hodnoty jedna nebo prolétne-li paprsek celým objemem, je výpočet ukončen a akumulovaná barva zobrazena. Pracuje se tedy pouze s primárními paprsky a sčítají se všechny příspěvky podél jejich dráhy (zeslabené průletem objemem). 
Podstatným zjednodušením, používaným nejen pro úsporu značného množství výpočtů, ale i k jednodušší interpretaci výsledného obrazu, je zanedbávání zakrývání světelných zdrojů ostatními voxely. Světlo ze světelných zdrojů se dostává ke všem voxelům stejně a každý paprsek se počítá nezávisle na ostatních. Proto lze metodu snadno paralelizovat. 
Kromě režimu sčítání všech příspěvků lze s mezivýsledky naložit i jinak, například zobrazit maximální (MIP-Maximal Intensity Projection) či minimální hodnotu (MinIP) příspěvku podél dráhy paprsku, lze započítávat jen vzorky, jejichž souřadnice padnou do zadaného intervalu souřadnic (ořezávání), lze zdůraznit místa s prudkou změnou hodnoty vzorků (velkým gradientem), která odpovídají hranicím struktur objektu. Metoda vrhání paprsku tedy “vidí dovnitř” těles reprezentovaných obvykle pravoúhlou mřížkou hodnot.
Mezi aplikační oblasti patří zejména lékařství (radiologie, radiační terapie), náhled (preview) 3D efektů do filmů (voda, mraky, oheň), výzkum ložisek ropy, modelování turbulence vzduchu, zobrazení plamenů v tryskovém motoru, ale i inspekce balíků na poštách a letištích apod.

O vrhání paprsku podrobněji
Při vysílání paprsků objemem je jen velmi malá pravděpodobnost, že se vzorek podél paprsku přesně kryje s některým voxelem. Mnohem častěji padne do prostoru mezi voxely (voxel je chápán jako bod v trojrozměrném prostoru, předpokládá se, že se hodnoty mezi voxely mění spojitě, a ještě k tomu lineárně). Proto se používá trilineární interpolace z hodnot osmi nejbližších voxelů. Při výpočtu jediného vzorku je tedy nutno náhodně vybírat osm sousedních hodnot voxelů z celého zobrazovaného objemu. Pro interpolovanou hodnotu vzorku je dále nutno stanovit barvu a neprůhlednost. V nejjednodušším případě by bylo možné zjištěné hodnotě fyzikální veličiny jednoduše přiřadit barvu a neprůhlednost z vyhledávací tabulky.
Kvalitnějšího zobrazování přechodů mezi vnitřními strukturami v objemu dosáhneme, zahrneme-li vliv gradientu v každém místě. Vektor gradientu použijeme jako odhad normály myšlené plošky v objemu a příspěvky barvy od jednotlivých světelných zdrojů spočítáme dle Phongova osvětlovacího modelu. Rozhraní mezi vnitřními strukturami v objemu zdůrazníme modulováním neprůhlednosti velikostí vektoru gradientu. K výpočtům gradientů je ale nutné získat ještě šestici interpolovaných hodnot v okolí právě zpracovávaného vzorku. Na první pohled je zřejmé, jak je metoda náročná na množství výpočtů a na počet náhodných přístupů do zobrazeného objemu. Proto je vhodné objem předzpracovat a voxely uspořádat tak, abychom k nim měli snadnější přístup, nebo použít specializovaný akcelerátor. 

Algoritmus implementovaný ve VolumePro
VolumePro využívá tzv. shear warp faktorizaci (SWF). Pro zkoumaný objem je nalezena ta stěna, která je nejblíže pozorovateli (ploše obrazovky). Na tuto stěnu, dále označovanou jako základní rovina (base plane), se promítne celý objem. Tím vznikne zkreslený obraz, protože tato rovina je vůči obrazové rovině natočena (viz obrázek). Zkreslený obraz na základní rovině je warpovací transformací převeden na obraz v obrazové rovině.
Díky SWF se voxely mohou zpracovávat v rovinách (řezech) rovnoběžných se základní rovinou, čímž se značně zjednodušuje přístup do paměti. Řezné roviny jsou vůči sobě posunuty tak, aby voxely, kterými paprsky procházejí, byly za sebou (shear). Výsledný algoritmus zpracovává jednotlivé voxely postupně tak, jak jsou v objemu uloženy (po řezných rovinách, v rámci rovin po řádcích nazývaných svazky – beams). Na závěr se metodou warpingu upraví vypočítaný zkreslený obraz. 
Při výpočtu interpolované hodnoty nám stačí zpracovávat čtyři sousední voxely z aktuální roviny a čtyři z dříve zpracované sousední roviny. Interpolované hodnoty opět ukládáme do rovin. Při výpočtu gradientu jsou zapotřebí hodnoty tří interpolovaných rovin za sebou – aktuální, předchozí a následující.
Při výpočtu intenzity světla v daném místě potřebujeme znát interpolovanou hodnotu a vektor gradientu. Pro interpolovanou hodnotu nalezneme hodnotu barvy a neprůhlednosti v předpočítané vyhledávací tabulce. Příspěvek intenzity od všech světel je pro různé normály předpočítán ve druhé vyhledávací tabulce, v níž se hledá dle gradientu. 
Příspěvky intenzity a neprůhlednosti podél paprsku vznikají postupně při zpracovávání jednotlivých rovin a o jejich sčítání se stará sestavovací jednotka.
Transformací výsledného zkresleného obrazu do obrazové roviny se karta nezabývá. Provedeme ji nejlépe v klasickém grafickém akcelerátoru jako transformaci textury.
Na první pohled je vidět, že to nejsložitější na celé metodě je kromě nalezení vhodného způsobu přístupu do voxelové paměti též optimální rozvržení vyrovnávacích pamětí pro mezivýsledky jednotlivých operací. Že nejde o jednoduchou věc, to je zřejmé i z toho, že od zakoupení patentových práv firmou Mitsubishi v roce 1996 trval vývoj tohoto zařízení do uvedení na trh v červnu roku 1999 plné tři roky!!! Za tu dobu vzniklo z původního patentu 35 dalších patentů.

Technické parametry v kostce
Grafický akcelerátor VolumePro je PCI karta do PC nebo stanice Sun, která implementuje objektově orientované vrhání paprsku (ray-casting) v rovnoběžné projekci. Umožňuje dosáhnout zobrazování objemu 2563 dvanáctibitových voxelů v reálném čase s obnovovací frekvencí 30 snímků za sekundu, 500 milionů vzorků osvětlených Phongovým osvětlovacím modelem za sekundu.
Obsahuje 160 MB rychlé paměti SDRAM, z toho 128 MB na uložení až 512 x 512 x 256 datových voxelů, 16 MB na mezivýsledky a 16 MB na výstupní obrázek. Všechny vzorky podél paprsků počítá trilineární interpolací z nejbližších sousedů, odhad gradientu symetrickou diferencí v každém bodě podél paprsku. Umožňuje interaktivní změnu parametrů zobrazení: jde o směr pohledu, hardwarové ořezávání šesti rovinami rovnoběžnými se stěnami objemu, řezání obecnou rovinou, selektivní obnovování objemu, čárový nebo rovinný kurzor, neomezené množství směrových světelných zdrojů, HW supersampling ve směru osy Z, SW v rovině XY atd…
Čip vp500, použitý v kartě VolumePro, zpracovává proud voxelů paralelně ve čtyřech zobrazovacích proudech. Každý proud se skládá z interpolační jednotky, jednotky pro výpočet gradientů, z klasifikační a osvětlovací jednotky, generující barvu a neprůhlednost vzorku a vyhodnocující Phongův osvětlovací model, a ze sestavovací jednotky, akumulující příspěvky barvy a neprůhlednosti na dráze paprsků do výsledného obrazu v základní rovině. Zároveň obsahuje množství vyrovnávacích pamětí (FIFO), sloužících k uchovávání mezivýsledků.
Čtveřice proudů pracuje vždy na sousedních voxelech v řezu a předává si lokální informace přímo mezi sebou. Při posunu na další čtveřici se propojí výsledek čtvrtého proudu se vstupem proudu prvního. Na krajích objemu se mezivýsledky čtvrtého proudu ukládají do vnější paměti mezivýsledků. Z ní se bere vstup první jednotky při zpracování dalšího řezu. 
Čip vp500 využívá technologie 0,35 mikrometru a na ploše 186 mm2 obsahuje 800 000 hradel a 2,2 megabitu vnitřní paměti typu SRAM.Taktovací frekvence je 133 MHz, napájení 3,3V nebo 5V. 

Co VolumePro neumí
VolumePro neumí perspektivní promítání. Vzhledem k uvažovaným aplikacím to však nepovažuji za podstatné, navíc by mělo být implementováno v dalších verzích zařízení.
Zobrazovat lze pouze pravoúhlé mřížky a mřížky zkosené v ose Z, což je dáno principem zpracovávání voxelů.
Není možně používat segmentované objemy dat, tj. takové objemy, u nichž explicitně označíme příslušnost voxelu k nějaké struktuře (např. mozek). Tento fakt je pro některé aplikace značně omezující. 
Karta neumožňuje současné zobrazování objemových a polygonálních objektů. To chybí například při simulaci operací či při plánování ozařování.
Velikost objemu 512 x 512 x 256 může být nedostatečná vzhledem k rozlišením současných zařízení. Programové vybavení karty dokáže velké objemy zobrazovat po částech, tím se však úměrně zpomaluje rychlost zobrazování, která je hlavní devízou karty. Deska zpracovávající 5123 voxelů by měla být dodávána začátkem příštího roku.

Aplikace VolumePro
Rychlé zobrazování objemů patrně nebude ještě několik let masově používáno – na to, než se hardware zdokonalí a začne se používat u her, si musíme ještě nějaký čas počkat. Pro většinu současných aplikací trojrozměrné objekty tvořené povrchovou reprezentací vyhovují nejen rychlostí zobrazování, ale i prostorovými nároky na uložení. Oblastí, které po objemovém zobrazování přímo volají, je dnes už celá řada. Přirozeně sem patří obory, kde trojrozměrná objemová data vznikají – 3D seizmické studie, vizualizace počasí, nedestruktivní testování výrobků, rychlé digitální prototypy v CAD a také zobrazování v medicíně: konfokální mikroskopie, počítačová tomografie, magnetická rezonance. Uvedeným oblastem odpovídá struktura firem, které začlenily podporu pro kartu VolumePro do svých výrobků. Např. firma AVS (Advanced Visual Systems Inc.) do vizualizačního systému AVS/Express a do aplikací v lékařství, seizmologii a životním prostředí, firma ISG Visual Data Processing do vývojového prostředí Imaging Application Platform (IAP) pro vytváření lékařských aplikací a firma Kitware do produktu VTK (Visualization Toolkit).
Petr Felkel