Hlavní stránka Hardware Grafické karty Polopatě - rendering 3D scény (a jak to přibližně funguje)
Polopatě - rendering 3D scény (a jak to přibližně funguje)
autor: Kwolek Jirka , publikováno 30.4.2007
Polopatě - rendering 3D scény (a jak to přibližně funguje)

Pokud Vám z Geometry, Pixel, Vertex shaderů, textur a jednotek ROP jde hlava kolem, nezoufejte, v následujícím bloku se pokusím (s pomocí jednoho automobilového příkladu) přiblížit, jak funguje moderní grafická karta (navíc DirectX 10).


I když to tak nevypadá, ale finální barva pixelu se určuje teprve v tomto stádiu - Pixel Shadery totiž generují pouze fragmenty obrazu tak, jak postupně zpracovávají jednotlivé elementární části obrazu. Pro pixel o určité souřadnici (například 250x320) můžeme mít hned několik různých hodnot barvy.

 Output Merger tyto hodnoty vyhodnotí a pole výsledku s nimi naloží. Provádí se zde:

  • Depth-Stencil Testing,
  • a Blending.

Přes dřívější kontroly nelze vyloučit, že Pixel Shadery nespočítaly barvu pixelu nějaké plošky, který ve výsledku na obraze nebude vůbec vidět.

Ba naopak, taková situace je docela běžná - představte si například postavu vojáka na pozadí velké textury cihlové zdi s aplikovaným efektem mapování struktury povrchu. Všechny pixely za postavou vojáka se ve výsledku nesní vůbec objevit. Za tímto účelem se často provádí Depth-Stencil Test, který má za úkol určit, jestli daný pixel bude nebo nebude vykreslen. Pokud je zkoumaný pixel blíže než jiné pixely, pak se vykreslí (a ty za ním se přepíšou), v opačném případě se pixel zahodí. Hodnota aktuální "hloubky" pixelů je zanášena do Stencil Bufferu.

Blending - zamíchat ale netřepat (jak by řekl 007 James Bond). Míchaní barev (pokud je systémem požadováno) spojuje barvy několika pixelů do barvy jediné. Typickou aplikací jsou poloprůhledné textury například plamenů, kouře, skla, odrazů, aplikace stínů... Abychom ve výsledku dostali:

Polopatě - rendering 3D scény (a jak to přibližně funguje)

Polopatě - rendering 3D scény (a jak to přibližně funguje)

Co jste se dnes naučili?

... to jistě nevím, ale mám za to (pokud jste četli pozorně), že toto schéma renderovací 3D pipeline DirectX 10 Vám už žádnou hrůza nahánět nebude.

Polopatě - rendering 3D scény (a jak to přibližně funguje)

P.S. Doufám, že Vám tento článek bude k užitku...



 
Komentáře k článku
RSS
Pouze registrovaní uživatelé mohou přidat komentář!
30.4.2007 14:31:02   88.101.228.xxx 19534
Výbornej článek!
1.5.2007 07:48:24   217.197.150.xxx 6527
Skutečně super, jen bych do úvodního obrázku dal tu lopatu a ne rýč) Autor asi nebude zahradník.
30.4.2007 14:37:49   83.240.11.xxx 3729
Jen taková poznámka:
Na předposlední straně článku jak je ten obrázek pod titulkem "displacment mapping" (kamenná zeď), tak to pravděpodobně není displacement, ale "jen" normal mapa ... právě ta rovná hrana (bez změny geometrie) tomu nasvědčuje.
Jo až bude dostupnej micro-poly displacement, to bude jiný kafe: http://209.132.69.82/zbrush/zbrush2/images/displacement/displacementphone.jpg
30.4.2007 15:00:38   62.240.183.xxx 3528
Jsem rad, ze pctuning pamatuje i na drtivou vetsinu tech, kteri se o problematiku zajimaji, ale doposud sice vedeli, jak bude vykon grafiky vypadat, kdyz se udela s poctem vertex ci pixel (...) shaderu to a to, ale co to vlastne je a jak to funguje, o tom dosud nemeli paru
30.4.2007 15:50:42   82.150.185.xxx 3228
Technickej dotaz - dokáží grafické karty vykreslit kruh? tzn. bez trojúhelníků - jen kolečko

Protože zatím ve všech hrách narážím na hranatá kola

