Ďalšie vylepšenia, v čom nám pomôže Direct3D10 ?, detaily jadra:
Aj triangel setup výkon bol zlepšený, aby bol hoden nového pixelshader výkonu. Early-Z menovaný mechanizmus má za úlohu predčasne rozoznať prekryté (a tak neviditeľné) pixely a ich ani nepustiť do "pipeline". Tento mechanizmus bol tiež vylepšený. Presné čísla však nie sú známe
Detailné informácie ku cache systému žiaľ nVidia nedala. Obrovitánske cache pamäte však G80 nemá určite – pamäte je len toľko, aby bol možný bezproblémový chod. Pomocou threading mechanizmu sa dá prístupová doba k pamätiam pomerne dobre skryť. To je dôvod prečo si môže G80 vystačiť aj s menšími pamäťami cache. G80 vo forme GeForce 8800GTX potrebuje svoju priepustnosť pamäte (86,4 GB/s) tiež. (G71 má len 51,2 GB/s a GeForce 8800GTS 64 GB/s)
Málo detailov prezradila nVidia aj o vnútorných mechanizmoch pre komprimáciu. Bolo by však chybné sa spoliahať len na "hrubý výkon". Spolu s Direct3D10 je podporovaných osem rendertargets s odlišnou farebnou hĺbkou, vďaka ktorým sa dajú zrkadlové efekty alebo aj HDR lightning scény ľahšie vypočítavať.
G80 podporuje konečne 32 Bit Framebuffer s (integer) 10-10-10-2 formatovaním vrátane Multisampling podporou ako aj 64 Bit Fremebuffer (floating point) 16-16-16-16 takisto s Multisamplingom. Posledne menovaný je "lacnejší" pre scény, ktoré sú renderované s HDR lightningom . Prvý by bol "lacnejší" pre zbavenie sa v normálnych hrách tzv. colorbandingu, ktorý sa pri normálne formatovanom 32 Bit framebuffery vyskytuje v určitých hrách.
Pokiaľ viem, nie je žiadna možnosť v ovládačoch pre vynútenie 10-10-10-2, keď si aplikácia vyžiada RGBX (čiže nepotrebuje aplha kanál vo framebuffery). Existovala by takáto možnosť, bola by pri hraní Quake III veľmy užitočná.Samozrejme nie je 10-10-10-2 v integer formáte (napriek sRGB kódovaní) použiteľný pre HDR. Preto podporuje G80 aj 9-9-9-5 formát, pričom tých 5 Bit nestojí pre alpha, ale pre spoločného exponenta RGB hodnôt. Takého zadelenie Bitov vie 32 Bit šírka "slova" lepšie využiť, ako podobný "RGBE" formát s 8 Bit na kanál.
Aby sa nemuseli pri textúrach použiť hneď 64 Bit textúry, bol zavedený 11-11-10 formát s pohyblivou rádovou čiarkou.Obidve zobrazenia poskytujú podľa definície len middle dynamic range. To, že Multisampling funguje aj pri 128 Bit famebuffery (32-32-32-32) je pekné, ale zatiaľ bez významu.
Viditeľne zlepšené pri G80 sú antialaising a anizotropné filtrovanie.
Názov AA: | Modus: |
2x | 2x multisampling |
4x | 4x multisampling |
8x | 4x multisamping s rozšírením na 8x masku* |
8xQ | 8x multisampling |
16x | 4x multisamping s rozšírením na 16x masku* |
16xQ | 8x multisamping s rozšírením na 16x masku* |
* rozšírená maska má účinok len na polygonoch a nie na stancil tieňoch. Nakoľko je zapamätávaných viac hĺbkových informácii ako informácii o pokrytí môže dôjsť k nežiadúcim "kopčekom".
Všetky masky využívajú sparse grid, ktorý poskytuje optimálne vyhladzovanie pre subpixely. Podstatné je, že s "8xQ" je poskytovaný 8x sparse multisampling so všetkým čo k tomu patrí. Čiže aj TMSAA, TSSAA. Textúry s až 8192 x 8192 texelmi sú teraz vo všetkých texel formátoch použiteľné.
Aj rendertarget môže mať teraz až 8192 x 8192 pixelov, čo umožní nové antialaising módy s integrovaným oversamplingom.
Podstatné vylepšenia sa uskutočnili u anizotropného filtrovania.
G80 poskytuje neadaptívne anizotropné filtovanie. Naďalej však môže HW využívať adaptívne anizotropné filtrovanie, ktoré poznáme z NV40 a G70. Neadaptívne anizotropné filtrovanie poskytuje vždy najlepší trade off zo straty výkonu a získanej kvality obrazu. Preto neposkytuje ovládač momentálne žiaden adaptívny model anizotropného filtrovania – nVidia tak znemožňuje do určitej miery použiť rovnaké nastavenia kvality obrazu.
Samozrejme existuje nebezpečenstvo, že by nVidia znovu využila "optimalizačný potenciál" AF textúr a štandartne by bol viditeľný shimmering – ako teraz pri NV40 a G70.
Ako som už spomínal: štandartne nie je pri zapnutom AF poskytované trilineárne filtrovanie. To musí byť zapnuté až užívateľom. To čo ATi a nVidia už určitú dobu nazývajú trilineárnym filtrovaním nazývame mi "brilineárne" filtrovanie. Je však lepšie ako bilineárne, objektívne však nie je trilineárne. Len trilineárne filtrovanie vponúka plnú trilineárnu kvalitu. Prekryť ostré MIP pásy bilineárneho filtrovania nie je plná trilineárna kvalita.
Nakoľko má G80 neskutočný texel výkon, čudujem sa nad podobnými optimalizáciami.
Skonštatovať však treba, že G80 má hardwarové predpoklady, aby zobrazoval najlepšie anizotropné filtrovanie. Či budeme vidieť dlhodobo plnú kvalitu, ostáva otázne – v minulosti implementovala nVidia tajne vždy rôzne optimalizácie, ktoré spôsobovali zhoršovanie kvality obrazu. Ostáva dúfať, že nVidia nezhorší kvalitu filtrovania textúr, čo by bol vinikajúci dôvod pre kúpu mainstream karty založenej na G80 architektúre.
V prvom rade by som odporúčal čakať, akú kvalitu filtrovania textúr ponúkne nVidia v stovkových ForceWare ovládačoch.
Nasledovné obrázky ukazujú filtrovanie, bez aplikačných optimalizácii:
16x bilineárne: doposiaľ maximálny AF modus na GF3/4/FX (8x) S3 Delta/Gammachrome (16x) pri bilineárnom filtrovaní na MIP úrovni 1 skôr štvorec.Tento osem uholník je jednoznačne lepší.
Plné trilineárne filtrovanie na G80 pri 16x AF – oveľa lepší výber MIP ako Radeon X1000 séria. Radeon filtruje v testery síce trilineárne, v hrách však skôr "brilineárne".
Štandartne je aktívne "brilineárne" filtrovanie. V praxi máme pri udanom trilineárnom 16x AF skoro bilineárne AF. Podľa mňa je to neakceptovateľná skutočnosť. (platí pre každého výrobcu a hlavne pre túto kartu – G80)
Týmto AF obrázkom však nemôže byť prikladaná väčšia váha – ukazujú jedine LOD výpočty, nezobrazia však možný shimmering pri podfiltrovaní.
V čom nám pomôže Direct3D10 ?
"Nemali by sme najprv úplne využiť Direct3D9 predtým než začneme využívať Direct3D10 ... ?" "Má G80 vôbec dostatočný výkon pre Direct3D10 efekty ... ?"
V DirectD10 stojí vývojárovi k dispozícii oveľa viac zdrojov (registre, konštanty, textúry atď...), čo zjednoduší programovanie rapídne. Preto by sme nemali najprv využiť Direct3D9, nakoľko sa komplexnejšie efekty dajú pod Direct3D10 rýchlejšie vypočítať. Už Shader Model 3 ponúka oveľa viac možností, ako voči Shader Modelu 2 znížiť zaťaženie procesora. Shader Model 4 pokračuje v tomto trende ďalej, aby bol procesor pri renderovaní ešte menej zaťažený.
Aj pomocou DirectD7 API by sa dali vytvoriť 3D hry, ktoré by G80 nedokázal plynule zobrazovať – preto je otázka, či je pre Direct3D10 "dostatočne výkonný G80" nezmyslená. Vždy to záleží na tom, čo chceme spraviť. 3D shootery, ktoré sa objavia ~ 2008 a budú pravdepodobne využívať Direct3D10, nebude G80 asi vedieť zobrazovať v najväčšej možnej kvalite plynule.
Avšak nemožno teraz prísť na nápad, že G80 obsahuje "Direct3D9" a "Direct3D10 jednotky". GPU má výpočtové jednotky, ktoré spracuvávajú dáta. Nie všetky sa však dajú využiť pre DirectD9 – to je ale nedostatok API a nie hardwaru.
DirectX zavádzal postupom času pevné kostry; rozširovanie tu nie je možné. Možno povedať, že Direct3D10 vyžehlí určité nedostatky predchodcu, bez zmien podstatných problémov. Direct3D je definícia, čo musí čip vedieť a ako bude kounikovať s ovládačom, Direct3D neprináša sám žiadne features. Features prináš čip.
Používateľom Windows XP zostane zatiaľ Direct3D10 nepoužiteľný. To nie je problém grafickej karty, ale softvérovej politiky Microsoftu. Kto tu bude komu škodiť sa uvidí. Nebolo by OpenGL konzorcium také ťažkopádne, mohli by sme túto alternatívnu API použiť pre "DirectD310 features". nVidia, ktorá sa ako obyčajne angažuje aj pri OpenGL, predstavila už nové extensions. (doteraz bolo možné pod OpenGL získať viac features z GeForce ako z odpovedajúcej DirectX generácie)
Vyzerá to tak, že AMD/ATi sa v tejto oblasti dotiahne (a PowerVR časom tieš). Ostávajú tak naďalej dobré dôvody pre nasadanie OpenGL API. Napriek sile Microsoftu – pri grafických kartách, koncových zariadeniach, ako aj pri novej Playstation 3 hrá OpenGL podstatnú úlohu. Nám užívateľom to otvorí cestu, získať novú flexibilitu aj na Windows XP, bez potreby emulovania Direct3D10.
Na tomto mieste neprinesiem naschvál ukážky, čo je všetko s Direct3D10 možné, nakoľko by prakticky všetky scény mohli byť renderované aj pomocou Direct3D9, len v menšej rýchlosti. Po druhé – technologické dema neodzrkadlujú skutočnosť, čo môžeme očakávať v hrách. A znovu – alebo ako často ešte ? – nám je Displacement Mapping sľubovaný. Tu však existuje množstvo principiálnych problémov, ktoré zťažujú nasadenie v real world hrách. Moja prosba na čitateľov – odvykať si od myslenia na efekty.
GPUs sú programovateľné, NV10 je len málo programovateľný, NV30 oveľa viac, NV50 (G80) by bol schopný pri vyhovujúcom Compilery nechať bežať jednoduchý C-code. G80 neumožňuje (odhliadnuc od nových Bit operácii v shader core, ktoré sa však ťažko emulujú) žiadne nové efekty.Umožňuje však flexibilnejšie programovanie a vyššiu výpočtovú rýchlosť ako všetky doposiaľ predstavené Consumer-GPUs ("spotrebné GPU"). To znamená, že umožňuje renderovať komplexnejšie efekty v reálnom čase.
Pokiaľ máme viaceré zdroje svetla, rozdielne hladké povrchy, ktoré musia byť zobrazené, možno rýchlo prísť aj k 11 (a viac) vplyvov, ktoré musia byť na jeden pixel prepočítavané. Preto potrebujeme nielen "hrubý výkon" ale aj hardware, ktorý vie teoretický výkon podľa možnosti čo najlepšie využiť. Na to sa teraz pozrieme v detaile.
Detaily jadra:
Skalár je jednoducho číslo, vektor je skupina z viacerých čísel. Preto možno chápať skalár aj ako vektor len s jedným komponentom. Jeden pixel je väčšinou znázornený ako 4D vektor ("Vec4"). Z toho tri komponenty na farbu v RGB systéme a jeden pre dodatočnú informáciu, nazývanú "alpha". Alpha je často využívaná pre odstupnovateľnú priehľadnosť. Nakoľko je pixel zobrazený ako vektor, dlhú dobu sa stavali Vektor ALUs. G80 však má "skalárne" ALUs, ale vždy pre 16 pixelov dokopy. Možno preto hovoriť aj o Vec 16 ALUs, ktoré pre 16 pixelov vypočítajú 16 vektor komponentov – 16 skalárov. G80 preto nemá 128 skalárnych pipelines. Takisto ani G70 nemá 24 pixelpipelines – je to šesť quadov. G80 má osem Vec16 quadov, ktoré sú však oveľa efektívnejšie a pracujú pri väčšej frekvencii.
Predpokladajme, že v shader kóde nasledujú tri skalárne operácie za sebou. Tieto tri operácie potrebujú u NV40 a G70 (ako aj na aktuálnych Radeon) dva takty, pretože môžu byť za takt maximálne dve rozdielne operácie "vedľa seba". Existujú aj iné obmedzenia, ktorými sa ale nebudeme zaoberať.Ako už povedané – quad pipe vypočíta za tak 4 pixely. G80 potrebuje pre tri skalárne operácie samozrejme 3 takty a nie 2 – ale vypočíta to pre štvornásobné množstvo pixelov (16 namiesto 4). "Efektívne" tak potrebuje G80 - 0.75 namiesto dvoch taktov.
DP operácie sú v G70 ešte priamo vykonané, u G80 musia byť rozdrobené na skalárne operácie. Takto sa dá DP však efektívnejšie vypočítať. Jednoducho povedané, lebo bude použitých menej ADD-ALUs. Zatiaľ čo G70 má okrem dvoch MULs aj dve ADDs, má G80 na svojích dvoch MULs len jednu ADD.
G80 architektúra tak vypočíta za takt na pixel menej ako G70, avšak viac pixelov súčastne. G80 má na quad a za takt polovičný ADD výkon ako G70. Má však vylepšenú efektivitu a pracuje pri oveľa väčšej pracovnej frekvencii, pri bez tak "širokej" architektúre.
Zaujímavé je tiež, že nová architektúra prináša aj zjednodušenia. Možnosť vykonávať v NV40 a G70 v jednej shader jednotke dve operácie za sebou, vyžaduje flexibilitu – čiže vedieť spracovať aj dlhé inštrukcie príkazov. (príkazy sú u GeForce kartách od CineFX, zapamätávané pamäťovým prístupom TMU do pipe pomocou VLIWs – Very Large Instruction Words.)
V G80 vykonávajú všetky ALUs tie isté inštrukcie a nemusia byť jednotlivo konfigurovateľné. To skracuje "dĺžku slova" VLIW – rozdelením na skaláry však stúpa počet potrebných VLIWs, na odpracovanie shadera. Nakoľko však registerfile zapamätáva len skaláry (vždy pre 16 pixelov naraz – kvôli šírke ALU), je tento efektívnejšie využívaný ako pri ostatných architektúrach. Pixelshadery G80 majú overhead pri ALUs, ktorý pri multitexturing shaderoch však nehrá rolu, nakoľko sú TMUs v tomto prípade beztak zaneprázdnené.
glide
Ledy
barco
killswitch
crux2005
killswitch
crux2005
Ledy
killswitch
killswitch
crux2005
gogi
strelooriginal
dexman
eotslubo
optimista
badbat
MEPHISTO