3DHR.net

GPU renderer

Joyo · 12 · 4244

Offline Joyo

  • Jr. Member
  • **
    • Posts: 11
    • TORUS Studio
Kao što svi znate, i kao što vjerovatno svih vas iritira jest sporost renderer-a. Tj. ono početničko pitanje: "A zašto mi se slika odmah ne prikaže? A zašto zašto? Zašto mora ići tako sporo?".
Odgovor iz programerske perspektive bi bio: "Jer sve ide preko procesora!!!". Dakle, svaki piksel se izračunava pomoću CPU, a ne grafičke kartice. I tako rade svi rendereri. Skoro svi osim jednog koji kombinira CPU i GPU, a to je Gelato. Svaka čast njemu ali je i on prespor.
Uglavnom, svi koji prate razvoj real-time grafike, čuli su za razvoj GPU (neznam kako bi to nazvao) tehnologije PIXEL SHADERI. Grafika igara iz dana u dan se poboljšava pomoću korištenja shadera želeći se približiti grafici CPU renderera. Sadašnja verzija je 3.0 (GeForce 6000 pa nadalje).

E sad, logično je da kad rade CPU i GPU zajedno, sve ide brže, a pošto se sve dade isprogramirati kroz Pixel Shadere, moguće je i izraditi jedan renderer koji bi radio na toj bazi. Evo jedan primjer - Radiosity pomoću shadera: http://berengui.club.fr/rtrad.html, Raytracing: http://www.realtime-raytracing.com/; a primjera ima mnogo...
Pa ako ima kakvih programera, voljnih da isprogramiramo jedan GPU/CPU renderer javite se. Ne treba to biti neki profi renderer, možemo samo napraviti nešto s jednostavnom renderiranjem (bez GI i kaustike i sl.). I sad zamislite, taj renderer bi prikazivao jednostavne scene u par milisekundi, a složene u max 30ak sekundi. Zar se to ne isplati. A kvaliteta se neće nužno smanjivati ako se dobro isprogramira.

Inače, što vi mislite o tome?
« Last Edit: April 29, 2006, 12:26:57 AM by Joyo »
možda


Offline Mate Maksan

  • Hero Member
  • *****
    • Posts: 1788
  • fanatic
    • moja birtija
Ideja je odlična, samo ne znam dal se netko bavi programiranjem tu :-\


Offline CyberDog

  • Hero Member
  • *****
    • Posts: 448
To bi bilo zestoko low level programiranje ako zelis matematicki tocan render, preko directX api-a nije problem iskoristiti graficku ali na taj nacin ostavljas prostora varijacijama rendera.
Uglavnom radilo bi se o jednom debelom projektu i nije pitanje da li bi to prosjecan C/C++ programer mogao napraviti vec koliko bi vremena trebalo za neku priblizno upotrebljivu aplikaciju... Da ne govorim kako prvi rezultat definitivno ne bi bio "plugin za max" vec jako izbirljiv standalone renderer.

Nisam pogledao detalje o ovim projektima, ali ne vidim smisla u koristenju funkcija iz dx api-a za primjerice kalkulaciju refleksija jer rezultat nece biti 100% ispravan (dx-u je cilj eye candy, ne matematicka preciznost) i rezultat ce biti razlicit na drugacijim modelima (a da ne govorim proizvodjacima) grafickih kartica, a ako tip zaobilazi dx i koristi graficku za raw power i pomoc procesoru, svaka mu cast.

Takodjer ne znam kako bi CPU i graficka zajedno suradjivali osim na principu male render farme, tj da svaki dobije svoj dio scene, racunica ubrzanja bi ti bila onoliko mhz koliko ima graficka. Koliko sam uspio shvatiti ovi primjeri koje si dao koriste iskljucivo graficku za renderiranje, cpu se odmara, ispravi me ako grijesim.


Offline Joyo

  • Jr. Member
  • **
    • Posts: 11
    • TORUS Studio
Da, imaš pravo, ali to sad si opisivao probleme stare tehnologije!!!, a ja sam upravo tupio od Pixel Shaderima. Dakle, radi se o HLSL i Cg (za OpenGL je GLSL) jezicima. Bože moj, malo progooglaj.
Ako si ikad radio s bilo kojim rendererom podrobnije, znaš da svaki ima svoj skriptni jezik za materijale i post-processing efekte. E sad, ovi HLSL i to su takvi skriptni "jezici". A svakom verzijom su sve savršeniji. I sad, kad se kombinira renderiranje preko shadera s dodatnim proračunavanjem CPUa za neke stvari, dobije se ono što se kaže real-time rendering. Već su osmislili oni iz Far Cry da naprave iz svog level editora editor za radjenje nekih real-time filmova. Glupo... Bilo bi puno pametnije primjenit to kao plug-in renderer za 3D alate.
A render farma. ona ili nebi bila potrebna, jerbo bi svaki komp mogao renderirat svoj dio animacije jer ide sve brzo. A ako je potrebna onda jednostavno isprogramirati da svaki komp u isto vrijeme renderira jedan (svoj) frame.
Inače, što govoriš da dx krivo izračunava refleksije... Bit je u tome kako TI napišeš funkcije za reflektiranje. Dakle ako je krivo onda je do programera (možda zbog uštede ili jer je glup), nema veze do proizvođača i sl., well duh.

@Mate, hvala na potpori. Neznan ni ja ima li koji programer ovdje. Bitno je pokušati.

