[ Srki_82 @ 24.06.2005. 18:40 ] @
Do sad sam imao ASUS GeForce4 MX 440 with AGP8X/AGP/SSE/3DNOW! i sve je lepo radilo dok sam izbegavao shadere, ali hocu sad da radim i sa njima... a kartica bas i nije sjajna za to.
Koja kartica moze pristojno da radi sa HLSL, GLSL i Cg shaderima, a da nije mnogo skupa. Preporucili su mi (ASUS, MSI, Gigabyte...) GForce 6600GT... cena je oko 11.000,00 dinara... da li je vredi uzeti?
[ bkaradzic @ 24.06.2005. 19:41 ] @
Ukratko vredi. Imaćeš sve shader modele do verzije 3. Nije baš najbrža kartica, ali za učenje shadera je odlična.
[ Srki_82 @ 24.06.2005. 20:12 ] @
Da li je moguce (svaki... ili bar neki) shader prevesti nekako u kod koji ce raditi sa fixed function pipeline?
Cini mi se da sam negde procitao da je i fixed function pipeline neki default shader?
[ bkaradzic @ 24.06.2005. 22:26 ] @
Citat:
Srki_82: Da li je moguce (svaki... ili bar neki) shader prevesti nekako u kod koji ce raditi sa fixed function pipeline? Cini mi se da sam negde procitao da je i fixed function pipeline neki default shader?

Pa vertex shadere je lako odraditi na CPU. Čak šta više i preporučljivo ako koristiš multipass rendering. Za pixel shadere nema alternative ukoliko ne radiš nešto super jednostavno.

Moj savet ti je da se odlučiš ili za jedno ili za drugo i da ne brineš mnogo o tome da podržavaš sve moguće kombinacije. Ako ti je cilj da praviš komercijalan projekat i da ga prodaješ na tržištu nemoj ni da razmišljaš o shaderima (fixed pipeline je lowest common denominator ;). Ako hoćeš samo da učiš i da kasnije tražiš posao negde onda uči samo 2.0 i/ili 3.0 shadere.
[ Srki_82 @ 24.06.2005. 23:11 ] @
Pa, ima nekih efekata koje ne znam kako bih uradio sa fixed pipeline kao sto je npr. lelujanje vazduha kada svemirski broj iskljucuje nevidljivost... kao u Star Trek seriajilma ako ih je neko pratio
[ yooyo @ 25.06.2005. 10:21 ] @
Citat:
Srki_82: Pa, ima nekih efekata koje ne znam kako bih uradio sa fixed pipeline kao sto je npr. lelujanje vazduha kada svemirski broj iskljucuje nevidljivost... kao u Star Trek seriajilma ako ih je neko pratio :)


To se zove heat efekat. Generalno, takvi efekti se izvode pomocu "image compositing-a". Potrebna ti je pozadina (S0) sa providnim svemirskim brodom u zavisnosti od stepena nevidljivosti i slika sa "pretuberacijom" od broda (S1).

S0 renderujes u offscreen buffer (tj. neki render target).
Da bi dobio S1 moras rederovati na crnoj pozadini brod ili oblik nevidljivog polja u drugi offscreen buffer a texture su neke blesave sarene mape. Rezultat je cudna "sarena" mapa koja ce se koristiti u finalnom shaderu.

Napises pixel shader koji cita vrednost iz S1 i trenutne mapping koordinate offsetuje za tu vrednost. Novodobijene koordinate iskoristis za citanje iz S0 i to je finalna boja. Da bi upotrebio shader renderuj texture mapiran quad (4 vertexa) preko celog ekrana.

Na slican naci mozes izvesti glow, bloom ili blur efekte. Renderuj delove broda koji treba da daju glow efekat u malom offscreen bufferu, zatim bluruj taj buffer i na kraju za zalepi preko celog ekrana sa nekom alpha transparencijom na (S0). Blurovanje se izvodi iz vise prolaza.. prvo uradi horizontalni blur a zatim vertikalni blur.

btw... mozes da pokusas da blurujes (S1) pa da je posle toga koristis u finalnom shaderu. Efekat ce biti dosta meksi.

A sto se graficke tice... razmisli o 7800GTX :)

yooyo
[ bkaradzic @ 25.06.2005. 17:11 ] @
Citat:
yooyo: A sto se graficke tice... razmisli o 7800GTX :)

Obavezno SLI!!! :)

