Šta je novo?

RAYTRACING - stanje stvari

Nedjo

Čuven
VIP član
Učlanjen(a)
12.07.2000
Poruke
6,934
Poena
800
Prosle nedelje, odredjeni publicitet je dobio clanak o modifikacijama id-ove graficke masine u cilju omogucavanja raytraceovanja umesto reserizacije:

http://www.pcper.com/article.php?aid=334&type=expert&pid=1

Zanimljiv rad nemackog studenta. No, raytracing je jos godinama udaljen od real-time upotebe u grama. Najkonciznije izneseno misljenje o tome dao je Majk Hjuston, jedan od pionira u GPGPU vodama:
There is also an upcoming I3D paper about GPU raytracing using optimized kd-tree algorithms and static scenes. (I happen to be one of the authors, and the work is an evolution of the Foley et al. work). The short answer is that GPUs are faster than a single CPU, but they aren't great at raytracing because of divergence in execution between rays. As the execution traces diverge in the acceleration structures, you end up with a lot of SIMD execution stalls. GPUs also have to currently to a bunch of extra work because there isn't an effective way to do a stack, so it has to be emulated or worked around via algorithm modifications. Sadly, the G80's 16KB of global memory between the threads isn't very helpful as it's too small to really do a stack for the number of parallel execution contexts to run efficiently, however, there might be fruit here. We currently are talking ~19Mray/s on an X1900XTX (Conference room, shadow rays), and about the same on a G80 with DirectX and the current state of the drivers and shader compilers. Using simpiler scenes, we can execute at much faster rates, but those aren't realistic. (All the current published fast raytracing numbers also do not do anything but trivial shading, but GPUs obviously do well here...) With heavier tuning via CTM/CUDA, we might be able to squeeze out a little more, but unless we can regain ray coherence, it's difficult to do leaps and bounds better.

Cell is actually a raytracing monster, compared to other non-custom architectures, in certain situations. The Saarland folks (and others including Stanford) have Cell raytracers >60Mrays/s for primary rays. Multi-core CPUs are also showing great promise as people are showing >5Mrays/s per processor for comparable designs (i.e. no tricks that only really work for primary rays), and there is impressive work from Intel on really optimizing the heck out of raytracing on CPUs. My main concern about CPU implementations is their ability to shade fast. It's going to be interesting to see hybrid CPU/GPU implementations here...

In our I3D paper, we argue that what you would likely do on a GPU is rasterize the primary hits, and raytrace secondary effects such as shadows, reflections, and refractions depending on your ray/frame rate budget. We have a demonstration implementation in Direct3D (Brook + D3D) as well as CTM+GL that demonstrates this hybrid system, and it was running in the ATI booth at SIGGRAPH and shown during the CTM presentations. The paper should go up when finalized in late January and will be presented at I3D 2007 by Daniel Horn. For raytracing to really get faster on GPUs, we need a way to deal with the cost of instruction divergence, and more importantly perhaps, ways to really build complex data structures.

Regardless, we are still quite aways away from the projected 400Mray/s needed to approach the performance of current games.
(I can't remember who stated this as a rough lower bound, but it was in the SIGGRAPH 2006 raytracing course.) We need a few more years of Moore's Law and a few algorithm tricks, mostly involving dynamic scenes, and things will start to get interesting. But, rasterization will also increase at or above Moore's Law as well and game developers will continue to find tricks and hacks to make things look right, or use partial raytracing solutions like POM.
 
Poslednja izmena:
jako interesantan clanak nedjo. vec sam postovao negde na forumu link ka www.rapidmind.net - oni u sustini imaju razvojno okruzenje koje podrzava i Cell i GPU a jedan od partenra im je RTT AG (licno nikad cuo :)) koja je razvila software za RealTime raytracing predstavljen na SIGGRAPHu. Na sajtu se mogu pronaci i podaci o brzini ...
komplikovano je da prenosim, najbolje je da sami pogledate tabelu u PDF fajlu. Ono sto je interesantno je da se brzina linearno povecava kako se dodaju SPEs-ovi, odnosno Cellovi. Za sada je doduse moguce imati do 16SPEs...
 
Znaci stize fotorealistika......svaka cast....
 
i da umesto sto navodi tomahawke ray trace-je igre ... :D :D :D

znachi ipak je G80 G80 a Cell Cell ;)
 
Pa 8-way CELL server bi mogao da je izvuce u realnom vremenu!
nadam se da ce neko naci nacin da umrezi 8 PS3-ki :)
Da ali zamisli kakva bi magistrala trebala da to paralelno proradi, zato ne verujem da bi 8 takvih moglo da da performanse koje su jednake cell x8.
 