Kolik zhruba výkonu by to ubralo?
30.4.2007 15:58:37   80.188.88.xxx 3634
Myslím, že ne. Současné principy renderingu staví na bodech a úsečkách, takže kruh se vždycky jenom dá napodobit jako mnohoúhelník.
30.4.2007 16:03:27   89.102.56.xxx 2930
Nic jako kruh neexistuje.
To je oko vnímá mnohoúhelník jako kruh. Oko snad umí rozlišit hranu od jistého malého úhlu.
30.4.2007 17:20:34   80.188.88.xxx 2726
Řekněme, že v přírodě neexistuje dokonalý kruh, ale existují objekty, které jsou oblé nebo skoro kulaté. Konkrétně pro tebe bychom tu otázku tedy mohli rozšířit: Lze vyrenderovat oblý objekt tak, aby byl opravdu oblý a nebyl to mnohostěn?
1.5.2007 07:46:56   82.209.36.xxx 2738
Nic jako kruh neexistuje ? No dobra, pujdem do extremu, dokonaly kruh neexistujem, ale nepokousejte se mi tvrdit ze loziska apod jsou mnohouhelniky.
1.5.2007 21:12:18   217.168.208.xxx 3125
molekuly, atomy (a další menší částice) jsou taky v podstatě body (vertex) a nic hmotnýho nemůže bejt dokonale oblý (například orbitál se kružnici může velmi podobat, ale bude vychylovaná a vznikne elipsa)
2.5.2007 06:26:49   194.213.204.xxx 2325
v pripade atomov je to hned jasne. Atom je podobny slnecnej sustave, avsak v mnoho pripadoch zlozitejsi. Okolo jadra obieha spusta elektronov s roznymi drahami obehu. Prave preto atom vobec nie je gulaty:-), to len pre nas je ten pohyb taky rychly, ze neregitrujeme obiehanie elektronov. Na druhu stranu, otazny je ten elektron.? Nevieme, ci jeho konzistencia je konecna.
2.5.2007 13:59:38   83.236.239.xxx 2523
Atom uz peknych par desitek let neni podobnej slunecni soustave, spis bych ho prirovnal k jogurtu :-)

Co treba difrakcni obrazec od bodovy sterbiny, je dost kulatej?
2.5.2007 06:23:35   194.213.204.xxx 2523
mno, pokial ide o loziska. Nie su to dokonale gulicky, ale ich povrch je upraveny tak, aby trenie bolo co najnizise. Podla mna existuje len jeden pekny kruh v prirode a to, ked hodite kamen do vody, to je neporovnatelne kvalitnejsi kruh bez hran a nerovnosti v porovnani s gulickou loziska. Keby ta gulicka mala priemer 10m, tak by sa ti to hned zdalo odflaknute:-)
2.5.2007 07:36:50   83.240.11.xxx 2423
Třeba kapalina s vysokou viskozitou ve stavu beztíže taky vyvtvoří dokonalou kouli (z hlediska rozlišení oka).
10.7.2007 08:23:50   85.70.186.xxx 1516
nechapu to upresneni v zavorce... ta kapalina proste tvori kouli a jedno z jakyho hlediska se na to divas, proste je to koule a hotovo..co by to taky melo bejt jinyho
30.4.2007 16:51:57   213.226.208.xxx 2927
Teoreticky ano. Existují metodiky, kdy je vykreslovaný předmět složen pouze z pixelů. Na monitoru potom nelze spatřit mnohoúhelník. Jenže je to strašný žrout výkonu, tedy dnes nepoužitelné.
30.4.2007 18:32:05   83.240.11.xxx 2727
Teoreticky ne, prakticky ano, když připadne aspoň 1 uzel (vertex) na každej 1 pixel zobrazení.
K tomu jsou různý metody, např. vykreslování HSDS nebo teselace.
1.5.2007 02:15:27   62.168.45.xxx 2626
Každý, který zná 3D rendering ví, že současný stav je otázkou mnoha (menších a větších) kompromisů. A nepatrně hranaté kolo spadá přesně do této oblasti. Takže - možné to je (dokonce několika metodami), ale většině lidí případá, že by - než dokonalá kola - raději viděli detailnější modely 3D objektů. Pozitivním faktem je, že "lepší kola" jsou jistě na to-do listu, jen ne dosud na prvním místě.
1.5.2007 09:12:41   83.240.11.xxx 2726
Což mě přivádí na myšlenku, že optimalizace herních enginů je mnohem zajímavější téma, než tohle (ale je potřeba toho už víc znát). Jenže to by musel psát někdo, kdo ty enginy skutečně programuje, protože já o tom jednou dělal prezentačku ve škole a jelikož jsem "teoretik", tak to dopadlo, jak to dopadlo :-)
Samozřejmě jednoduchý metody (cullingy, octree) jsou jednoduchý na vysvětlení ... ale když se člověk dostane k optimalizaci shaderů, tak to už laik nedává.
1.5.2007 11:03:17   86.49.75.xxx 2626
A pamatujete na prastarou hru Ecstatica? Tam byly vsechny objekty tvoreny elipsami. Vypadalo to docela zajimave. Ale to urcite nespada do otazky modernich grafickych karet :-)
1.5.2007 12:54:03   80.188.88.xxx 2629
Elipsa ale není 3D objekt... ve 2D grafice taky můžeš zadat programu nakreslit kruh a on ti ho nakreslí, ale ve 3D už to takhle nejde.
1.5.2007 14:40:32   86.49.75.xxx 2727
Bod taky neni 3D objekt, ale muze ho tvorit (tada skupina bodu). Ale abych pravdu rek, tak vubec netusim, jak to doopravdy v ty Ecstatice fungovalo, mozna elipsa opravdu nebyla na miste.
4.5.2007 04:46:07   84.242.78.xxx 2323
Jakej kruh asi tak nakreslis ve 1280*1024 ?
30.4.2007 15:57:25   82.99.140.xxx 2727
Kde by bylo možný najít to NVIDIA demo, který na tom autě ukazuje stárnutí?
30.4.2007 15:59:05   80.188.88.xxx 3028
Bude to někde na stránkách nVidie, sekce Donwloads.
1.5.2007 15:36:50   213.151.252.xxx 2525
Machine
30.4.2007 17:17:44   147.229.217.xxx 3233
Ted nam jeste sdelte kde jste cerpal, je velmi spatny zvyk neuvadet zdroje.
30.4.2007 18:34:53   194.108.132.xxx 9689
Kdyby jenom opsanej ale autor nejak nepochopil to z ceho cerpal. Radoby polopate vysvetlene ale je to blabol. Muj kamarad (zabyvajici se psanim shaderu) se tuze zasmal nad timto vtipem. Jen tak dal!
30.4.2007 20:44:25   62.245.97.xxx 2627
Zas tak spatny to neni. Zacatecnikum to pomuze a zkuseni si to stejne cely cist nebudou.