Haha... Šalim se. Najjeftinija 7800GTX ovde je $585.00. Čini mi se da je to malo bacanje para imajući u vidu kako brzo hardware zastareva. Ona 6600 je sasvim pristojna za učenje, nije baš najbrža, ali ima sve mogućnost.

Za te pare bolje je kupiti Sony PSP i Nintendo DS i učiti programiranje za te platforme. :)
[ Angel_of_Dark @ 26.06.2005. 00:10 ] @
Citat:
bkaradzic: Obavezno SLI!!! :)

Haha... Šalim se. Najjeftinija 7800GTX ovde je $585.00. Čini mi se da je to malo bacanje para imajući u vidu kako brzo hardware zastareva. Ona 6600 je sasvim pristojna za učenje, nije baš najbrža, ali ima sve mogućnost.

Za te pare bolje je kupiti Sony PSP i Nintendo DS i učiti programiranje za te platforme. :)

Za te pare je sigurno bolja kupovina 3d Labs Realizm 100 (apsolutni zakon na polju profi programiranja shadera) koji kosta oko 490 $

Ja inace mnogo vise od Nvidie preferiram Ati kartice, pogotovo seriju x800 ili 9800pro. Shaderi su dosta brzi i iako ne podrzava shadere 3.0 i 32bitni float mislim da to u ovom trenutku i nije tako bitno, a tebi su za ucenje sasvim dovoljni shaderi 2.0 koji su, ponavljam, brzi na ATI-ju (da ne spominjem bolji kvalitet antialiasinga, texture filteringa i pixel stader unita (pajplajna)) a kao velika prednost je i 3Dc kompresija normal mapa.
[ yooyo @ 26.06.2005. 20:11 ] @
Citat:
Angel_of_Dark: Za te pare je sigurno bolja kupovina 3d Labs Realizm 100 (apsolutni zakon na polju profi programiranja shadera) koji kosta oko 490 $

Ja inace mnogo vise od Nvidie preferiram Ati kartice, pogotovo seriju x800 ili 9800pro. Shaderi su dosta brzi i iako ne podrzava shadere 3.0 i 32bitni float mislim da to u ovom trenutku i nije tako bitno, a tebi su za ucenje sasvim dovoljni shaderi 2.0 koji su, ponavljam, brzi na ATI-ju (da ne spominjem bolji kvalitet antialiasinga, texture filteringa i pixel stader unita (pajplajna)) a kao velika prednost je i 3Dc kompresija normal mapa.


Zar za tricavih 95$ manje da kupi pro karticu na kojoj ne moze da odigra Doom3?
3d Labs realizm je jako dobar GPU, ali u skoro svim testovima 6800 je bolji. Kartica je za pro upotrebu u CAD i slicnim programima gde je apsolutni sampion u crtanju miliona linija. Nedostatak ARB VP/FP podrske ga cini neupotrebljivim za igre. DX driveri su spori i losi (ovo je prevashodo OpenGL kartica).

A sad ATI vs NVidia, ali sa programerske tacke gledista!!!!

A SM3.0 nema nikakve prednosti? Ma ajde...

ATI mozda jeste dobar ali on nudi samo DX9 specifikaciju i nista vise preko toga. Nedostatak shadow textura, PCF filteringa, Pixel buffer Objects (PBO) mehanizma za asinhroni transfer textura, nedostatak 32bit float preciznosti u pixel shaderima, ogranicenje u broju "dependent texture read" (max 4!!!?), nedostatak rect textura u hw-u, ocajni OpenGL driveri i zbog jos mnogo toga ATI za mene cini losu platformu za razvoj. Oko texture filteringa se i dalje vodi rat... I jedni i drugi varaju tako da je IQ relativna stvar i zavisi kako si podesio driver ili koji program koristis za poredjenje.

Sa druge strane na javnoj NVidia developer strani imas preko 10GB dokumantacije, primera, lekcija i tutoriala (NVSDK, NVSG, NV Photoshop plugins, Texture tools, Texture library, Melody, FX Composer, CG toolkit, Performance HUD & Kit, Maya & MAX plugins,...). Sve je to besplatno i vrlo korisno za nekoga ko uci 3d programiranje, pa cak i za napredne korisnike koji mogu da iscackaju neku informaciju kako da ubrzaju rendering. Inace 3Dc je podrzan i od strane NVidie. Doduse, driver ti to nece reci ali ako pokusas da poteras neki 3Dc primer lepo ce se renderovati i na NV 6x00 seriji.

yooyo

