Cmft i cmftStudio
Autor: Dario Manesku
Cmft je alat za filtriranje tzv. kockastih-tekstura (eng. cubemap texture) za potrebe računarskih igara i trodimenzionalnih aplikacija, a cmftStudio je alat koji pored filtriranja nudi i interaktivnu vizualizaciju i pregled dobijenih rezultata.
Kockaste-teksture su vrste tekstura, koje imaju dosta veliku primenu u računarskoj grafici u realnom vremenu, ili, preciznije rečeno, u računarskim igrama.
Šest strana u obliku kocke čine jednu kockastu-teksturu, a njen uzorak se dobija putem trodimenzionalnih vektora (x,y,z) koji označava pravac od centra kocke. To je jedna suštinska razlika u odnosu na dvodimenzionalne teksture, gde se uzorak dobija putem dvodimenzionalnih koordinata (x,y).
Kao što je lako zaključiti, kockaste-teksture obuhvataju ceo prostor oko svoje centralne tačke i, kao takve, pogodne su za implementaciju raznih tehnika u računarskoj grafici.
Jedna od konkretnih primena kockastih-tekstura je implementacija tzv. IBL tehnike (eng. Image-Based Lighting) ili osvetljenja zasnovanog na slici. Tehnika obuhvata skladištenje podataka o upadnim svetlosnim zracima sa svih strana za željenu tačku u trodimenzionalnom prostoru i korišćenje tih informacija za izračunavanje, tj. aproksimaciju ambijentalne svetlosti u okruženju te tačke. Podaci o upadnoj svetlosti se najpre moraju obraditi i upakovati u željenom obliku u kockaste-teksture. Taj oblik treba biti pogodan za obradu u realnom vremenu, i upravo za to služe alati cmft i cmftStudio.
Ova tehnika je u širokoj upotrebi u, može se reći, skoro svakoj današnjoj modernoj 3D igri, jer su rezultati koji se dobijaju dosta primamljivi, a brzina današnjeg dostupnog hardvera bez problema omogućava primenu ove tehnike u praksi.
Pre nastanka cmft-a i cmftStudio-a, za ovu namenu ljudi su uglavnom koristili poznati AMD-ov alat Kjubmapdžen (eng. CubeMapGen), koji je bio besplatno dostupan na internetu. Septembra 2011. godine, AMD je prekinuo dalji razvoj ovog alata i objavio je javno njegov izvorni kod. Alat je bio dosta dobar – nudio je dosta mogućnosti za podešavanje parametara za filtriranje. Međutim, imao je jednu veliku manu – filtriranje kockastih-tekstura je često dugačak proces, a Kjubmapdžen je vršio obradu isključivo na jednom jezgru procesora. Pojavila se, takođe, na internetu i modifikacija Kjubmapdžena koja je mogla da vrši obradu koristeći tri procesorska jezgra. Međutim, to je i dalje bilo dosta sporo. Filtriranje jedne kockaste-teksture je moglo trajati, u zavisnosti od izabranih parametara, i do šest ili sedam minuta, pa čak i preko petnaest minuta. Mi smo u to vreme koristili navedeni alat i eksperimentisali sa raznim podešavanjima, i taj proces je trajao dosta dugo – na trenutke je čak bio i frustrirajući. Da bismo saznali kakvi će rezultati biti sa pojedinim podešavanjima, bili smo primorani da čekamo dosta dugo, a pritom nam je računar bio opterećen i jedva smo mogli njime da radimo išta drugo.
Tu je nastala ideja da pokušamo da ubrzamo ceo taj proces. Nismo se opredelili za dalju modifikaciju Kjubmapdžena pošto je njegov izvorni kôd bio usko vezan za Dajrekt-iks (eng. DirectX), tj. Vindouz platformu, i to nam se nije nimalo dopalo. Odluka je bila da počnem da pravim alat iz početka, sa idejom da:
- bude dostupan za sve aktuelne platforme: Vindouz, Linuks, Mek OS Iks (eng. MacOS X);
- koristi sva dostupna procesorska jezgra i u isto vreme i grafički procesor putem Open-si-el (eng. OpenCL) tehnologije, kako bi se postigla što veća brzina obrade podataka;
- ima mogućnost poziva iz komandne linije kako bi se sa lakoćom mogao pozvati iz nekog skript jezika i na taj način kreirao zadatak za serijsko obrađivanje brojnih kockastih-tekstura odjednom;
Nakon nekoliko meseci, upravo smo to i realizovali. Cmft alat se pojavio na internetu i bio je primetno brži od Kjubmapdžena. Ono što je nekada trajalo sedam minuta sa Kjubmapdženom, cmft bi to završio za oko dvadesetak sekundi. Pored toga, imao je i mogućnost učitavanja kao ulaznih podataka mnogo različitih tipova slika okruženja. Napokon, obrada kockastih-tekstura nije više bila toliko naporan proces. Međutim, pošto je u pitanju alat koji se koristi iz komandne linije, potrebno je bilo dokumentovati i objasniti njegovo korišćenje. To je bilo nešto što mi, u to vreme, nismo imali volje i želje da radimo, pa smo došli na bolju ideju: da napravimo dodatni interaktivni alat za vizualizaciju i prikaz rezultata filtriranih kockastih-tekstura, tako da je moguće lakoćom koristiti alat bez potrebe prethodnog čitanja uputstva i smernica. Tako je započeo razvoj cmftStudio-a.
Razvoj cmftStudio-a je trajao primetno duže zbog razloga što je sada trebalo mnogo stvari uraditi i uklopiti na jednom mestu kako bi se postiglo prijatno korisničko iskustvo. Isti ciljevi su prevladali: dostupnost za sve platforme i javno dostupan izvorni kod cele aplikacije. Za razvoj je korišćena bgfx biblioteka za iscrtavanje, o kojoj je pisano ranije – u 33. broju ovog časopisa. Ona je takođe otvorenog koda, nudi pristup funkcijama grafičkog procesora za iscrtavanje sa različitih platformi bez skoro ikakve dodatne modifikacije i, kao takva, predstavljala je odličan i očigledan izbor za potrebe razvoja cmftStudio-a.
Sada već dostupan na internetu, cmftStudio, pored filtriranja kockastih-tekstura, nudi i još mnoštvo drugih funkcija, kao naprimer: učitavanje 3D modela i njegovih tekstura, kreiranje i podešavanje različitih materijala, pregled iscrtavanja materijala sa raznim osobinama glatkoće i konstitucije pod uticajem direktne i ambijentalne svetlosti, snimanje i učitavanje sesije, itd. Zbog svega ovoga, čak i 3D modelari nalaze upotrebu cmftStudia za učitavanje i pregled svojih 3D modela.
U prvih nedelju dana nakon objave, Githab stranica cmftStudio projekta je ostvarila skoro dve hiljade jedinstvenih pregleda, što pokazuje dosta veliko inicijalno interesovanje za ovakav alat. Kako će dalji razvoj cmftStudia teći, u velikoj meri zavisi od utisaka samih korisnika. Za sada alat nudi sve esencijalne opcije za funkciju koju obavlja i može se bez problema koristiti u produkciji kompjuterskih igara ili 3D aplikacija koje imaju potrebu za ovakvim alatom.
Korisni linkovi:
[1] https://github.com/dariomanesku/cmft
[2] https://github.com/dariomanesku/cmftStudio