Autor Wątek: Vertex & pixel shaders  (Przeczytany 4283 razy)

Offline HIUAUA

  • Użytkownik

# Styczeń 16, 2006, 23:30:01
Witam.
Jako ze jeszcze nigdy nie "wymyslalem" wlasnych tego typu rzeczy chcialbym sie dowiedziec, czy sa jakies problemy z przenosnoscia tego na karty nVidia czy ATI? Tzn. czy kod shadera np. zalezy od karty graficznej?
Nie chodzi mi tu o wersje(2,3 itp), tylko o sam, czysty kod.
No i czy to sie oplaca pisac takie cos, bo gry bez tego ( czyt. bardzo , amatorskie ?(to moj osobisty poglad, bez komentarza :P ) sa jakies takie, hm, monotonne/na jedno kopyto. :P

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Styczeń 17, 2006, 06:13:23
Cytuj
Tzn. czy kod shadera np. zalezy od karty graficznej?
To zależy od paru czynników.

* Pod OpenGL:
- shadery pisane pod ARB_vertex_program (vs1.1, chyba) i ARB_fragment_program (ps2.0) są przenośne (w sterownikach ATI był/jest pewien drobny bug dotyczący znaków nowej linii, ale to nie przeszkadzało)
- shadery pisane pod ATI_* i NV_* są kompletnie nie przenośne - zadziałają tylko na kartach danego producenta i czasami niektórych mniejszych producentów
- shadery pisane pod GLSL są w teorii przenośne, ale w praktyce jest inaczej - każda wersja sterownika ma własny kompilator i zdarzają się wypadki, że coś kompiluje się pod GF6600, a pod Radeonami nie chce. Problemy z przenośnością mogą być także pomiędzy różnymi kartami producenta (mogą mieć różne zestawy wewnętrznych instrukcji), ale te na pewno będą rzadsze.

* Pod Direct3D:
- shadery pisane w asmie są zwykle przenośne, niezależnie od wersji (jeżeli karta wspiera shadery w pewnej wersji, musi wspierać także wszystkie wcześniejsze wersje)
- HLSL - nie wiem dokładnie, ale kompilacją tego zajmuje się chyba Direct3D, więc w takim wypadku będzie to równie przenośne, co kod w asmie


Oczywiście nigdy nie wiadomo, jak dany kod zadziała na konkretnej kombinacji karta/wersja sterownika, ale zwykle powinno to działać. Omijałbym tylko GLSL, bo znajomy miał z tym problemy (pisząc pod OpenGL używam po prostu CG i kompiluję do ARBvp/ARBfp). :)

Offline Sir

  • Użytkownik

# Styczeń 17, 2006, 20:54:50
Rowniez uzywam CG i kompiluje pod ARBfp/vp i wiem ze jest na 100% przenosne pomiedzy chipami roznych producentow.

Offline HIUAUA

  • Użytkownik

# Styczeń 17, 2006, 23:13:49
Waszym zdaniem to na jakim etapie silnika wypadaloby wziac sie za shaderki?


Offline orzech

  • Użytkownik
    • homepage

# Styczeń 17, 2006, 23:27:03
Waszym zdaniem to na jakim etapie silnika wypadaloby wziac sie za shaderki?
IMHO, powinieneś je wziąć pod uwagę od samego początku. W wielu silnikach kluczową rolę odgrywają systemy 'materiałów', które pozwalają na łatwe zmienianie wyglądu obiektów na scenie. Poza rozmaitymi parametrami materiału (takimi jak przeźroczystość, pochłanianie światła, mieszanie kolorów ... ), każdy materiał jest zazwyczaj powiązany z odpowiednim shaderem. Rozsądne wkomponowanie materiałów w architekturę silnika na odpowiednio wczesnym etapie zaoszczędzi Ci kłopotów potem, a z pewnością pozwoli Ci zaprojektować bardziej efektywny silnik. O ile mi wiadomo, w najnowszych engine'ach już większość operacji wykonywanych jest na shaderach.

Pozdrawiam!

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Styczeń 18, 2006, 05:38:17
Cytuj
MHO, powinieneś je wziąć pod uwagę od samego początku.
Całkowicie się zgadzam. Oczywiście, żeby poprawnie to zrobić trzeba mieć o tym jakieś pojęcie przed pisaniem silnika.

Cytuj
każdy materiał jest zazwyczaj powiązany z odpowiednim shaderem
Czasem nawet z kilkoma (multipass rendering). Pozatym w wielu silnikach shadery są tworzone w locie z opisu materiału i oświetlającego je światła (np. inny shader będzie potrzebny, jeżeli światło ma przypisaną cubemapę i/lub maskę, a inny do zwykłego światła).

Offline migajek

  • Użytkownik

# Styczeń 18, 2006, 17:02:49
Skoro juz dyskusja o shaderach ... czy ktos moglby mi polecic jakies materialy dot.  shaderow dla arb_fragment_program ? :) 
//Było chyba na forum starego warsztatu ale niestety ...

Offline Hadrian W.

  • Użytkownik
    • Homepage

# Styczeń 18, 2006, 22:08:17
Zajrzyj do Linkowiska :)
Przykladowy adresik: http://www.shadertech.com/