Reljam Relja Markovic San Francisco
Član broj: 531 Poruke: 1793 *.hsd1.wa.comcast.net.
|
Hehe, stvarno dosta pitanja :)
Kod samog APIja, prakticno sve je jeftinije: razlog za to je nova arhitektura DX-a (neki cesti pozivi se sada izvrsavaju za manje od 100 ciklusa u d3d10core.dll-u), i nov drajver model (VDDM). Nov drajver model je inace razlog zbog cega je D3D10 samo namenjen za Vistu. Potrebni su novi drajveri da bi se ovo dobilo, i nov Microsoftov lejer u kernelu i user modu da bi ovo radilo.
Medjutim, glavni razlog zbog cega je D3D10 brzi od D3D9 je u fleksibilnosti samog API-ja. Primera radi, uveli smo ideju niza tekstura. Nizovi tekstura mogu da se zakace na obican texture slot (znaci ponasaju se kao da je jedna tekstura), ali su zato indexibilni iz shadera. To znaci da mozes da imas shader koji ce sam da bira koju teksturu da primeni na nekom objektu – ovo ranije nije bilo moguce. Samo ovom promenom se smanjuje broj neophodnih promena stanja.
Jos jedan primer je geometry shader: nov tip sejdera koji sedi izmedju VS i PS-a (dakle ide VS-GS-PS), i koji ‘vidi’ celu primitivu na kojoj radi, kao i njene susede. To znaci da neke kalkulacije mozes da uradis na nivou primitive umesto na nivou vertexa – eto ubrzanja od 3x. GS takodje moze da ispise proizvoljan broj primitiva, tako da mozes da napises GS koji uzima jednu tacku, i od nje generise sprajt (4 tacke). Ovim se dobija da mnogo manje podataka moras da saljes GPU-u kao i to da mozes da radis odredjene efekte kompletno na GPU-u: recimo particle systems, limitiran vid teselacije (posto vidis susede, mozes da ‘zaoblis’ trougao), itd.
Znaci na GS-u mozes da uradis efekte za koji su ti ranije bili potrebni dodatni pass-ovi ili racunanje na CPU-u.
Sada imamo i univerzalnost resursa – (skoro) svi D3D10 resursi su samo baferi, koji se onda kastuju u Vertex Buffers, Index Buffers, teksture, itd. GS moze opcionalno da upisuje podatke u neki drugi D3D10 resurs, i da onda taj drugi resurs ponovo provuce kroz pipeline. Znaci mozes da napises GS koji ce da ispuni VB i IB, i da onda ta dva ponovo provuces kroz pipeline – i to bez ikakve interkacije sa procesora (!). Ovo ti je instancing on steroids :)
Eto nama nekoliko pasova manje, i vise slobodnog CPU vremena, dakle igra radi brze. :)
Imamo nov shader model (4.0) koji omogucuje jos opstije shadere, prakticno bez limitacije duzine, sa jaaako dobrim flow controlom i branchingom, tako da ono sto si ranije radio u gomili sitnih shadera, sada mozes da uradis u jednom shaderu sa if / for petljama.
Problem specijalizacije shadera je i dalje tu, i to upravo sada i razmatram za DX11 – nisam zadovoljan fragment linkerom, i preporucujem ti da ga ne koristis ako ne moras, ili da iskompajliras shadere unapred ako je moguce.
Apropos rendering sistema – deferred shading ili direct ili hibridni – D3D10 to ne zanima. Ovo je vise platforma na kojoj mozes da napravis sta god hoces. Sve ovo sto sam naveo gore moze da bude korisno za bilo koj pristup renderingu. Znaci ne postoji neki metod koji D3D10 inherentno preferira.
Zbog svih ovih promena, ocekuje se drasticna promena engine designa, ali to je naravno i neminovno kada se donosi ovoliko novih featurea. Ne kazem da ljudi moraju da promene engine, ali ako ih ne promene, njihova konkurencija koja odluci da koristi D3D10 ce mnogo bolje proci. Ako ti je neka uteha, svi gamedev-ovi sa kojima sam pricao (mi smo u redovnom kontaktu sa triple-A developerima, community je u stvari jako mali) su presrecni idejom da mogu da isprobaju nove algoritme. Uostalom na E3-u smo imali nekoliko interesantnih demoa :)
Unified shader achitecture je definitivno interesantna arhitektura, ali to je implementacioni detalj (D3D10 to ne zanima). Ako neki proizvodjac hardvera misli da ce mu kartica bolje raditi ako je unified ili ne, to je njihova stvar. Kapitalizam pobedjuje.
Availability novog hardvera – pogadjas da je ovo top secret informacija nasih partnera, tako da na to pitanje ne mogu nista da kazem. Nama je inace zabranjen trading firmi koje se bave grafikom iz ovakvih razloga :/
D3D10 on 360 – no comment. :)
Fallback – ne moze tehnicki da se izvede; D3D10 je suvise drugacije. D3D9 hardvera nema nista od onoga sto sam gore napisao. Drajveri ce morati da se prave i za D3D9 i D3D10, ali to je standardna stvar svaki put kada izadje nov D3D.
Transition time je malo teze predvideti ovaj put jer u igru ulazi Vista – sa jedne strane D3D10 je Vista only, ali sa druge strane ovo je prvi put da sam OS zahteva graficki hardver, tako da to moze da podigne adoption rate. Izlazak novog OSa takodje dosta povecava prodaju novih racunara… Moj licni ‘gut feeling’ je dve godine posle Vista releasea.
To je jedna zeznuta stvar sa radom na D3D-u: znas da sve sto radis jeste interesantno, ali ce proci mnoogo dugo pre nego sto postane mainstream. Zavrsis proizvod i onda cekas dve godine. Ali, bice, bice… :)
|