komentarze
*Konto usunięte*2007.06.21, 17:32
Artykuł czytało mi się bardzo dziwnie. A to dlatego, iż cały czas miałem wrażenie, że autor nie ma pojęcia o czym pisze. Wygląda to jakby było napisane na podstawie zagranicznych materiałów i nieudolnie przetłumaczone. Oto kilka z wielu dziwnych rzeczy (wręcz dla mnie bzdur) w artykule:

CYTAT
Dotychczas, podczas tworzenia sceny 3D, gry za pośrednictwem graficznego API wielokrotnie zwracały się z zapytaniami do karty, czy jest ona w stanie obsłużyć taki lub inny efekt graficzny. Sprawdzanie takie zajmowało sporo czasu.
Kompletna bzdura. Po co zresztą by API miało to robić ? Lub cokolwiek ?
Takie rzeczy to API(DX) sobie sprawdza raz w momencie startu systemu lub wymianie karty na żywca, przeładowania sterownika etc.
Uprzedzając pytania to gra też w trakcie generowania sceny nie generuje takich bezmyślnych zapytań. Robi to najwyżej w trakcie inicjalizacji gry czyli tylko raz na całe jej uruchomienie. I pyta się API, które już zna odpowiedź (D3DCAPS).

CYTAT
Teraz wystarczy już tylko raz odwołać się do procedur sprzętowych, aby biblioteki wiedziały, jakie instrukcje i formaty danych są dozwolone, a gra mogła zająć się wyłącznie generowaniem trójwymiarowej grafiki.
Od zawsze tak się robiło. Żadna nowość.

Strasznie dziwnie wygląda to zdanie:
CYTAT
Wprowadzono też tablice tekstur (texture arrays) mieszczące do 512 pojedynczych bitmap.
A dziwnie dlatego, że 2 strony wcześniej czytamy:
CYTAT
Przy okazji zoptymalizowano także algorytmy zarządzania tablicami tekstur,...
To jak w końcu jest ? Zoptymalizowano te tablice tekstur w DX10 względem DX9 czy wręcz je dopiero wprowadzono w DX10 ??

CYTAT
Jeżeli karta wykorzystuje tradycyjną architekturę, wówczas DirectX 10 wymaga, aby w układzie 3D znajdowały się dodatkowe jednostki shaderowe. Pomiędzy Vertex a Pixel Shaderem musi znaleźć się nowy moduł o nazwie Geometry Shader.
Nie chce mi się wierzyć, że Geometry Shader nie jest obowiązkowy w karcie DX10. Przecież ta jednostka(jednostki) mają własny język cieniowania, co można wykorzystać do różnych ciekawych efektów. Bez tego gry DX10 przecież nie działałyby prawidłowo. Będę wdzięczny za linka do dokumentacji DirectX10(MSDN), z informacją że karty DX10 mogą tego nie obsługiwać.

CYTAT
Zwiększona została też liczba obiektów, które mogą być jednocześnie renderowane techniką MRT (multiple render targets). Dotychczas można było nakładać tekstury na cztery obiekty, teraz tych obiektów może być osiem.
Jakie znowu nakładać ?? Tu chodzi o jednoczesne renderowanie na tych teksturach(zamiast na buforze ramki) a nie nakładanie ich ! Dopiero potem można ich używać do "nakładania" ale to już nie ma nic wspólnego z MRT. Totalne pomieszanie.

CYTAT
Podobny w działaniu jest mechanizm proceduralnej symulacji wzrostu (Procedural Growth Simulation)
Ale tego nie można zaliczać jako nowy efekt ! To jest shader napisany z użyciem Geometry Shadera+StreamOut ! Mogę napisać miliony efektow shaderowych ale przecież nie będziemy tego zaliczać jako nowe efekty. A o samym Geometry Shaderze już była cała strona a teraz już jest kolejna tylko maskowane, że to niby nowe efekty smilies/wink.gif

CYTAT
Nowym efektem wprowadzonym do DirectX 10 jest punktowe mapowanie przemieszczeń (Per-pixel Displacement Mapping)
I znowu.... Jakim nowym efektem?? Ta jaszczurka to jest displacement mapping przez ray tracing na shaderach ! To już było w DX9. Nowością jest użycie Geometry Shadera a reszta po staremu. Znowu żaden nowy efekt !