[Ovu poruku je menjao yooyo dana 26.06.2005. u 21:12 GMT+1]
[ Srki_82 @ 26.06.2005. 22:31 ] @
Cuo sam jos odavno da ATI kartice imaju problema sa OpenGL... cesto ljudi kad nadju na drajver koji im radi kako treba ni ne skidaju update da ne bi nesto ponovo prestalo da radi kako treba.
I ja bih vrlo rado voleo da mogu da kupim neku GeForce 7800, ali trenutno sam vrlo tanak s paricama zbog sezone rodjendana i zbog letovanja... tako da mi 6800GT nekako pruza prilicno dobre rezultate za novac koji sam dao.
Hvala na savetima...

BTW: Ima li neki besplatan program u kojem bih mogao da pravim i testiram shadere... nesto kao Effect Edit koji ide sa DX SDK?
[ Nothingman @ 26.06.2005. 23:06 ] @
Citat:
yooyo
To se zove heat efekat. Generalno, takvi efekti se izvode pomocu "image compositing-a". Potrebna ti je pozadina (S0) sa providnim svemirskim brodom u zavisnosti od stepena nevidljivosti i slika sa "pretuberacijom" od broda (S1).

S0 renderujes u offscreen buffer (tj. neki render target).
Da bi dobio S1 moras rederovati na crnoj pozadini brod ili oblik nevidljivog polja u drugi offscreen buffer a texture su neke blesave sarene mape. Rezultat je cudna "sarena" mapa koja ce se koristiti u finalnom shaderu.

Napises pixel shader koji cita vrednost iz S1 i trenutne mapping koordinate offsetuje za tu vrednost. Novodobijene koordinate iskoristis za citanje iz S0 i to je finalna boja. Da bi upotrebio shader renderuj texture mapiran quad (4 vertexa) preko celog ekrana.

Na slican naci mozes izvesti glow, bloom ili blur efekte. Renderuj delove broda koji treba da daju glow efekat u malom offscreen bufferu, zatim bluruj taj buffer i na kraju za zalepi preko celog ekrana sa nekom alpha transparencijom na (S0). Blurovanje se izvodi iz vise prolaza.. prvo uradi horizontalni blur a zatim vertikalni blur.

btw... mozes da pokusas da blurujes (S1) pa da je posle toga koristis u finalnom shaderu. Efekat ce biti dosta meksi.


A jel bi mogao da das neki link sa ovakvim forama?
Inache bilo bi odlichno kada bi svaki od vas pro likova odabrao jedan od svojih omiljenih efekata i objasnio ovde kako ga izvesti (na jedan ili vise nachina).
Mislim da bi to bio pun pogodak za forum.

Pozdrav!
[ bkaradzic @ 26.06.2005. 23:07 ] @
Citat:
Srki_82: BTW: Ima li neki besplatan program u kojem bih mogao da pravim i testiram shadere... nesto kao Effect Edit koji ide sa DX SDK?

ATI RenderMonkey je po meni najbolji... :)
http://www.ati.com/developer/rendermonkey/

Mada pošto imaš nVidia karticu onda FX Composer:
http://developer.nvidia.com/object/fx_composer_home.html

Takođe preporučujem ti ove dve knjige:
GPU Gems 1
GPU Gems 2
[ yooyo @ 27.06.2005. 02:12 ] @
Citat:
Srki_82: Cuo sam jos odavno da ATI kartice imaju problema sa OpenGL... cesto ljudi kad nadju na drajver koji im radi kako treba ni ne skidaju update da ne bi nesto ponovo prestalo da radi kako treba.
BTW: Ima li neki besplatan program u kojem bih mogao da pravim i testiram shadere... nesto kao Effect Edit koji ide sa DX SDK?


OpenGL na ATI-u je katastrofa. Poznati su bugovi u GLSL-u:
- glModelviewProjectionInverse matrica u vertex shaderu je ispravna, a u pixel shader transponovana (!?)
- Ako je slucajno ostao ukljucen GL_POINT_SMOOTH onda se pojavljuju greske u pixel shaderima
- Memorly leak kada se menja OpenGL context
...

Za ucenje GLSL-a je dobar i ShaderDesigner (www.typhoonlabs.com)


Citat:
Nothingman: A jel bi mogao da das neki link sa ovakvim forama?
Inache bilo bi odlichno kada bi svaki od vas pro likova odabrao jedan od svojih omiljenih efekata i objasnio ovde kako ga izvesti (na jedan ili vise nachina).
Mislim da bi to bio pun pogodak za forum.


Obecavam da cu cim uhvatim malo slobodnog vremena okaciti primer sa nekim efektima.