pa netreba ti nesto preterano jaka magistrala posto procesori barem u rejtrejsingu ne razmenjuju skoro nikakve informacije... treba samo dovoljno kesa... mada u sustini tu je prica sasvim drugacija.. umesto da imas loptu koja ima 1000 trouglova da bi izgledala skroz okrugla ti imas jednu jednacinu koja opisuje loptu kao povrs i to ti je (X-X0)^2 + (Y-Y0)^+(Z-Z0)^2 = R^2 i time imas maksimalno kvalitetnu loptu... isto moze da se uradi i za druge povrsi tipa konus , valjak i sl.. da ne pricam o nurbsovima i sl.. tako da je kolicina podataka tu znatno manja za opis istis stvari nego kod standardnih igrica koje koriste aproksimacije trouglovima..
 
pa netreba ti nesto preterano jaka magistrala posto procesori barem u rejtrejsingu ne razmenjuju skoro nikakve informacije... treba samo dovoljno kesa... mada u sustini tu je prica sasvim drugacija.. umesto da imas loptu koja ima 1000 trouglova da bi izgledala skroz okrugla ti imas jednu jednacinu koja opisuje loptu kao povrs i to ti je (X-X0)^2 + (Y-Y0)^+(Z-Z0)^2 = R^2 i time imas maksimalno kvalitetnu loptu... isto moze da se uradi i za druge povrsi tipa konus , valjak i sl.. da ne pricam o nurbsovima i sl.. tako da je kolicina podataka tu znatno manja za opis istis stvari nego kod standardnih igrica koje koriste aproksimacije trouglovima..
A za koji algoirtam je ranije pisano da kada se jednom izvrsi distribucija svetla mozes maltene interaktivno tj. real time da menjas pogled dokle god se svetlo ne promeni bilo po intenzitetu ili po poziciji...
 
Pre nekoliko meseci sam video info da neki vec koriste gomilu PS3 u kombinaciji sa PowerPC procesorima, jer dobiju najvishe za najmanje para. Nije me neshto previshe interesovalo pa sad ne znam gde da trazim chlanak.
 
Ipak ovo nije primenljivo na igre...jos puuuuno vremena.Previse se odmaklo u simuliranju na druge nacine i optimizacijama da bi se sad krnuo raytracing...mozda jednog dana, na enterprajzu...
Ali zato moz' da bude kickass za renderovanje animacija u kucnoj radinosti...mmmm Lukase, watch your ass...
 
Kolega sa faxa (Dejan Milosavljevic) i ja smo kao tudenti pravili raytracing. To je bio opako zeznut posao... '92-94', inflacija, spore masine, DOS (sa ogranicenjima), hercules graficka kartica (crno-belo, nema sivo), zeleni monitor, pa ipak.. uspeli smo da napravimo nesto. Evo malo slicica

http://www.ddmrm.com/graph/ice/gallery/misc.html

Raytracer je podrzavao svakakve modele pa cak crtanje funkcija f(x,y) ili f(x,y,z), fraktale, imao je podrsku za razlicite vrste kamera, refleksije, refrakcije, bump mapping, proceduralne texture, AA, ... Nismo imali nikakav 3d editor... modelovalo se u C-u, tj. kuckas koordinate objekata i njihove osobine, ukucas poziciju kamere, pokrenes prog i cekas... cekas... cekas... i rezultat je TGA slika koju mozes da gledas sa custom made viewerom na zelenom monitoru.

Promuvajte se po sajtu mog kolege Dejana (molio bih... bez komentara na dizajn sajta) pa pogledajte jos neke slicice...
 
Neverovatno! Zbog cega ste se odlucili da napisete raytracer?
Ja sam kao klinac dva puta startovao PovRay ali posle pola sata i dve iscrtane linije sam ga ugasio :)