CYTAT
Przy okazji efektów 3D warto wspomnieć o przełamaniu w DX10 istotnego ograniczenia, z jakim musieli się borykać programiści korzystający z dotychczasowych bibliotek graficznych. Tym ograniczeniem był limit 500 obiektów jednocześnie wyświetlanych na scenie 3D. Każdy przedmiot, pojazd, postać, roślina, kamień czy zwierzę traktowany jest jako jeden obiekt.
Co ???? Na jakim to sprzęcie ? Celeronie 100MHz + S3Virge może i jest takie ograniczenie smilies/wink.gif A poważniej. Nie ma czegoś takiego ! To jest jakiś bełkot ! Proszę mi to pokazac w dokumetacji MSDN lub w jakimś Capsie w miarę nowej(do 5 lat) karty graficznej. Ja twierdzę, że istnieje w tym zakresie ograniczenie jedynie w możliwościach przesyłania informacji do karty graficznej i zarówno dla kart w API DX9 jak i DX10 jest ono identyczne.
Owszem. Polepszono instancing w DX10. Można wykorzystać tablicę tekstur w bloku instancingu vertex shadera i wtedy zyskujemy, że można je zmieniać.
Ale trzeba pamiętać. że przełączanie tekstur w ogóle jest ogromnie kosztowne i robi się to rzadko aby nie wypadały z cache. Więc nikt dla szpanu tylko dlatego, że pisze pod DX10, nie będzie tych tekstur przełączał wiedząc jak to zabija wydajność. Programiści nadal będą się trzymać metody z DX9 nawet w API DX10 dopóki nie będzie to naprawdę konieczne. A te parę razy to i w dX9 można sobie przełączyć tą teksturę smilies/wink.gif
Wyjaśnienie dla mniej zorientowanych: Ja mówię teksturę ale chodzi mi tu o jeden blok danych - obrazek 2D. Na nim można umieścić wiele materiałów i z niego wycinać obszary i naklejać na obiekty. Nadal będzie to wciąż korzystanie z jednej tekstury. Na jednym kawałku można narysować murek, na innym okno itd. Tak właśnie się robi gry. W DX10 też. Coś takiego:
(Uwaga! Objętość 1.5MB) http://www.debevec.org/Parthenon/ShotBySho...easttexture.jpg
Do tego ustawionych tekstur jednocześnie w DX9 można mieć z kilkanaście. Tylko trzeba je ustawić przed rozpoczęciem rozkazu instancingu. Wtedy nawet w środku instancingu są wszystkie do dyspozycji. Każda max 4096x4096 (do tego tekstury wolumetryczne czyli 3D). Można je modyfikować algorytmicznie w shaderze itd, itp.
CYTAT
W DX10 nie ma już takich ograniczeń.
W DX9 też nie było.


No to już chyba koniec smilies/smile.gif Na obronę autora mam tylko to, że sam widziałem materiały propagandowe o DX10 i tam są dokładnie te same informacje co w tym artykule (500 obiektów). Ale to jest propaganda i niestety 90% z tego to lipa lub naciąganie faktów - napisane tak, że niby tylko w DX10 są super rzeczy ale nie wspomniane tylko, że już były w DX9.
Również bardzo możliwe , że to ja gdzieś się mylę więc proszę prostować smilies/smile.gif
Przepraszam też za moje rozpisanie ale to dlatego, że to skomplikowane i chciałem aby dla wszystkich rzeczy były zrozumiałe.
nofinkZobacz profil
Poziom ostrzeżenia: 0%
nofink2007.06.21, 17:35
mam pytanie... nieco zwiazne z tematem... chodzi mi o Xboxa360. posiada on dirctx? jesli tak to jaki? a jesli nie, to przy pomocy jakiego API pracuja jego 'bebechy'?
Administratormaly_szcz2007.06.21, 17:38
No proszę - artykuł bardziej o software niż hardware (czyli coś co mnie bardziej interesuje).
Oby tak dalej smilies/smile.gif
Przecież PC to nie tylko sprzęt ale także i oprogramowanie smilies/smile.gif
Artykuł muszę przyznać ciekawy.


Pozdrawiam.
SupermanZobacz profil
Poziom ostrzeżenia: 0%
Superman2007.06.21, 18:25
W pełni zgadzam się z PetBB. Pamiętam że ten autor podobne kwiatki sadził w artykułach Chipa. Większość czytelników nie jest w stanie zweryfikować takich artykułów, ponieważ nie są programistami. Mają tylko ogóle pojęcie co dany DirectX i GPU potrafi, aby kupić taką kartę graficzną, jakiej potrzebują do odpalenia swoich gierek.
*Konto usunięte*2007.06.21, 20:14
Witam,

Dziękuję PetBB za uwagi. Artykuł powstał na bazie materiałów o DirectX dostarczonych mi przez firmy ATI, nVidia i Microsoft. W większości są to materiały przeznaczone dla prasy komputerowej przentowane na konferencjach przy okazji premier różnorodnych produktów - głównie są to różnego rodzaju prezentacje i tzw. whitepapery. Na ich podstawie powstaje wiekszość artykułów i recenzji, które można przeczytać w sieci we wszystkich krajach świata. Oczywiście ich jakość jest różna, niemniej na ich podstawie zawsze powstawały, powstają i będą powstawać popularne, ogólnotechniczne (niespecjalistyczne) teksty o wszelkich produktach i technologiach, gdyż są one podstawowym źródłem wiedzy dla dziennikarzy zajmujących się tematyką komputerową.

