уторак, 23 априла, 2024
Сам свој мајстор

Цмфт и цмфтСтудио

Аутор: Дарио Манеску

Цмфт је алат за филтрирање тзв. коцкастих-текстура (енг. cubemap texture) за потребе рачунарских игара и тродимензионалних апликација, а цмфтСтудио је алат који поред филтрирања нуди и интерактивну визуализацију и преглед добијених резултата.

Коцкасте-текстуре су врсте текстура, које имају доста велику примену у рачунарској графици у реалном времену, или, прецизније речено, у рачунарским играма.

Шест страна у облику коцке чине једну коцкасту-текстуру, а њен узорак се добија путем тродимензионалних вектора (x,y,z) који означава правац од центра коцке. То је једна суштинска разлика у односу на дводимензионалне текстуре, где се узорак добија путем дводимензионалних координата (x,y).

Као што је лако закључити, коцкасте-текстуре обухватају цео простор око своје централне тачке и, као такве, погодне су за имплементацију разних техника у рачунарској графици.

Једна од конкретних примена коцкастих-текстура је имплементација тзв. IBL технике (енг. Image-Based Lighting) или осветљења заснованог на слици. Техника обухвата складиштење података о упадним светлосним зрацима са свих страна за жељену тачку у тродимензионалном простору и коришћење тих информација за израчунавање, тј. апроксимацију амбијенталне светлости у окружењу те тачке. Подаци о упадној светлости се најпре морају обрадити и упаковати у жељеном облику у коцкасте-текстуре. Тај облик треба бити погодан за обраду у реалном времену, и управо за то служе алати cmft и cmftStudio.

Ова техника је у широкој употреби у, може се рећи, скоро свакој данашњој модерној 3Д игри, јер су резултати који се добијају доста примамљиви, а брзина данашњег доступног хардвера без проблема омогућава примену ове технике у пракси.

Пре настанка cmft-а и cmftStudio-а, за ову намену људи су углавном користили познати АМД-ов алат Кјубмапџен (енг. CubeMapGen), који је био бесплатно доступан на интернету. Септембра 2011. године, АМД је прекинуо даљи развој овог алата и објавио је јавно његов изворни код. Алат је био доста добар – нудио је доста могућности за подешавање параметара за филтрирање. Међутим, имао је једну велику ману – филтрирање коцкастих-текстура је често дугачак процес, а Кјубмапџен је вршио обраду искључиво на једном језгру процесора. Појавила се, такође, на интернету и модификација Кјубмапџена која је могла да врши обраду користећи три процесорска језгра. Међутим, то је и даље било доста споро. Филтрирање једне коцкасте-текстуре је могло трајати, у зависности од изабраних параметара, и до шест или седам минута, па чак и преко петнаест минута. Ми смо у то време користили наведени алат и експериментисали са разним подешавањима, и тај процес је трајао доста дуго – на тренутке је чак био и фрустрирајући. Да бисмо сазнали какви ће резултати бити са појединим подешавањима, били смо приморани да чекамо доста дуго, а притом нам је рачунар био оптерећен и једва смо могли њиме да радимо ишта друго.

Ту је настала идеја да покушамо да убрзамо цео тај процес. Нисмо се определили за даљу модификацију Кјубмапџена пошто је његов изворни кôд био уско везан за Дајрект-икс (енг. DirectX), тј. Виндоуз платформу, и то нам се није нимало допало. Одлука је била да почнем да правим алат из почетка, са идејом да:

  • буде доступан за све актуелне платформе: Виндоуз, Линукс, Мек ОС Икс (енг. Mac OS X);
  • користи сва доступна процесорска језгра и у исто време и графички процесор путем Опен-си-ел (енг. OpenCL) технологије, како би се постигла што већа брзина обраде података;
  • има могућност позива из командне линије како би се са лакоћом могао позвати из неког скрипт језика и на тај начин креирао задатак за серијско обрађивање бројних коцкастих-текстура одједном;
  • буде јавно доступан свима на интернету, заједно са изворним кодом, како би што више људи било у могућности да га користи за своје потребе.

Након неколико месеци, управо смо то и реализовали. Cmft алат се појавио на интернету и био је приметно бржи од Кјубмапџена. Оно што је некада трајало седам минута са Кјубмапџеном, cmft би то завршио за око двадесетак секунди. Поред тога, имао је и могућност учитавања као улазних података много различитих типова слика окружења. Напокон, обрада коцкастих-текстура није више била толико напоран процес. Међутим, пошто је у питању алат који се користи из командне линије, потребно је било документовати и објаснити његово коришћење. То је било нешто што ми, у то време, нисмо имали воље и жеље да радимо, па смо дошли на бољу идеју: да направимо додатни интерактивни алат за визуализацију и приказ резултата филтрираних коцкастих-текстура, тако да је могуће лакоћом користити алат без потребе претходног читања упутства и смерница. Тако је започео развој cmftStudio-а.

Развој cmftStudio-а је трајао приметно дуже због разлога што је сада требало много ствари урадити и уклопити на једном месту како би се постигло пријатно корисничко искуство. Исти циљеви су превладали: доступност за све платформе и јавно доступан изворни код целе апликације. За развој је коришћена bgfx библиотека за исцртавање, о којој је писано раније – у 33. броју овог часописа. Она је такође отвореног кода, нуди приступ функцијама графичког процесора за исцртавање са различитих платформи без скоро икакве додатне модификације и, као таква, представљала је одличан и очигледан избор за потребе развоја cmftStudio-а.

Сада већ доступан на интернету, cmftStudio, поред филтрирања коцкастих-текстура, нуди и још мноштво других функција, као например: учитавање 3Д модела и његових текстура, креирање и подешавање различитих материјала, преглед исцртавања материјала са разним особинама глаткоће и конституције под утицајем директне и амбијенталне светлости, снимање и учитавање сесије, итд. Због свега овога, чак и 3Д моделари налазе употребу cmftStudia за учитавање и преглед својих 3Д модела.

У првих недељу дана након објаве, Гитхаб страница cmftStudio пројекта је остварила скоро две хиљаде јединствених прегледа, што показује доста велико иницијално интересовање за овакав алат. Како ће даљи развој cmftStudia тећи, у великој мери зависи од утисака самих корисника. За сада алат нуди све есенцијалне опције за функцију коју обавља и може се без проблема користити у продукцији компјутерских игара или 3Д апликација које имају потребу за оваквим алатом.

Корисни линкови:
[1] https://github.com/dariomanesku/cmft
[2] https://github.com/dariomanesku/cmftStudio