Secam se kad sam startovao Heaven Seven na svom prvom PC-ju K6II/400MHz bilo je wow! jeste da je sve islo par frame-a na sekundu ali je ipak moglo da se gleda u 320*240 ;) pokrenuo sam ga i pre neki dan na P4 DC/3.4GHz u 800*600 i letiiiiii... :D (citao sam negde ili intervju ili tutorial za optimizaciju realtime RT-a, ima stvarno zanimljivih stvari, izmedju ostalog i senke i refleksije koje se racunaju u dva puta manjoj rezoluciji pa se onda interpolacijom dobijaju onako nepricizne refleksije/senke kao sto opisuje onaj nemac ciji je link nedjo postovao u 1# postu...)

mozda je interesantno pogledati i RealStorm - mozda ce na danasnjim masinama leteti ovaj test/demo.... :D pored toga interesantan je sajt, ima dosta informacija...
 
@kovacm:
Pa.. bili smo studenti i interesovali smo se za kompjutersku grafiku. U to vreme nije postojala nijedna graficka biblioteka pa smo pisali bukvalno sve.. od crtanja tacke, linije, kruga pa do kompleksnijih stvari kao popunjavanje trougla sa texturom. Raytracing je dosao kao jos jedna od interesantnih stvari kompjuterske grafike. Pravili smo razne optimizacije za ubrzanje ray-hit algoritma. Sve smo radili u C-u. U pocetku u Turbo C-u 2.0 a kasnije smo presli na Watcom C 10 i 11. U nekom trenutku nas fax (PMF) je dobio PC lab sa kolor monitorima pa smo imali sansu da vidimo nase slike u boji!
 
nice!

Da li mozes da mi kazes sta radis sad u "Centroid Motion Capture"-u (mozes i na PM ako ti nije problem)?
 
yooyo@ nesto me cisto zanima sa tehnicke strane, jel ste koristili tada fixed point matematiku? jel graficki mod bio mozda mod 13h? :) to se secam ko kroz maglu. znam da je bilo mov ax,13h ; int 10h za ulazak u taj mod i da pocinje video mem. na adresi 0xa0000 odnosno a000:0000...
inace watcom c++ je bio najjaci c++ kompajler za dos u to vreme sa cuvenim ekstenderom dos4gw..eeeee

sto se raytracing-a tice mislim da treba jos par godina.. treba dobar hardware za to
 
Poslednja izmena:
@genuine:
ne.. koristili smo float.. fixed je ponekad neprecizan. Sto se grafickog moda tice... nije ga bilo u pocetku.. snimalo smo TGA file pa smo sa ImageAlchemy gledali file (kad smo dobili kolor mon na faxu). Posle su stigle VESA graficke kartice pa sam pravio true color modove.

Nije samo hw u pitanju... veliki problem je naci sta je zrak prvo pogodio. Ako je u pitanju trouglasta geometrija onda to moze da bude komplikovano. Ako su u pitanju matematicki definisane povrsi onda je to dosta brze i lakse ali je modelovanje pomocu funkcija prakticno nemoguce.

Secam se kad smo pravili raytracinig beizerovog patch-a (parametarska povrs koja se sastoji od 16 kontrolnih tacaka). Presek prave i parametarske povrsi je mnogo zayebana stvar pa smo problem resili iterativno.
 
ja sam igrom slucaja rejtrejsovao najprostiji cilindar koji ima bazise razlicitih poluprecnika sa poluloptama na krajevima .. trebalo mi je da ispitam da li je zrak pogodio coveka u ruku ... trebalo mi je pola dana da sredim formule u matematici 4 (valjda) i prekucavanje istih je bila prava nocna mora...
u Computer Graphics (J.Foley , van Dam .. ) se nisu nesto pretrgli o tome ali sam video kod druga u nekoj Advanced Computer Graphics (ili tako nesto ) bas puno stvari (u vezi rejtrejsinga)... ako imas neku za preporuku za knjigu mogao bih da procitam u slobodno vreme :)
mada sa tim rejtrejsingom je valjda najvaznije da se prostor isparticionise da se eliminisu nepotrebna ispitivanja i sve to zapakuje u lepu hijerarhiju...
koliko sam gledao sa strane grafickih mi sve nekako lici na dovijanje.. jednostavno nisu pravljene za to pa to mu je ...
 
ako smem da se vratim na temu :) postavio bih pitanje -čemu raytracing u igrama ? Pogotovo ako je zahtevniji i sporiji. Sta fali sadasnjem metodu rasterizacije ?
 
tek mi sad nista nije jasno, sve sto pise u 'Pros' je vec uradjeno sa grafickim kartama, ostaju samo 'Cons'
 
Ovaj lik prica kao da jos uvek igramo Quake2-like igre sa quake2-like grafikom.
Svaka njemu cast ali sve sto je prikazao rasterizacija to isto moze da radi, brze i bolje (bolje u smislu da moze da radi softshadows na danasnjim masinama). Sve sto su oni uradili za sada je metal, staklo i dinamicke senke. Metal jeste ok, bolji je nego trenutni fake-mapirani metal, ali staklo i senke su nista impresivno.
Ne znam kakvo je stanje sa multi texturing-om u raytrace-u (tom njihovom projektu), tj. sta ako oce da ima objekat sa vise atributa, a ne samo metal ili staklo ? Recimo da ocu bump-map loptu od metala, jos bolje paralax ili normal mapiran objekat al da je od metala.
Takodje, kolko vidim, uvek ray-trace stavljaju samo na odredjene objekte, ostatak ostaje ne promenjen, recimo patos, zidovi itd. Sta vise, zbog nedostatka mapiranja koji je originalno na tim povrsinama, sve te povrsine izgledaju jos gore nego sto su u originalu. Onaj Q4 ray-traced izgleda ko Q3...Takodje, voda u Crysis-u izgleda za koplje bolje nego ova ray-traced u QW-u...

