Ja sam poceo sa ray-tracingom... ali ne u realnom vremenu.. pa smo napravili da radi u realnom vremenu u 320x200 sa 5-6 sarenih lopti... Onda sam kupio Voodoo2 i presao na Glide
🙂
Raytracing je samo "drugaciji pogled" na 3d scenu. Zbog nacina kako radi RT, u poredjenju sa rasterizacijom neki problemi su trivijalni (senke, refleksije i refrakcije) ali se javljaju drugi problemi. Nekakav hibrid izmedju rasterizacije i RT-a bi sada super dosao.
RT radi tako so se kroz svaki pixel na ekranu ispaljuje zrak i trazi se najbliza povrsina koju je pogodio. Ako u sceni ima mnogo objekata i poligona provaravanje svih trouglova po pixelu je izuzetni skup proces. Neke optimizacije (oct-tree), BSP i sl mogu doneti znacajno ubrzanje. Medjutim.. najbrze bi bilo kada bi se klasicnim rasterizatorom popunio ekran sa korektnim informacijama pa u sledecem prolazu za svaki pixel sumirati uticaj svetla i senki. Za sada ovaj pristup najvise lici deferred renderingu.
Drugi prolaz je sakupljanje boja iz svih izvora svetla. Medjutim treba voditi racuna o senkama, tako da je opet potrebno sa povrsine objekta ispaliti po 1 zrak ka svakom izvoru svetla i proveriti da li neki drugi objekat zaklanja svetlo. Ovo je izuzetno skup korak jer se sa povecanje broja izvora svetla povecava i broj provera. Opet... koriscenjem oct-tree ili neceg slicnog moguce je dobiti ubrzanje.
Ovaj prolaz bi se mogao uraditi ponovo sa rasterizatorom i nekom "fish-eye" kamerom... prvo se iscrtaju izvori svetla (kao kruzne "tufne") pa se preko crta ambient bojom svi objekti. Rezultat se downsempluje na 1x1 pixel i rezultujuca boja je zbir svih uticaja svetla i senki. Ovaj korak se moze raditi u veoma maloj rezoluciji 16x16 ili 32x32 pix.
Treci prolaz je refleksija ili refrakcija i radi se kao i prvi korak... Refleksija i refrakcija nema puno u realnom zivotu tako da ovaj korak ne bi bio veliko opterecenje.
RT je danas moguce raditi na GPU ali je API (OpenGL i D3D) los i trebalo bi napraviti neki API koji bi bio laksi za rad.
Problem RT-a je veliki broj ispitivanja i pretrazivanja sto nikako ne lezi danasnjim GPU-ovima. CPU bi to mogao da uradi ali nije dovoljno paarlelizovan. Kada bi svaki SP u G80 bio kao jedan x86 proc i kada bi se napravila virtuelizacija VRAM-a, onda bi se RT mogao veoma lako implementirati i bio bi dosta brz.
http://www.beyond3d.com/content/articles/94
http://forum.beyond3d.com/showthread.php?t=44850