yooyo
[ dragansm @ 27.06.2005. 15:05 ] @
Pokusaj da izbunaris knjigu
ShaderX2: Shader Programming Tips & Tricks with DirectX 9
koja kruzi po netu u pdf formatu (Shaderx2.zip)
Citat:

bkaradzic:
Takođe preporučujem ti ove dve knjige:
GPU Gems 1
GPU Gems 2


Da se ne bacam u trosak nepotrebno, da li ove knjige postoje u elektronskoj formi.


[Ovu poruku je menjao dragansm dana 27.06.2005. u 16:06 GMT+1]
[ reject @ 27.06.2005. 16:34 ] @
Najbolje je da kupis knjigu (papir, ne .pdf) jer vredi svaki evric
koji ces dati, a i mnogo je prakticnije citati knjigu sa papira
nego sa ekrana. Ja sam sve knjige koje sam nalazio kao .pdf na
kraju stampao, sto je ispalo cak skuplje nego da sam ih kupio.
[ bkaradzic @ 27.06.2005. 17:17 ] @
Citat:
: Da se ne bacam u trosak nepotrebno, da li ove knjige postoje u elektronskoj formi.

Nepotreban trošak? Štediš na sopstvenom obrazovanju?

Price: $51.80
http://www.amazon.com/exec/obi...lance&s=books&n=507846

Price: $59.99
http://www.amazon.com/exec/obi...lance&s=books&n=507846

Ako ništa drugo, trebaš da kupiš originale zato što verovanto očekuješ da i drugi kupuju original proizvode koje sam praviš.
[ Nothingman @ 27.06.2005. 18:38 ] @
I ja mislim da svaku dobru knjigu treba kupiti jer je mnogo prakticnije za citanje, a i red je da trud autora bude nagradjen kako bi mogao i dalje da nastavi sa poslom koji dobro radi. Medjutim kljucna rech je "dobru".
Meni se ranije par puta desilo da bukvalno bacim pare kupujuci knjige preko amazona jer su knjige imale dobar rejting i nahvaljene su od brojnih chitalaca, a na kraju sam dobio knjige kod kojih nekih 50-60% sadrzine nema veze sa naslovom i onim o chemu bi trebalo u knjizi da se govori. Yebiga, tada nije bilo da se pogleda sadrzaj u okviru knjige, a recenzenti na amazonu i gamedev.net su dobrim delom totalno neobjektivni (da ne upotrebim neku grublju rech).
Generalno, uvek je pametno skinuti knjigu u .pdf formatu (ako postoji) i ako nakon prelistavanja iste vidite da je knjiga ok i da je to ono sto vam treba, onda bi je trebalo i kupiti. Chisto da ne bude da kupujemo maglu...
[ Nothingman @ 27.06.2005. 19:09 ] @
@bkaradzic

Video sam da je jedan od autora clanaka u knjizi "gpu gems" neko iz Piranha Bytes-a. Da li bi mogao da mi kazes samo o kojoj temi govori u svom clanku, ako ti je knjiga pri ruci?

Hvala unapred!
[ Srki_82 @ 27.06.2005. 20:56 ] @
Kad vec pricamo o shaderima moze li neko da mi objasni za sta su zaduzeni vertex, a za sta pixel shaderi... sta dobijaju na ulazu (da li uvek iste podetke tipa koordinata, textura, boja, normala... ili moze bilo sta), a sta daju na izlazu?
[ yooyo @ 28.06.2005. 00:17 ] @
Citat:
Srki_82: Kad vec pricamo o shaderima moze li neko da mi objasni za sta su zaduzeni vertex, a za sta pixel shaderi... sta dobijaju na ulazu (da li uvek iste podetke tipa koordinata, textura, boja, normala... ili moze bilo sta), a sta daju na izlazu?


Vertex shader, kao sto im ime kaze, obradjuju vertexe. Vertex nije samo tacka u prostoru vec moze da ima i dodatne atribute (boja, normala, binormala, tangenta, N texture koordinata, pa cak i poptuno proizvoljne atribute). Danasnji hardware je uglavnom ogranicen na 15 atributa. Zadatak vertex shadera je da izvrsi neke operacije nad ulaznim atributima i da rezultate tih operacija prosledi rasterizatoru.

Rasterizator je deo GPU-a koji rasterizuje primitivu (trougao, linija, tacka, point sprite) i za svaki pixel primitive poziva pixel (tj. fragment) shader. Rasterizator ima zadatak da rezultat vertex shadera interpolira duz primitive i da na ulazu i pixel shader generise set "promenljivih" koje se koriste za proracun boje u pixel shaderu.