Mislim da je RT (posto je tema "RT stanje") jos uvek prilicno daleko od necega upotrebljivog u igrama.

just my 2 cents...
 
Mislim da tu nema nekih problema, bice multi-texturisanih objekata kao i do sada.Cini mi se da ovaj helis ima normal-mape.
A ove scene u enterijeru zaista izgledaju malo "retro" ali mi se cini da je to zbog prejakog svetla/i/ili photon bouncinga (ako se ovde uopste radi o photon mapping-u).U svakom slucaju, od opsteg sarenila ne mogu da provalim eye-candy efekte koje bih voleo da vidim (GI senke, radiosity, color bleeding i sl, a vec postoje- kroz rasterizaciju).
A za ovu vodu i staklo, sta reci...vidim da je 100%-na refleksija tu, ali to me ne odusevljava.Voleo bih da vidim sta ce se dogoditi (sa performansama narocito) ako objekat ima manji nivo refleksije, sto vise odgovara realnosti.Ako zele fotorealizam, na svaki materijal moraju staviti refleksiju.Bilo da se radi o betonu, ili staklu.
 
jedno je "correctly calculated" (raytracing) a drugo je "fake".

e sad kako izgleda jedno a kako drugo - moze da se diskutuje ali ovo gore je glavna razlika.
 
Pa ok.Correctly calculated, ali na nivou shpice za polarotor :)D) da tako kazem.Jeste realtime, ali je rezultat prapotopski :p
 
:D

ma to kazem samo zato sto se i gx-x pitao "tek mi sad nista nije jasno, sve sto pise u 'Pros' je vec uradjeno sa grafickim kartama, ostaju samo 'Cons'" kad je procitao link http://www.realstorm.com/realstorm/whyrealtime.html
a tamo lepo pise za sve stavke: "correctly calculated"...
 
To i ja kazem. Za sada smo videli RT objekata i scena sa jako malo materijal atributa. Kad tu krene recimo neki pravi metal da se ubacuje, onako tezak, istrosen (gears of war varijanta :) ) pa neka plastika, cigle, asfalt, sve to ima i refleksije i normal/bump map, specularity, radiosity, reflection, refraction index (za providne materijale), diffuse lighting, ambient l. sens. bla bla bla...ne da ne bi izvukli 19fps nego ako bi 1fps izvukli bilo bi extra !

RT mi sad deluje nekako zastarelo (paradox naravno) kad je rasterizacija vec ovoliko dogurala. Sto kaze lik u "Ko to tamo peva" : "A de sad da se vracamo !"

@kovacm:

Pa to sam pitao pre godinu i kusur dana :d Danas je jos gora situacija po RT u smislu rasterizacija vs RT. Mislim, "correctly calculated" ce primetiti samo onaj ko bude hteo da trazi dlaku u jajetu. Vecina ce gledati (kao sto i gleda) grafiku i atmosferu neke igre u celini, a ne u slamkama. Koga briga da li se palma u krizi pravilno lomi.

Dalje, prikaz onih portala u RT, pa to ima u "Portalu" tako da se izrazim :) Isto su infinite, cak i fizika radi kroz njih. Do duse, citao sam da se vrse neka uproscavanja pri kalkulacijama fizike u portalima, al to je upravo ono sto sam malopre rekao: da nisam citao ne bi ni znao za to, a svakako nisam primetio to tokom igranja.
 
Poslednja izmena:
Nvidia demonstrates ray tracing on the GPU

Aug 14, 2008 18:22 - Nvidia says to have demonstrated the first GPU only ray trace at Siggraph 2008.
The tech demo shows a sports car, which, according to Nvidia, contains up to two million polygons. The rendering performance is said to scale linear. The resolution is said to be 1,920 x 1,080. The demo shows ray tracing shadows, reflections and refractions as well as an anti-aliased image. The application is running on a Quadro Plex 2100 D4 with four GPUs.
Veyron_2560_adaptAA.jpg

http://www.pcgameshardware.com/aid,655883/News/Nvidia_demonstrates_ray_tracing_on_the_GPU/
 
Nazad
Vrh Dno