Snake5's Blog

Kāda spēļu veidotāja blogs…

Daily Archives: 9 jūlija, 2010

Radiosity, 3D, mana implementācija

Pēdējā laikā iesāku nodarboties ar nedaudz citām lietām. Nevienu citu projektu veidot neesmu pārtraucis, šis pagaidām aizstāj trešo – 3d dzinēja projektu, par kuru vēl nevienam neko neesmu stāstījis. Šim koda bāze ņemta no tā 3d dzinēja, vēlāk, kad tā sevi būs pierādījusi, tiks ielikta atpakaļ. Nesen implementēju radiosity normal mapping’u. Radiosity rēķināšana, kaut uz viena thread’a, ir šobrīd ātrāka par HL RAD lightmapju ģenerēšanas programmu un neizskatās sliktāk.

Metode nenormāli vienkārša – pievienoju daudzstūrus, ja kāds no tiem pārsniedz konkrētu izmēru, tas tiek sadalīts uz pusēm plaknē, kura perpendikulāra garākajai malai un krusto garāko malu tās viduspunktā.

Tad tiek sarēķināti faktori – es lietoju dot( patch1.normal, dirP1toP2 ) * dot( patch2.normal, -dirP1toP2 ) / ( distance * 0.01f ). Samazinu attāluma ietekmi tāpēc, ka citādi kaut kā pārāk tuvu tā ietekme beidzas. Piereizinu pēc redzamo patch’u atrašanas katram to ietekmes faktorus (1.0/redzamo_patchu_skaits).

Lightmapē visa vieta jau sen izdalīta, tāpēc šajā momentā jāsaraksta pikseļi. Savācu visus patch’us, kuri ietekmēs kāda pikseļa krāsu lightmapē. Tad atliek tikai pieskaitīt katra krāsu, reizinot ar tā ietekmi uz pikseli (k/(dist_pixel_patch^3), k ir kāda laba konstante, kura atļauj nezaudēt dalījumam precizitāti). Beigās visu izdalu ar visu ietekmju summu un viss izdarīts.

Radiosity lightmappings ir labs tajā, ka viņš nav dārgāks* par parasto bump mappingu. Nevajag pat normālvektoru pārnest uz world space, citus vektorus arī nevajag – visa tā informācija ir ierakstīta 3 lightmapēs.

.. atliek vēl salikt pareizas krāsas atstarotās gaismas reizinājumam (lai atstarotā gaisma būtu atkarīga no diffuse tekstūras)..

Varbūt kādreiz vēl pastāstīšu, kā es implementēju optimizētu (priekš BSP koka veidošanas) līmeņa daudzstūru ģenerēšanu, BSP koka rēķināšanu, portālu ģenerēšanu un redzamības aprēķinus.

EDIT:
*-Es negribētu pagaidām teikt, ka viņš arī ir daudz lētāks/ātrāks, neskatoties uz mazāko instrukciju skaitu. Kad pēdējo reizi eksperimentēju ar ūdens šeideri, viena tekstūras nolasīšanas operācija aizstāja vairākas matemātiskās, bet ātrums samazinājās. Visticamāk, ka šajā gadījumā tas tomēr vairāk atkarīgs no gaismu skaita, tāpēc viennozīmīgi neko nevaru teikt.

īpaši Lētais humors..

Kamēr radošumu skolās meklē ar mokām, dažās citās vietās tā netrūkst… tiem, kam zem 18, nevajadzētu skatīties… arī man. 😀

http://www.funnytitles.com/