Chtel jsem vam tady napsat popis nekterych nesrovnalosti/chyb v clanku, ale vas skvely web me behem psani odlogoval a prispevek je ztracen, takze na to uz kaslu.

Ad kruh - ten se da implementovat pomoci alpha testu a pixel shaderu, je to vcelku jednoduchy a hodne rychly.
1.5.2007 02:00:42   62.168.45.xxx 3726
1. Vím že obsah není zcela přesný - ale některých zjednodušení jsem se dopustil zcela záměrně.
2. To je zajímavé, že jsem ještě podobný materiál nikde neviděl (a tolik tady máme při tom expertů)...
1.5.2007 10:08:33   147.229.217.xxx 2826
Ale ja prece nepisu, ze jste to nekde obsleh. Jen Vas upozornuju, ze byste mohl uvadet zdroje z kterych jste cerpal. Nekoho to zajima vic a taky rad vic nasel. K tem odpovedim, ktere se nabalili pod moji otazku a hani Vas clanek se nema cenu vyjadrovat. Je to pekne napsany a pro me prinosny clanek. Konecne nejaky, ktery zase zvedl uroven PCT.
1.5.2007 11:01:18   85.207.17.xxx 2928
Souhlasím, navíc člověk co se o to zajímá občas nachází i dost protichůdný údaje...
Na poslední stránce píšete: "Hodnota aktuální "hloubky" pixelů je zanášena do Stencil Bufferu". Spíš bych tam napsal do Z-bufferu.
Jinak jako principielní přiblížení článek slouží dobře :-)
1.5.2007 11:33:52   85.207.17.xxx 3025
Já jsem se zase zasmál nad tvým příspěvkem...
Jestli si myslíš, že programátoři aplikací (her) této problematice dokonale rozumí, tak to jsi na OMYLU! Ani nemáš představu, co před programátorem skrývá samotné API a jazyky pro shadery. Nejlíp této problematice rozumí ti, co navrhují architektury grafických čipů, programátoři ovladačů grafických karet a programátoři API.
1.5.2007 02:06:10   62.168.45.xxx 3028
Joj zdrojů, těch by bylo :-) Ponejvíce ale nejspíše Microsoft MSDN.
1.5.2007 10:09:48   147.229.217.xxx 2828
Diky, odpovidam driv nez doctu vsechny prispevky
1.5.2007 15:40:43   89.31.11.xxx 2627
Ja to nějak nepochopil
1.5.2007 17:20:45   90.176.95.xxx 2826
Já si to četl jednou a pomalu, popřípadě jsem si (to co jsem nechápal) přečetl několikrát a pochopil jsem hned své nedostatky vědění.
1.5.2007 17:34:21   89.102.98.xxx 3326
Super článek. Dlouho mě tyto věci zajímaly, ale byl jsem líný si je najít. Díky. Jen taková maličkost. V textu je dost překlepů, které mě vždycky trknou. zle nísto lze apod. To je ale fakt maličkost. Paráda.
7.5.2007 17:54:41   82.202.48.xxx 2323
Štvou tě překlepy, ale sám si napsal "nísto" místo "místo".
4.5.2007 13:48:38   81.90.163.xxx 8025
Hmmm...Aha....OpenGL pro vas neexistuje...
25.1.2008 09:36:47   90.177.165.xxx 00
Článek je o renderingu 3D scény ve hrách, kde dneska zcela dominuje rozhranní DirectX. Článek není o srovnání vykreslování pomocí DirectX či OpenGL.

Redakce si vyhrazuje právo odstranit neslušné a nevhodné příspěvky. Případné vyhrady na diskuze(zavináč)pctuning.cz

797 čtenářů navrhlo autorovi prémii: 391.3Kč Prémie tohoto článku jsou již uzavřené, děkujeme za váš zájem.
Tento web používá k poskytování služeb soubory cookie.