Zdarza się, że prezentacje tego typu są "naciagane", ale to dość szybko w czasach internetowych wychodzi na jaw - tu tak nie było. W tym wypadku niemiałem więc jakichkolwiek podstaw do podważania mertytrycznej treści tych materiałów, tym bardziej, że podczas tegorocznych targów CeBIT i nieoficjalnych pokazów Radeona X600 i GF8600 miałem okazję porozmawiać z inżynierami z obu firm zajmujacych się projektowaniem kart i pisaniem sterowników. Potwierdzili mi zawarte w nich informacje - w tym te dotyczące limitu 500 obiektów - zresztą inne serwisy internetowe też podały te informacje (tutaj podaje przykład artykułu przygotowanego na bazie prezentacji ATI - http://www.driverheaven.net/articles/dx10/).

Oczywiście nikt nie jest nieomylny - nie myli sie tylko ten, kto nic nie robi smilies/smile.gif. Ja też nie jestem programistą tylko dziennikarzem komputerowym, a z zawodu fizyko-chemikiem i czasami trudno mi również, mimo dużego doswiadczenia i sporej wiedzy, wychwycić wszystkie błędy i je skorygować. Dlatego jeszcze raz dziekuję za cenne merytoryczne uwagi. Postaram się zweryfikować jeszcze raz wszystkie informacje dotyczące nieścisłości, które zuważył PetBB i wyniki śledztwa przedstawię wkrótce na forum.

Pozdrawiam
Marcin Bieńkowski
MassTAZobacz profil
Poziom ostrzeżenia: 0%
MassTA2007.06.21, 20:21
CYTAT(CeHa @ 20 czerwca 2007, 10:27) <{POST_SNAPBACK}>
A te screeny z M Flight Simulator wygladaja jak zrobione w Photoshopie szczegolnie ten z DX10 sam moge taka przerobke zrobic bez najmniejszego problemu smilies/szczerbaty.gif

Bo on jest z Photoshopa, zobacz podpis na orginalnej, nie przyciętej, wersji obrazka:
http://john.se/blog/2006/08/14/funny-trail...-of-directx-10/
smilies/smile.gif
kresekZobacz profil
Poziom ostrzeżenia: 0%
kresek2007.06.21, 20:50
CYTAT(PetBB @ 21 czerwca 2007, 17:32) <{POST_SNAPBACK}>
Co ???? Na jakim to sprzęcie ? Celeronie 100MHz + S3Virge może i jest takie ograniczenie smilies/wink.gif A poważniej. Nie ma czegoś takiego ! To jest jakiś bełkot ! Proszę mi to pokazac w dokumetacji MSDN lub w jakimś Capsie w miarę nowej(do 5 lat) karty graficznej.

pewnie chodzi z grubsza o to:

http://forum.beyond3d.com/showpost.php?p=1019107

jak to wygląda w praktyce?
PynioZobacz profil
Poziom ostrzeżenia: 0%
Pynio2007.06.21, 21:13
PETBB RESPEKT kolego....

takie rozmowy i wypowiedzi wnosza mnostwo... prosze o wiecej smilies/smile.gif
PynioZobacz profil
Poziom ostrzeżenia: 0%
Pynio2007.06.21, 22:09
no to z Flight simulator to oczywiscie wierutny KIT... mam wszystko ustawione na max i nie ma SZANS, zeby uzyskac tego rodzaju grafike....

moze za 3 lata....
*Konto usunięte*2007.06.21, 23:10
CYTAT(kresek @ 21 czerwca 2007, 20:50) <{POST_SNAPBACK}>
Tak. Chodzi tutaj o obciążenie CPU komputera bo jednym wywołaniem można narysować i 1 trójkąt a można i np. 1 milion trójkątów. Ale zlecenie narysowania 1 trójkąta i zlecenie narysowania 1 miliona trójkątów zajmuje praktycznie tyle samo czasu CPU. Potem zaczyna się rysowanie w GPU a CPU już sobie coś dalej robi. Oczywiście nie wliczam czasu potrzebnego do przygotowania danych do narysowania ale te można sobie np. przygotować wcześniej.
Czyli po optymalizacji robimy tak(znacznie upraszczam):
0: Wypełniam bufor wierzchołków danymi zawierającymi 3000 wierzchołków żołnierza
1: Ustawiam odpowiednią teksturę
2: Wybieram Vertex Shader
3: Wybieram Pixel Shader
4: Ustawiam parametry Shaderów, w któych przekazuję: pozycję żołnierza, wielkość, rotację, ustawienia oświetlenia.
5: Każę narysować żołnierza z jednego bufora 3000 trójkątów na planszy

Jeśli teraz chcemy narysować kolejne parę tysięcy żołnierzy to znowu powtarzamy kroki 4-5 dla każdego żołnierza.
Procesor komputera parę tysięcy razy ustawia parametry dla shadera każdego żołnierza oraz parę tysięcy razy zleca rysowanie każdej kopii żołnierza. Na dodatek musi czekać aż każda kopia żołnierza zostanie narysowana i w tym czasie CPU nie może praktycznie robić czegoś innego ! Więc się bezsensownie nudzi smilies/sad.gif

Ale gdyby zastosować Instancing to zamiast punktu 4 robię tak:
4: Ustawiam bufor instancingu w karcie graficznej(w uproszczeniu). Dane przesyłam w jednej paczce za pomocą jednego wywołania. W tym buforze znajduje się lista zadań do wykonania w czasie rysowania każdej kopii żołnierza. Lista jest długości takiej ile ma być kopii żołnierza. W polach tej listy na każdą kopię żołnierza znajdują się wstępnie zapisane dane z 4 kroku poprzedniego algorytmu, czyli:
pozycja żołnierza, wielkość, rotacja, ustawienia oświetlenia.
I teraz nowy punkt 5:
5: Każę wykonać rysowanie korzystając z listy instancingu umieszczonej w karcie graficznej w poprzednim punkcie.
I teraz GPU sobie rysuje te parę tysięcy żołnierzy kompletnie sam i bez pomocy CPU ! A CPU komputera sobie robi inne zadanie, np. przygotowuje kolejną grupę obiektów do narysowania albo liczy AI bądź fizykę. Zniknęła tu konieczność czekania CPU komputera na narysowanie każdego żołnierza oraz pojedyncze ustawianie tysięcy parametrów w karcie graficznej przez CPU. To jest ogromny zysk.

Niestety pomimo tego, że jest instancing już od kart z DX9 (od Radeona 9500 oraz od GF6800) to i tak prawie nikt tego nie używa. W DX10 prawdopodobnie będzie tak samo smilies/sad.gif Najgłośniejszy znany mi tytuł z instancingiem to Far Cry. Chociaż inna sprawa, że może deweloperzy się nie chwalą bo w sumie to nie ma czym smilies/wink.gif
Ludzie i tak będą kupować coraz mocniejsze CPU i płyty główne z coraz szerszymi magistralami i szybszymi pamięciami zamiast dobrze zaplanować grę i zaimplementować instancing. Ja niestety nie czuję aby w tej sprawie coś w DX10 miało być prościej.

CYTAT
jak to wygląda w praktyce?
W praktyce widać jak dzisiaj wiele gier jest zależnych w dużym stopniu od CPU smilies/sad.gif Czyli 99% programistów ma gdzieś to ile zmian stanu karty graf. przez CPU w ramce robią. Oczywiście możemy to zwalić, na fizykę i na AI ale ja bym w to nie wierzył smilies/wink.gif Ale zlecenie narysowania 500 razy jednego trójkąta to mimo wszystko powinien być jeszcze drobiazg. Zatem uważam, że granica optymalizacji powinna być ustalana indywidualnie dla każdego projektu bo zależy od wielu czynników.
PiotrDWRZobacz profil
Poziom ostrzeżenia: 0%
PiotrDWR2007.06.21, 23:33
Niestety w dzisiejszych czasach rządzi marketing i reklama. Tak jak tutaj udowodnił nam PetBB porównując możliwości dx9 i dx10.

Zresztą ja bym nawet sięgnął głębiej. Ponieważ to za sprawą polityki firm działających globalnie które przez to, że wypuszczają nowe oprogramowanie przeznaczone wyłącznie dla np. nowych systemów systemów operacyjnych (np. vista) zmuszają nasz do ich zakupu, a co za tym idzie wymuszają na nas zakup nowego komputera który "pociągnie" nowy system operacyjny. Podobnie sprawa ma się z producentami np. gier. Z łezką w oku wspominam połowę lat 90'siątych kiedy 8MB pamięci było wartością zapewniająca spokojne "giercowanie" przez długie lata bez potrzeby rozbudowy. Teraz nie chcąc zostać w tyle trzba dokładać po gigabajty pamięci z roku na rok.

Smuci i drażni mnie taka polityka wielkich firm które zmuszają nasz do zakupu łączonego.

Pozdrawiam.
kresekZobacz profil
Poziom ostrzeżenia: 0%
kresek2007.06.21, 23:55
CYTAT(PetBB @ 21 czerwca 2007, 23:10) <{POST_SNAPBACK}>
Procesor komputera parę tysięcy razy ustawia parametry dla shadera każdego żołnierza oraz parę tysięcy razy zleca rysowanie każdej kopii żołnierza. Na dodatek musi czekać aż każda kopia żołnierza zostanie narysowana i w tym czasie CPU nie może praktycznie robić czegoś innego ! Więc się bezsensownie nudzi smilies/sad.gif

Ale gdyby zastosować Instancing to zamiast punktu 4 robię tak: [...]

ok, tyle instancing - tyle tylko, że DX10 miał zmniejszać czas także i dla klasycznych, "pojedynczych" wywołań. zapewne już wiesz, czy faktycznie jest różnica w czasie przetwarzania - mógłbyś się podzielić? smilies/wink.gif
*Konto usunięte*2007.06.22, 00:43
CYTAT(kresek @ 21 czerwca 2007, 23:55) <{POST_SNAPBACK}>
ok, tyle instancing - tyle tylko, że DX10 miał zmniejszać czas także i dla klasycznych, "pojedynczych" wywołań. zapewne już wiesz, czy faktycznie jest różnica w czasie przetwarzania - mógłbyś się podzielić? smilies/wink.gif

Niestety tego nie wiem. Osobiście o ile nie będę musiał to DX10 nie zamierzam się już uczyc i stosowac a po skończeniu rozpoczętych projektów w DX9 przesiadam się na OpenGL ze względu na niesamowity wzrost popularności linuksa. Ale jak osobiście testowałem aplikacje w DX9 na Windows Vista to działały mi ogólnie 2x wolniej niż w XP(wiem, to nie DX10) więc mam wątpliwości co do tego przyspieszenia DX10. Zwłaszcza, że sama Vista strasznie muli. Idiotyczny DRM, ciągle szyfruje pamięc. Karta graficzna DX10 musi miec deszyfracje wszystkiego co jest do niej wysyłane i nie da się w Viście wysłac niezaszyfrowanego strumienia danych. Podobno używają do tego jednostek shader ! Przynajmniej ja takie informacje słyszałem. Tam było napisane w tym wątku, że OpenGL 4x mniej obciąża CPU od DX9. Wątpię aby to pokonali w DX10 smilies/wink.gif
MacBirdieZobacz profil
Poziom ostrzeżenia: 0%
MacBirdie2007.06.22, 01:39
CYTAT(PetBB @ 22 czerwca 2007, 00:43) <{POST_SNAPBACK}>
Idiotyczny DRM, ciągle szyfruje pamięc. Karta graficzna DX10 musi miec deszyfracje wszystkiego co jest do niej wysyłane i nie da się w Viście wysłac niezaszyfrowanego strumienia danych. Podobno używają do tego jednostek shader ! Przynajmniej ja takie informacje słyszałem.

Te informacje są z "Faktu"? smilies/szczerbaty.gif

DRM odpala się gdy treść odtwarzana ma być zabezpieczona - wybrane filmy HD-DVD i Blu-Ray (te w których producent włączył odpowiednią "konfigurację" strumienia), a nie wszędzie. To całe szyfrowanie także się tyczy przesyłania tej zabezpieczonej treści, a nie wszystkiego.

Poke - też bym naprawdę chętnie posłuchał na temat "lamerskości" .NET.
*Konto usunięte*2007.06.22, 02:33
CYTAT(MacBirdie @ 22 czerwca 2007, 01:39) <{POST_SNAPBACK}>
DRM odpala się gdy treść odtwarzana ma być zabezpieczona - wybrane filmy HD-DVD i Blu-Ray (te w których producent włączył odpowiednią "konfigurację" strumienia), a nie wszędzie. To całe szyfrowanie także się tyczy przesyłania tej zabezpieczonej treści, a nie wszystkiego.

Zależy co się określa jako DRM. Ale szyfrowanie pamięci i transmisji po magistralach ma być włączone zawsze. Najpierw Gutmann o tym sporo pisał: http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.html i to co napisał m$ w 99% potwierdził. Są tam też narzekania ATI, że muszą specjalnie projetkowac szprzęt do obsługi szyfrowania do wszystkiego. Ale może to oczywiście to ja i wszyscy moi znajomi coś źle zrozumieli. Jak lubisz Vistę to sobie używaj. Na zdrowie smilies/smile.gif Leciutki, przyjemny, energooszczędny systemik smilies/wink.gif Do tego dba aby użytkownik był zawsze legalny smilies/wink.gif
*Konto usunięte*2007.06.22, 08:58
Witam,

Przejrzałem jeszcze raz wszystkie materiały. Podeprę się w odpowiedziach dokumentem nVidii: Technical Brief - Microsoft DirectX 10 - The next generation graphics API, Niestety nie mogę go udostępnić, ze względu na to, ze nie mam zgody na jego rozpowszechnianie, ale tylko wykorzystania. Być może gdzieś leży w Sieci u nVidii lub gdzieś indziej, nie szukałem - plik nazywa się DX10TechBrief.pdf.

Zacznijmy od limitu 500 obiektów. Za obiekt rozumie się tu nie pojedynczy trójkąt, ale większą bryłę - całą postać lub jej fragment( np. rękę, nogę), kamień, drzewo, samochód, górę, rzekę itp. Wszystko co na scenie 3D można skalować przesuwać obracać i traktowane jest jako całość. Każdy z tych obiektów może zaś składać się z milionów trójkątów - nie ma to znaczenia - tutaj limitu nie ma. Dla przykładu, Ruby z dema promującego poprzednie Radeony, właśnie ze względu na ograniczenie do 500 obiektów, skonstruowano z zaledwie 30 obiektów, a w sumie składała się ona z kilku milionów trójkątów - tą informację możecie znaleźć np. tutaj: http://www.driverheaven.net/articles/dx10/

Druga rzecz. Sprawa dotyczy fragmentu:
CYTAT
Dotychczas, podczas tworzenia sceny 3D, gry za pośrednictwem graficznego API wielokrotnie zwracały się z zapytaniami do karty, czy jest ona w stanie obsłużyć taki lub inny efekt graficzny. Sprawdzanie takie zajmowało sporo czasu.


W dokumencie nVidii na str.5 jest taka tabela:
CYTAT
Table 1. DirectX 9 vs. DirectX 10 Validation

DirectX 9 Validation
Application starts Create Resource Game loop (executed millions of times)
Validate Resource
Use Resource
Show frame
Loop End
App end

DirectX 10 Validation
Application starts Create Resource
Validate Resource (executed once)
Game loop (executed millions of times) Use Resource
Show frame
Loop End
App ends


Ten proces odpytywania to proces walidacji. Wykonywany jest on na styku API->sterowniki->sprzęt. Sprawdza on czy komendy i formaty danych wysłane przez aplikacje są poprawne. Innymi słowy, sprowadza się to do tego, czy dana karta jest w stanie obsłużyć taki a nie inny efekt graficzny przy wykorzystaniu takich, a nie innych danych. Pamiętajmy, że nie wszystkie efekty muszą być zaimplementowane w karcie, a mimo to karta będzie zgodna z dana wersją DX. Ten proces walidacji jest całkowicie przezroczysty dla programisty piszącego grę - z jego punktu widzenia on nie istnieje.

Kolejna sprawa dotyczy fragmentu:
CYTAT
Jeżeli karta wykorzystuje tradycyjną architekturę, wówczas DirectX 10 wymaga, aby w układzie 3D znajdowały się dodatkowe jednostki shaderowe. Pomiędzy Vertex a Pixel Shaderem musi znaleźć się nowy moduł o nazwie Geometry Shader.


Należy tutaj rozróżnić dwie rzeczy, faktycznie może tego dobrze nie rozgraniczyłem w arcie. Proces generowania grafiki z punkty widzenia programowego jest taki jak na pierwszym rysunku w artykule. Ale spójrzcie na architekturę np. GF 8800. Nie ma tam żadnych klasycznych jednostek Vertex i Pixel Shader. Są tylko zunifikowane uniwersalne miniprocesory, to one w zależności od potrzeb zamieniają się w moduły Vertex, Pixel lub Geometry. W takiej architekturze nie istnieje zatem klasyczny podział na specjalizowane jednostki. Jeśli karta ma zaś specjalizowane jednostki Vertex i Pixel wówczas, aby była zgodna z DX10 musi też mieć specjalizowane jednostki geometryczne. Oczywiście z punktu widzenia programisty, to co dzieje wewnątrz karty nie ma znaczenia i jest dla niego nie istotne - on wydaje polecenia modułom Vertex Pixel i Geometry, niezależnie od tego co się tam w środku naprawdę dzieję - mogą tam być nawet krasnoludki smilies/bigsmile.gif.

Wracając zaś do nowych efektów w DX10, to te które wymieniłem w artykule są we wszystkich dokumentach wymienione jako nowe efekty wprowadzone do DX10. Zrzuty ekranowe je ilustrujące pochodzą zaś z programów demonstracyjnych dołączonych do pakiety DX10SDK, a programy umieszczone były w działach dotyczących nowości w DX10 i nie działają one pod DX9 - te które są wspólne dla ubu bibliotek działają i tu i tu i są też umieszczone w innym miejscu. Owszem nie wnoszą one wiele nowego, ale z dziennikarskiego obowiązku trzeba je było wydzielić i oddzielnie przedstawić.

Pozdrawiam
Marcin Bieńkowski
*Konto usunięte*2007.06.22, 13:33
CYTAT(tindiglo @ 22 czerwca 2007, 08:58) <{POST_SNAPBACK}>
Przejrzałem jeszcze raz wszystkie materiały. Podeprę się w odpowiedziach dokumentem nVidii: Technical Brief - Microsoft DirectX 10 - The next generation graphics API, Niestety nie mogę go udostępnić, ze względu na to, ze nie mam zgody na jego rozpowszechnianie, ale tylko wykorzystania. Być może gdzieś leży w Sieci u nVidii lub gdzieś indziej, nie szukałem - plik nazywa się DX10TechBrief.pdf.
Tak. Leży i jest dostępny dla każdego: http://www.nvidia.in/page/8800_tech_briefs.html

CYTAT
Zacznijmy od limitu 500 obiektów. Za obiekt rozumie się tu nie pojedynczy trójkąt, ale większą bryłę - całą postać lub jej fragment( np. rękę, nogę), kamień, drzewo, samochód, górę, rzekę itp. Wszystko co na scenie 3D można skalować przesuwać obracać i traktowane jest jako całość. Każdy z tych obiektów może zaś składać się z milionów trójkątów - nie ma to znaczenia - tutaj limitu nie ma.
Dla przykładu, Ruby z dema promującego poprzednie Radeony, właśnie ze względu na ograniczenie do 500 obiektów, skonstruowano z zaledwie 30 obiektów, a w sumie składała się ona z kilku milionów trójkątów - tą informację możecie znaleźć np. tutaj: http://www.driverheaven.net/articles/dx10/
Ja to odczytuję, że akurat pisząc demo Ruby robiąc 500tny obiekt zaczęło im zwalniać przez CPU . Ale to nic przecież nie oznacza. Ja też programując mogę się spotkać, że już po 10 obiektach napotkam na granicę CPU bo przygotowywanie danych do tych obiektów tak zajęło mi CPU. Także w DX10. Nie widzę tego też na prezentacji ATI a tylko napisali sobie tak w artykule bez źródła. Sam nie wyobrażam sobie jak bym miał dziennikarzom tłumaczyć takie szczegóły techniczne. Pewnie też bym powiedział: Zobaczcie. Możemy tylko 500 takich dinozaurów narysować w DX9. W DX10 jak się sprężymy i mamy 2 rdzenie w CPU to już 550. Kapujecie ? smilies/wink.gif A przecież jakby zoptymalizować program to bym ich narysował 50000 już w DX9 ale to już niepotrzebne komplikowanie smilies/wink.gif


CYTAT
Druga rzecz. Sprawa dotyczy fragmentu:
W dokumencie nVidii na str.5 jest taka tabela:
Ten proces odpytywania to proces walidacji. Wykonywany jest on na styku API->sterowniki->sprzęt. Sprawdza on czy komendy i formaty danych wysłane przez aplikacje są poprawne.
Innymi słowy, sprowadza się to do tego, czy dana karta jest w stanie obsłużyć taki a nie inny efekt graficzny przy wykorzystaniu takich, a nie innych danych. Pamiętajmy, że nie wszystkie efekty muszą być zaimplementowane w karcie, a mimo to karta będzie zgodna z dana wersją DX. Ten proces walidacji jest całkowicie przezroczysty dla programisty piszącego grę - z jego punktu widzenia on nie istnieje.
W dokumencie jest mowa tylko o walidacji zasobów oraz zmian stanów urządzenia. Nie ma nic o walidacji komend zatem wcale nie chodzi o sprawdzanie czy karta jest w stanie obsłużyć dany efekt a o to czy coś złego nie stało się ze spójnością danych w niej umieszczonych i mających być zaraz użytych do wykonania zadania.
Bo sprawdzenia czy nagle karta nie straciła jakiejś funkcji nie ma przecież sensu. I dlaczego w DX10 by miało być inaczej ? I tak wszystkie te informacje o tym co potrafi karta graficzna są dostępne i sprawdzane przy inicjalizacji aplikacji. Z własnego doświadczenia wiem, że ustawianie stanów niepoprawnych dla karty, np. jakieś nieobsługiwane filtrowanie, albo pisanie poza alokowanym dla np. vertex buforów obszarami pamięci karty graficznej i tak jest wykonywane co doprowadza nierzadko do zwisu systemu albo niepożądanych efektów na ekranie.
Uwaga ciężki fragment - można ominąć smilies/bigsmile.gif
Gdyby jednak takie walidacje były robione za każdym odwołaniem do karty graficznej to przecież jeśli chodzi o funkcje to łatwo jest zrobić tak, że tylko za pierwszym wywołaniem w aplikacji danej funkcji karty graficznej w aplikacji jest wykonywana walidacja czy ta funkcja działa. Potem, po wykonaniu pierwszy raz tej funkcji walidacji wskaźnik do tej funkcji (w tablicy z wektorami poszczególnych funkcji generowanej i inicjowanej wskaźnikami z funkcjami walidacji raz na start aplikacji) jest zmieniany na wskaźnik do innej funkcji realizującej odpowiednio zadanie w zależności od wyniku funkcji walidacji. Jeśli okazało się, że zlecone zadanie nie może być zrealizowane przez kartę graficzną to wstawiamy wskaźnik z funkcją emulującą to zadanie w CPU albo blokujące jego wykonanie. A jeśli jednak okazało się, że zlecone zadanie karta może wykonać to wstawiamy wskaźnik do funkcji realizującej to zadanie bezpośrednio.
Za każdym kolejnym razem przy wykonywaniu zlecania wykonania tej funkcji przez aplikację karcie graficznej zamiast wykonywać się walidacja już wykona się od razu funkcja realizująca zadanie.
Tak to zadanie ja bym wykonał i pewnie dowolny programista. Jestem pewien, że w API DX jeśli są te walidacje dodatkowo wykonywane to właśnie w ten sposób. A taki sposób ma identyczną skuteczność a nie powoduje żadnego dodatkowego obciążenia.
Koniec ciężkiego kawałka smilies/smile.gif
Parząc na to z drugiej strony to można by zrozumieć, że teraz karty z DX10 będą mniej stabilne bo nie wykonywany jest dodatkowy proces walidacji... smilies/wink.gif
A przecież zaletą DX10 miało być(jest bo wygodne) coś wręcz przeciwnego. Programista nie musi robić już walidacji nawet przy inicjalizacji gry ! Nawet za bardzo nie ma jak. Zakłada się, że karta graficzna potrafi wszystko to co jest w wersji DX10 z którą jest zgodna. A to jak zadanie zostanie zrealizowane już kombinują API i sterownik. Dlaczego nie wspomina się, jak to wprowadza dodatkowe obciążenie na CPU ? Czy nie macie wrażenia, że istniejące (niewiele tego co prawda) aplikacje właśnie to pokazują. Pod DX10 rzeczy wydają się działać wolniej jeśli napisane identycznie jak pod DX9.


CYTAT
In DirectX 10, objects are validated when they are created rather than when they are
used. Since objects are only crated once, validation only occurs once. Compared to
DirectX 9 where objects are validated once for each use, this represents a huge
saving.
Dlaczego ? Tego się nie dowiemy. Tak chciał marketing bo w tłumaczenie by nikt nie uwierzył ? smilies/wink.gif Specjalnie tak napisane bo nie mieli czym zapchać miejsca. Po co np. bufor wierzchołków, zaalokowany w karcie graficznej i wypełniony miałby być za każdym razem testowany i analizowany przed jego narysowaniem ? To jest idiotyczne. Jeśli programista chce coś zmodyfikować w pamięci karty graficznej to najpierw blokuje dostęp do tego obszaru. Wówczas karta graficzna nie ma możliwości z niego korzystać i można swobodnie np. załadować teksturę. Potem obszar odblokowujemy i już karta może z niego korzystać. Nie ma więc możliwości aby coś się stało z tymi danymi i nie ma więc sensu tego za każdym razem testować. To jest testowane przez API w momencie pisania tych obszarów pamięci przez programistę za pomocą odpowiednich funkcji API. Każdy obszar ma definiowane swoje przeznaczenie i ustawiany format danych przez programistę zatem walidacja nie jest problemem dla API. I przede wszystkim pytanie bez odpowiedzi:
Dlaczego w DX10 miałoby być inaczej ? Co się stało takiego cudownego ? W/g mnie nic i twierdzę, że to ściema i jest jak było w DX9 lub nawet gorzej ze względu na to co pisałem o ułatwieniach dla programistów. Oczywiście nie jesteśmy tego w stanie sprawdzić bo program źródłowy API DX nie jest publicznie dostępny więc Nvidia mogłaby jeszcze pisać i pisać a i tak trudno jest to potwierdzić oficjalnie. Można jedynie sprawdzić w dokumentacji API ale tam czegoś takiego nie widziałem.

Chociaż po zastanowieniu to można by zmierzyć ilość cykli zajmowanych przez daną operację dla CPU w DX9 i w DX10 na tej samej karcie graficznej. To by było ciekawe... Może w wolnym czasie się w to pobawię smilies/smile.gif Chociaż coś przypomina mi się, że M$ zabronił w licencji o ile pamiętam publikowania jakichkolwiek testów i porównań systemu Vista na wydajność smilies/sad.gif Jeśli po testach okazałoby się, że DX10 jednak jest wolniejsze to by było zadarcie z potężnymi ludźmi smilies/wink.gif

Oczywiście programując wykorzystując specyficzne nowe elementy biblioteki DX10 jesteśmy w stanie faktycznie znacznie odciążyć CPU w stosunku do tego co było w DX9.

CYTAT
olejna sprawa dotyczy fragmentu:
Należy tutaj rozróżnić dwie rzeczy, faktycznie może tego dobrze nie rozgraniczyłem w arcie. Proces generowania grafiki z punkty widzenia programowego jest taki jak na pierwszym rysunku w artykule. Ale spójrzcie na architekturę np. GF 8800. Nie ma tam żadnych klasycznych jednostek Vertex i Pixel Shader. Są tylko zunifikowane uniwersalne miniprocesory, to one w zależności od potrzeb zamieniają się w moduły Vertex, Pixel lub Geometry. W takiej architekturze nie istnieje zatem klasyczny podział na specjalizowane jednostki. Jeśli karta ma zaś specjalizowane jednostki Vertex i Pixel wówczas, aby była zgodna z DX10 musi też mieć specjalizowane jednostki geometryczne. Oczywiście z punktu widzenia programisty, to co dzieje wewnątrz karty nie ma znaczenia i jest dla niego nie istotne - on wydaje polecenia modułom Vertex Pixel i Geometry, niezależnie od tego co się tam w środku naprawdę dzieję - mogą tam być nawet krasnoludki smilies/bigsmile.gif.
Teraz rozumiem. Mam nadzieję, że efekt tego nie będzie taki, że użytkownicy będę biegać i kupować kartę, która me specjalizowany Geometry Shader czyli kartę gorszą od takiej zunifikowanej smilies/wink.gif

CYTAT
Wracając zaś do nowych efektów w DX10, to te które wymieniłem w artykule są we wszystkich dokumentach wymienione jako nowe efekty wprowadzone do DX10. Zrzuty ekranowe je ilustrujące pochodzą zaś z programów demonstracyjnych dołączonych do pakiety DX10SDK, a programy umieszczone były w działach dotyczących nowości w DX10 i nie działają one pod DX9 - te które są wspólne dla ubu bibliotek działają i tu i tu i są też umieszczone w innym miejscu. Owszem nie wnoszą one wiele nowego, ale z dziennikarskiego obowiązku trzeba je było wydzielić i oddzielnie przedstawić.
Ja oczywiście domyśliłem się jak to było napisane. Ale czy takie przepisywanie słowo w słowo bez analizy czy to prawda u niezależnego eksperta jest w porządku ? Bo innych portali, które wydrukowały teksty na podstawie tych samych reklamówek bym nie polecał do sprawdzania informacji. Dla mnie jest to niestety ukryta reklama.

Podpis pod obrazkiem nowego "efektu" z jaszczurką:
CYTAT
Thanks to the combined power of DirectX 10 and the GeForce 8800 GTX, per-pixel displacement mapping can be rendered in real time, bring this lizard to life."
Typowe. Przecież nie jest napisane, że karta DX9 tego nie potrafi więc czytelnik przyjmuje automatycznie, że nie potrafi co nie musi być przecież prawdą.

CYTAT
Pozdrawiam
Również pozdrawiam i dziękuję za miłe i opanowane odpowiedzi bo generalnie mam niemiłe doświadczenia z wytykania "nieścisłości" na różnych portalach.
*Konto usunięte*2007.06.22, 15:01
CYTAT
Zależy co się określa jako DRM. Ale szyfrowanie pamięci i transmisji po magistralach ma być włączone zawsze. Najpierw Gutmann o tym sporo pisał: http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.html i to co napisał m$ w 99% potwierdził. Są tam też narzekania ATI, że muszą specjalnie projetkowac szprzęt do obsługi szyfrowania do wszystkiego. Ale może to oczywiście to ja i wszyscy moi znajomi coś źle zrozumieli. Jak lubisz Vistę to sobie używaj. Na zdrowie Leciutki, przyjemny, energooszczędny systemik Do tego dba aby użytkownik był zawsze legalny

Oj o tym DRM to sa bzdury^n smilies/smile.gif Link znany chyba wszystkim smilies/bigsmile.gif
I nie pisz, ze ms to potwierdzil bo nie potwierdzil. Cos konkretnego o drm http://windowsvistablog.com/blogs/windowsv...nd-answers.aspx
Dzialanie 2x wolniej to bylo dawno i nieprawda. smilies/smile.gif Nowe stery do kart sprawily, ze w wiekszosci przypadkow roznice sa marginalne ( miedzy xp a vista ).
*Konto usunięte*2007.06.22, 15:25
CYTAT
Oj o tym DRM to sa bzdury^n smilies/smile.gif Link znany chyba wszystkim smilies/bigsmile.gif
I nie pisz, ze ms to potwierdzil bo nie potwierdzil. Cos konkretnego o drm http://windowsvistablog.com/blogs/windowsv...nd-answers.aspx
Dzialanie 2x wolniej to bylo dawno i nieprawda. smilies/smile.gif Nowe stery do kart sprawily, ze w wiekszosci przypadkow roznice sa marginalne ( miedzy xp a vista ).
Widziałem te odpowiedzi też dawno temu ale przecież one właśnie niczemu nie zaprzeczyły i wymijająco odpowiedziały na tylko wybrane wątpliwości. Więc świat odbiera to jako potwierdził smilies/smile.gif Widać w komentarzach bloga przecież. Pierwszy z brzegu:
CYTAT
Posted by chickenboo
This essay has essentially CONFIRMED every horrible charge leveled at Vista by Gutmann. Using a bucket full of weasel words does nothing to convince me that Vista isn't screwing the consumer--or worse, the media/medical professional--for the sake of. . . of what? At the end of the day, the most infuriating thing about this crippleware is that it was done with such a blatant disregard for the consumer without a moment's hesitation. In what universe is it appropriate to give a content producer the power to turn off a user's hardware? How can you have no moral qualms with this?

A 2x wolniej parę dni temu ciągle było. Być może jak bym testował na kilkurdzeniowym najnowszym CPU + Nowiutka szybka karta graficzna to bym nie widział tej różnicy faktycznie. Zresztą ja się tym nie przejmuję. Mam Ubuntu i nie mam już problemów takich jak z Vista. Więc Vista już mnie nie interesuje smilies/tongue.gif
*Konto usunięte*2007.06.22, 15:32
CYTAT
Posted by chickenboo

A ktoz to jest ta wyrocznia chickenboo ? Taki znawca jak Poke od .net ? smilies/bigsmile.gif
Gutmann pisal wierutne bzdury o nieustannym spadku wydajnosci, a prawda jest taka, ze szyfrowanie wyystepuje tylko w przypadku mediow, ktore wymagaja mechanizmow chroniacych.
Zaloguj się, by móc komentować