ps. Imaš pravo, http://www.realtime-raytracing.com je krivi primjer. Koriste svoj hardver. Evo jedna lijepa stranica za objašnjenja: http://www.cgshaders.org .
« Last Edit: May 01, 2006, 11:11:10 AM by Joyo »
možda


Offline CyberDog

  • Hero Member
  • *****
    • Posts: 448
Istina, nece netko sa tako kompleksnim zadatkom koristiti standardnu funkciju za raytracing iz dx api-a (ili OGL-a), ali time programer mora vrlo dobro poznavati sam HW, jer "zaobici" api nije macji kasalj.

Uglavnom pogledao sam link i cini se vrlo zanimljivim, rade na najnizoj razini bez ikakvog 3rd party software-a (istina, ShaderGen je samo preuredjeni OGL ali opet, na najnizoj razini).

Milsim da mi se shadergen cini najnaprednjijim do sada (a da ne govorim cross platform), preporuka da pocmes od njega i zaboravis DX, ima nesto u ovome :)


Offline Joyo

  • Jr. Member
  • **
    • Posts: 11
    • TORUS Studio
ShaderGen je OK program. Ali moj je bolji hehe. Moj je čak polu programatski, polu dijagramski. Evo slikica:



A takvi su programi samo za "pomoć" pri izradi shadera. Bitno je napraviti svoj render engine koji će koristite te sve shadere.
Ja se isto slažem i klanjam se OpenGLu, ali jednostavno mi se neda učit ga jer znam DX više manje. Tko će sad učit sve novo... Ali možda čak to i učinim zbog ovoga lijepog real-time raytracing OpenGL engine: http://www.openrt.de/gallery.php.
možda


Offline CyberDog

  • Hero Member
  • *****
    • Posts: 448
Jako fino!

Dakle jos nisi poceo sam engine kodirati? Planiras i skriptni jezik paralelno razviijati?
Isto bi bilo bolje da krenes sa OpenGL-om i ucis usput jer tako i tako ces daleko manje standardnih funkcija koristiti nego kod recimo programiranja engine-a za neku igru, pa ti je zapravo svejedno, a imati ces cross platform support u startu (ako ju odrzis u samoj aplikaciji) :)


Offline Joyo

  • Jr. Member
  • **
    • Posts: 11
    • TORUS Studio
Ne, ovako. Inače, ja sam programer i wannabe modeler. I ovaj program služi za rađenje shadera, radio sam ga odavno, nevezano za ovu ludu ideju koju iman od nedavno. Program je prvenstveno za game programere.

Quote
Dakle jos nisi poceo sam engine kodirati?
Ma kakav engine. Ovo je moj program koji nema veze s ovom idejom. Kao ni Shadergen ??? što si ga ti naveo.   :D

Quote
Planiras i skriptni jezik paralelno razviijati?
Inače, shaderi jesu skriptni jezik koje grafička kompajlira, nema razloga raditi sam svoj jezik jer HLSL je zakon za DX. Cg je zastario (Far Cry).

Bilo bi super kad bi netko to htio raditi sa menon jer ideja je stvarno ok. Ne da mi se tražit neke strance jer neće na kraju biti ništa od toga. A ovakva bi se lako mogla i unovčit jer svi žele brzi i efektivni renderer.
možda


Offline CyberDog

  • Hero Member
  • *****
    • Posts: 448
Pricamo o render engine-u  ;) I u toj domeni sam te pitao da li planiras i neki custom skriptni jezik za isti razvijati?

Uglavnom, vazno je da si motiviran, i nista ti ne brani da sam pocmes sakljupljati resurse, malo draft-ati funkcije i class-ove pa se kasnije ljudi lako ukljuce.

Ja bi ti tu mogao jako malo pomoci, svo iskustvo u toj grani programiranja mi se svodi na postavljanje grafickog prozora, kamere i renadanje kvadrata u direct drawu, standardne funkcije ;D i to cisto iz znatizelje.

Sretno!  ;)


Offline Joyo

  • Jr. Member
  • **
    • Posts: 11
    • TORUS Studio
Quote
Pricamo o render engine-u I u toj domeni sam te pitao da li planiras i neki custom skriptni jezik za isti razvijati?

Aha... Dakle, za GPU materijale i efekte HLSL kao što rekoh. A jedan od razloga zašto obožavam .NET (tj. Mono). i vjerovatno će bit isprogramirano u njemu jest taj što skriptni jezik je ujedno i API (C#, VB.NET, J#,... - koji god jezik korisnik hoće) koji se kompajla u run-timeu i ne gubi se na brzini. Tako da će korisnik ovog renderera moć ga nadogradit u bilo što - od igrice do internet virusa. Ako si programer onda znaš o čemen govorim (o moći .NETa). Dakle, na ovom projektu naglasak mora biti na brzini.

Quote
Uglavnom, vazno je da si motiviran, i nista ti ne brani da sam pocmes sakljupljati resurse, malo draft-ati funkcije i class-ove pa se kasnije ljudi lako ukljuce.
Motiviran jesam, ali bez drugih neću sam radit ovako velik projekt. Bar ne bez još jednog čovjeka koji rastura 3D programiranje.
možda


Offline CyberDog

  • Hero Member
  • *****
    • Posts: 448
Ne, nemam iskustva sa .NET-om, vise sam linux-as, eto moje zelje o crossplatform programu... smrc.


Offline Joyo

  • Jr. Member
  • **
    • Posts: 11
    • TORUS Studio
Nema brige, Mono je za linux. Radit će i na njemu. Samo... hmm... DirectX... Neznam, treba malo razradit ovu ideju i projekt...
možda