Šta je novo?

Shader pitanje

3MaJ

Čuven
Učlanjen(a)
06.04.2001
Poruke
283
Poena
619
Јел можда неко зна како се у shader-у приступа mipmap нивоима (како се праве и како се читају)? Питање постављам јер (колико знам) аутоматско генерисање mipmap нивоа са floating point текстурама није могуће на сваком SM3.0 хардверу.
 
koliko sam ja gledao za 2.0 shadere nema nista od dohvatanja razlicitih nivoa mip-mapa vec ti jedinica za rad sa teksturama automatski uzima teksturu na osnovu hintova tipa linear_mipmap_linear i sl.
mozes da uradis eksplicitno slanjem vise nivoa tekstura preko sampler2D ..


sto se pravljenja tice mislim da sejderi ne prave mipmap-e vec da to radi cpu ( skaliranje sa filtriranjem i da on predaje grafickoj vec gotovu stvar )..

u svakom slucaju neznam da ti tacno odgovorim ali znam da yoyo hoce :)
pa da cujemo :)

p.s. ako nije tajna cemu?
 
Poslednja izmena:
eeeeeee... :) daleko sam ja od radiosity-ja... posalji neki screenshot kad dobijes prve rezultate....
 
3MaJ je napisao(la):
Јел можда неко зна како се у shader-у приступа mipmap нивоима (како се праве и како се читају)? Питање постављам јер (колико знам) аутоматско генерисање mipmap нивоа са floating point текстурама није могуће на сваком SM3.0 хардверу.

Iz shadera trenutno nemoze (moci ce uskoro sa GLSL revizijom 1.2). Mipmape mozes napraviti na CPU.

yooyo
 
jedno pitanjce... ako napravim float teksturu koja recimo ima zapakovane koordinate sfere ili sl. i ako recimo kazem grafickoj da rasterizuje jedan veliki quad preko celog ekrana ja bi u piksel shaderu mogao da ispitujem preseke zraka sa loptama...? kako da uradim rekurziju po preseku ( mislim na rekurzivni reytraceing)? jel podrzava neka graficka rekurziju ?
 
genuine je napisao(la):
kako da uradim rekurziju po preseku ( mislim na rekurzivni reytraceing)? jel podrzava neka graficka rekurziju ?

По спецификацији GLSL-а, резултат рекурзије је недефинисан.
Значи - не може.
 
Да ли неко можда зна колики је максимални offset који може да се наведе у texture fetch-у, а да не дође до значајнијег успорења?
На пример, када хоћу да дохватим вредност
Kod:
texture2D(tex,textureCoord+offset)
Колико то
Kod:
offset
сме да буде велико?

Ово питам јер контам да некаквог кеширања околине тексела сигурно има, али немам појма колико је то...
 
@Zmaj:
Mislim da vrednost za offset nema uticaja na brzinu. A ako ima.. onda sigurno zavisi od hw-a ispod. U svakom slucaju texture fetch je brzi bez offseta.

@genuine:
Rekurzija nije moguca jer GPU nema stek da sacuva povratne adrese i stanje registara. Moras da razmisljas drugacije, da raytrace algoritam izvrnes naopako i da paralelizujes neka izracunavanja. Umesto da ides u dubinu po pixelu, bolje je da odradis jednu dubinu za sve pixele, pa predji na sledecu dubinu... Procitaj dokument u GPU GEMS 2 (Octree texture on GPU http://download.nvidia.com/developer/GPU_Gems_2/CD/Index.html).. mozda ti neki trik bude koristan.
 
Jasno mi je.. pitanje je bilo cisto hipoteticki... hvala za info...
 
genuine je napisao(la):
eeeeeee... :) daleko sam ja od radiosity-ja... posalji neki screenshot kad dobijes prve rezultate....

4 секунде :)
 

Prilozi

  • Radiosity.jpg
    Radiosity.jpg
    86.7 KB · Pregleda: 182
@Zmaj:
wow.. ovo si ti uradio!? Svaka cast. Jel moze malo "technology" detalja?

yooyo
 
extra izgleda.... :) jednostavno , sta drugo nego reci nego мајсторски... :)
 
Ok...
Algoritam je view-independent, tojest, jednom kad se izracuna radiosity tekstura, svejedno je odakle se gleda sto se tice brzine renderinga. Scena se izdeli na jednake kvadratice, i svaki ima svoje mesto u jednoj velikoj teksturi koja belezi koliko je koji kvadratic primio svetlosne energije. Naravno, textura je HDR fp16. Ima jos jedna tekstura iste dimenzije, koja pamti koliko koji kvadratic poseduje "viska" energije, tojest, koliko treba da oda. Zavisno od kvaliteta, na svaki kvadratic otpada po 1x1 do 16x16 teksela iz obe teksture.

Prvo se obe teksture inicijalizuju sa 1.0 tamo gde su svetla, a sa 0.0 tamo gde nisu.

Onda se ova druga tekstura (koliko je energije preostalo) downscale-uje sve dok po kvadraticu ne ostane tacno jedan teksel.

Onda se cela scena ortografski izrenderuje u 1x1 piksel bafer, tako da se kao boja pamti indeks kvadratica, a kao depth vrednost - vrednost teksela iz ove smanjene teksture, tojest srednja vrednost energije koju kvadratic predaje okolini. Na kraju ce na "vrhu" da ostane kvadratic koji odaje najvise svetlosne energije. To CPU procita i tako zna koji mu je naredni izvor svetla. Ovo (4 bajta) je ujedno i jedina stvar koju CPU procita iz memorije graficke kartice tokom jednog prolaza.

U centar ovog kvadratica postavi se kamera, i scena se izrenderuje iz tog pogleda u depth buffer. Princip je isti kao sa projective shadows mapama.

Kvadratici ovih velikih tekstura koji nisu u senci update-uju se shodno udaljenosti od trenutnog izvora svetlosti (kvadratica koji odaje najvise energije), uglu koji zaklapaju sa njim, boji...

Ceo postupak se ponovi 100-500 puta, zavisno od zeljenog kvaliteta. Teoretski, resenje nikad ne konvergira, ali je u najvisem kvalitetu potrebno oko 1000 prolaza.

Programcic je (koliko sam ja mogao da procenim) shader-limited, tako da moze da bude benchmark umesto FEAR-a :)
 
Poslednja izmena:
Узгред, да ли је неко приметио да коришћење multiple targeta на ATI картицама доводи до драстичног успорења? Када користим излаз у 2 fp16 текстуре, брзина рендеринга ми опадне са 500 на 50 FPS... Писао сам им и потврдили су да је то "known issue" и да је успорење на страни CPU-а...
Да ли се на NV картицама јавља нешто слично?

Не разумем их. Рекламирају MRT још од серије 9700, а још га нису средили...
 
ATI je to... :)
Salim se.. i na NVidiji postoji usporenje prilikom koriscenja MRT-a ali nije tako drasticno. U jednom NV dokumentu o NV40 seriji, kazu da je koriscenje do 3 MRT-a ok, ali da ukljucivanjem 4. render targeta nastaje veci performance hit.
 
aaaaa, kako?!? Mislim, ja tu sedim i chekam satima da se odrenda neka slika sa GI-jem i Radiocity-jem u 3dsmax-u, a vi ovde prichate (i pravite) realtime engine sa time. Bash me zanima kada ce napokon neshto od ovoga da se zaista implementira u 3D programe - to bi zaista bila revolucija u industriji 3D grafike!
 
bice vrlo brzo.. za jedno 5 godina... :)
 
Nazad
Vrh Dno