Članki » Grafične tehnologije » DirectX 8: 3D teksture, multi-sampling in point sprites
DirectX 8: 3D teksture, multi-sampling in point sprites
- Marko Dolenc ::
V prejšnjem članku smo si ogledali pixel in vertex shaderje, ki v svet grafike za osebne računalnike prinašajo programabilnost. V tem članku pa si bomo ogledali še dve veliki novosti v DirectX 8.0 - podpora za 3D teksture in multi-sampling. Če bodo vertex in pixel shaderje cenili predvsem programerji, pa bodo 3D teksture in multi-sampling prava paša za oči.
Opomba by luni: kliknite na slike za večje verzije... se splača.
3D teksture
Do sedaj smo v grafiki za osebne računalnike srečevali le 2D teksture (profesionalne grafične kartice imajo podporo za 3D teksture že kar nekaj časa). 2D tekstura je, povsem enostavno povedano - slika. Ta slika se nato prilepi na trikotnike in tako precej polepšamo izgled modelov. 3D teksture (imenovane tudi volumetrične teksture) pa vsebujejo še globino. 3D teksture tako niso nič drugega kot zaporedje enako velikih 2D slik. 3D teksture precej spominjajo na voxle (primer: igra Delta Force), vendar se razlikujejo v tehničnih detajlih (voxli so lahko kjer koli v prostoru, medtem ko morajo biti texli na 3D teksturi v fiksni mreži, ...). Mnogi se ob voxlih samo primejo za glavo in spomnijo na Delta Force in kockasto pokrajino in tako se veselje konča. Vendar so voxli lahko mnogo mnogo lepši, kot jih predstavi Delta Force. 3D teksture pa so v bistvu nekakšen vmesni korak med klasičnimi poligoni in voxli.
3D teksture imajo en zelo velik minus. So namreč zelo požrešne za video pomnilnik. 3D tekstura z dimenzijami 256x256x256 v 32 bitni barvni globini zasede kar 64MB pomnilnika, kar pa je že ves razpoložljiv pomnilnik na praktično vseh grafičnih karticah za osebne računalnike. In zaradi te velikosti bo potrebno razviti zelo dobre metode za kompresiranje teh tekstur.
Primer uporabe 3D tekstur za zahtevna modeliranja. Namesto, da bi lik sestavili iz trikovnikov naredimo 3D teksturo.
Kaj lahko počnemo s 3D teksturami:
- simuliramo oblake, in ostale atmosferske učinke (megla, ...)
- pomoč pri per-pixel lighting-u (bolj realistično senčenje)
- razno razni volumetrični učinki: volumetrična in lokalna megla, volumetrične luči (svetlobni snopi)
- enostaven prikaz zapletenih objektov
Multi-sampling
Multi-sampling je še ena zadeva, ki se iz profesionalnih grafičnih postaj seli v osebne računalnike. Multi-sampling nam omogoča izdelavo učinkov, ki bi jih brez njega težko dosegli. Trenutno kar nekaj kartic že delno podpira multi-sampling (npr. Voodoo 5, GeForce, Radeon). Vendar je ta podpora omejena izključno na glajenje robov (FSAA - Full Scene Antialiasing) in ne omogoča označevanje posameznih vzorcev (samplov).
Kako deluje multi-sampling:
Ko vse štiri vzorce združimo skupaj dobimo takole sliko (dvojiška maska te slike bi bila 1111, saj so v tej sliki vključeni vsi vzorci).
Primer učinka motion-blur. V osnovi izrisujemo samo besedilo "Test". V vsak vzorec najprej izrišemo besedilo "Test" tja, kjer se besedilo-objekt trenutno nahaja. Ta del slike je na vseh štirih slikah enak, in povzroči, da dobimo povsem jasen vtis, kje se objekt v resnici nahaja. Zraven tega pa v vsak vzorec izrišemo še objekt za nekaj korakov nazaj. Ko vse štiri vzorce združimo v eno samo končno sliko (ki se tudi izriše na zaslonu) dobimo občutek, da se objekt giblje in tudi kam se giblje.
Če pogledamo nekoliko natančneje, je vsaka pika posameznega vzorca doprinesla 1/4 končne slike. In v praksi se za vsako piko na končni sliki uporabi povprečna vrednost te pike v vseh štirih vzorcih.
Dvojiške maske so zapisane v oklepajih zato, ker z njimi označujemo, na kateri vzorec hočemo risati. Lahko namreč rišemo tudi na več vzorcev hkrati (če postavimo recimo masko 0101). Osnovna maska, ki jo postavi DirectX 8.0 je 232 -1, in označuje renderiranje na vse razpoložljive vzorce (maksimalno 32 vzorcev). Tukaj pa tiči tudi omejitev prej omenjenih grafičnih kartic, te kartice sicer podpirajo multi-sampling, vendar ne omogočajo spreminjanje te maske. Zato z multi-samplingom trenutno še ne moremo narediti "motion-blur"-a in podobnih stvari (lahko pa jih vsaj nekaj naredimo ročno). Seveda je tudi pri multi-samplingu potrebno omeniti, da je precej požrešen za pomnilnik grafične kartice. V primeru, da renderiramo štiri vzorce, moramo imeti vse (back buffer in z buffer) početverjeno. Edino velikost front bufferja (kar je vidno na monitorju) je konstantna oziroma odvisna le od resulicije.
Point sprites:
Sprite poznamo predvsem iz 2D grafike. V 2D grafiki predstavlja sprite 2D slikico, ki se jih izrisuje na neko ozadje brez kakšnih zapletenih operacij. Primere si lahko ogledamo v praktično vseh 2D igrah (npr. Age of Empires: za vsako enoto so posnete vse možne slikice, kako se enota giblje. Taka slikica se imenuje sprite). DirectX 8.0 pa prinaša point sprite v 3D grafiko. Zakaj je tokrat spredaj point? DirectX-u sedaj samo podamo točko (point), kjer se sprite nahaja, 2D teksturo (sprite) in velikost sprita.
S to tehniko lahko naredimo precej zanimive stvari. Izdelamo lahko recimo plamen na baklah, ogenj, vodomet, eksplozije,... Skratka vse, kar je povezano z delci.
Lahko pa point sprite uporabimo tudi kot še eno tehniko za renderiranje voxlov, kar zelo lepo demonstrira 3D Mark 2001. Sicer pa za tako vrsto renderiranja potrebujemo zelo veliko zelo majhnih spritov, vendar lahko dosežemo zelo veliko.
Point spriti imajo podobno kot multi-sampling delno podporo že na današnjih grafičnih karticah. Kartice GeForce (razen GeForce 3, ki ima že strojno podporo) s pomočjo procesorja iz ene točke in velikosti izračunajo dva trikotnika in ju potem izrišejo. ATI Radeon trenutno tega še sploh ne podpira, vendar se bo podpora podobna GeForce-evi pojavila v kakšnih novih gonilnikih.
Zaključek:
Tako prišli smo čez vse "vidne" novosti predstavljene v DirectX 8.0. Seveda je sprememb v novi verziji še kar nekaj, med njimi so precej opazne tudi izboljšave v komponentah DirectSound in DirectPlay, vendar je ravno grafika tista, kar se takoj opazi. Pri vsem tem, pa moramo vedeti tudi to, da je sam DirectX 8.0 tudi s programerskega stališča zelo nov, in predvsem precej poenostavljen. Marsikateri programer si bo tako želel, da bi bile tudi ostale komponente zasnovane po vzoru Direct3D.
Slike 3D tekstur so pobrane iz nekaterih prezentacij o realističnem modeliranju oblakov s konference SIGGRAPH 2000 (prikaz 3D teksture za kompleksno modeliranje pa je iz enega od ATI-jevih demo programov), prikaz multi samplinga je v celoti moje delo (prvi del ročno v Paint Shop Pro-ju, drugi del pa je dejansko renderiranje v Direct3D preko referenčnega načina). Demonstracija point sprite-ov pa je ena izmed demo aplikacij v DirectX 8.0 SDK.
Čudežno popotovanje skozi grafični cevovod
- Marko Dolenc ::
Trenutno očitno živimo v obdobju, ko razni *PU-ji (Processing Unit) rastejo kot gobe po dežju. Nedolgo tega je tržne police ugledal prvi pospeševalnik fizikalnih izračunov (PPU ali Physic Processing Unit) PhysX podjetja Ageia. In ker to očitno še vedno ni dovolj, ...
Čudežno popotovanje skozi grafični cevovod II
- Marko Dolenc ::
V prvem delu smo si ogledali strukturo sodobne grafične kartice. Med drugim smo omenili shaderje, ki so zaradi svoje programabilnosti, nekakšno srce in duša sodobnih GPU-jev. Različni shaderji so odgovorni za različne strukture v grafiki (v Direct3D 10 so to oglišča, ...
DirectX 9.0 - Izboljšave knjižnice
- Marko Dolenc ::
V prejšnjem delu smo si ogledali novosti in izboljšave, ki so doletele programabilnost grafičnih kartic, torej osenčevalnike točk ter oglišč. Seveda pa novi pixel in vertex shaderji niso edina novost v DirectX 9.0. Novosti je še kar nekaj, vendar je res, da je ...
DirectX 9.0 - Osnove programiranja
- Marko Dolenc ::
V prejšnjih dveh člankih smo si ogledali vse novosti, ki jih je Microsoft uvedel v DirectX. Ker verjamem, da mnogi med vami niso ravno programerji, vas pa vseeno zanima, kako izgleda življenje na drugi strani, sem se odločil, da vam to vsaj malo približam. V tem članku bo ...
Novosti DirectXa 9 - 1. del
- Marko Dolenc ::
No pa smo vendarle dočakali novo, dolgo pričakovano, različico knjižnice DirectX, ki jo je zlobni Microsoft, bolj ali manj skrbno skrival pred radovednimi očmi javnosti. V približno enaki tajnosti sta nastala tudi ta dva članka, ki vam bosta, vsaj upam tako, uspela ...