Pixel shader je program koji se poziva za svaki pixel primitive koja se renderuje. Njegov zadatak je da izracuna boju pixela koji ce se upisati u framebuffer. Ova boja nije finalna, vec prolazi kroz opcionu blending i alpha, Z i stencil funkciju pre upisa u framebuffer. Znaci, koriscenjem pixel shader nemozete praviti svoje custom blending operacije. Zbog toga se cesto upotrebljava termin fragment shader.

Vertex i pixel (fragment) shaderi mogu da imaju globalne konstantne promenljive (uniform) koje se koriste za kontrolu efekta.

Evo malog primera u GLSL-u. U pitanju je parallax shader (poznatiji kao virtuelni displace mapping). Ovo je verzija bez proracuna svetla (cisto da bude jasnije):

Code:

// Vertex shader
// ovo su custom vertex attributi
attribute vec3 tangent;
attribute vec3 binormal;

// ovo je spisak promenljivih koje se interpoliraju u kroz rasterizator
varying vec3 eyeVec;

void main() 

     gl_TexCoord[0] = gl_MultiTexCoord0;
 
// racuna se pozicija vertexa u prostoru posmatraca
     vec4 Vertex_ModelView = gl_ModelViewMatrix * gl_Vertex; 
// a zatim se transformise u texture space
     eyeVec = vec3(-Vertex_ModelView) * mat3(tangent, binormal, gl_Normal);  

// standarda transformacija pozicije vertexa
     gl_Position = ftransform(); 
}




// Fragment (pixel) shader

// ulazni parametri shadera koji su konstantni za vreme rasterizacije
uniform vec2 scaleBias;       // parametri za intenzitet bump-a

// texture
uniform sampler2D basetex;  // RGB textura 
uniform sampler2D heightmap; // grayscale height mapa

// ponovo definisemo spisak promenljivih koje se interpoliraju u kroz rasterizator
varying vec3 eyeVec;

void main()
{
    vec2 srcUV = gl_TexCoord[0].xy;
// procitaj vrednost height mape i koriguj intenzitet
    float height = texture2D(heightmap, srcUV).r;
    float v = height * scaleBias[0] - scaleBias[1];

// zatim se po eye vektoru u texturi pomeri za intenzitet bumpa
    vec3 eye = normalize(eyeVec);
    vec2 texUV = srcUV + (eye.xy * v);        
        
// na ovaj nacin se dobija nova maping koordinata (texUV)
// sada samo treba procitati vrednost iz prave texture
    vec3 rgb = texture2D(basetex, texUV).rgb;

// i to je nasa finalna boja
   gl_FragColor = vec4(rgb, 1.0);
}




yooyo
[ bkaradzic @ 28.06.2005. 18:31 ] @
Citat:
Nothingman: Video sam da je jedan od autora clanaka u knjizi "gpu gems" neko iz Piranha Bytes-a. Da li bi mogao da mi kazes samo o kojoj temi govori u svom clanku, ako ti je knjiga pri ruci?


Na ovom linku imaš sadržaj (pogledaj poglavlje GEOMETRIC COMPLEXITY):
http://developer.nvidia.com/object/gpu_gems_2_home.html

Optimizing Resource Management with Multi-Streaming
Kurt Pelzer and Oliver Hoeller (Piranha Bytes)
[ Nothingman @ 28.06.2005. 20:42 ] @
Jos jednom hvala!
[ yooyo @ 29.06.2005. 01:02 ] @
Java Cool Dude je lik koji u zadnje vreme objavljuje dosta novih demoa i efekata. Primeri su u OpenGL-u. Njegov site mozete pogledati na adresi http://www.realityflux.com/abba/

Humus je lik koji sada radi za ATI. Radi slicne stvari kao i Java Cool Dude ali je i produktivniji i to radi vec duze vremena. Primeri su pisani za D3D ili OpenGL. Njegov site je http://www.humus.ca/

I na kraju Zaprjagaev Alexander iz Rusije (1982 godiste!). Kao i prethodna dvojica, napisao je gomilu demoa i tutoriala. Njegova platforma je Linux, ali svi demo se mogu prevesti pod Windowsima. Primeri su u OpenGL-u. Njegov site je http://frustum.org/3d/

Svi ovi likovi daju source code uz svoje efekte. Njihovi sajtovi su zaista fenomanlni izvor informacija o naprednim tehnikama renderinga.

yooyo