O kompaniji
89
Iskustva
31
Plate
Poslovi
Ubisoft logo

Ubisoft

4
11.04.2020.

Intervju sa Ubisoft Belgrade timom – NO3. Render Programming tim

Helloworld

Beogradski studio je pre godinu dana po prvi put dobio mogućnost da unutar našeg programerskog tima oformi potpuno samostalan tim koji se bavi jednom od kompleksnijih oblasti programiranja u AAA industriji - render programiranjem. Miloš Ivanović i Petar Žica, render programeri koji rade na dva naša projekta, su pristali da podele svoja iskustva i daju nam više informacija o celoj priči.

Šta generalno znači biti Render Programmer?

Miloš (M): Render Programmer pozicija inače podrazumeva rad sa grafikom, ali na nekom nižem nivou. Dakle, rad na implementaciji i osposobljavanju sistema koji funkcionišu tako da prave sliku u igri i tako da Gameplay Programmer-ima omogućavaju da rade stvari, odnosno, da ne brinu o tome kako će se slika ponašati. Ukratko, rad na sistemu koji apstrahuje stvaranje slike na ekranu.

Šta ova pozicija podrazumeva u Ubisoftu?

Petar (P): Ubisoft je kompanija koja pravi AAA igre i ima više in-house engine-a, tako da pozicija podrazumeva razvoj novih grafičkih mogućnosti engine-a, kao i optimizaciju postojećih rešenja. Takođe, bitan deo ove pozicije je rad sa Artist-ima, kojima pružamo podršku praveći alate koje oni koriste kako bi njihova vizija i kreativne ideje o izgledu igre mogle biti realizovane, uz održavanje zadovoljavajućih performansi. Dakle, ono što je specifično za ovu poziciju u Ubisoft-u je prilika za rad na samom engine-u, pošto mnogi drugi studiji nemaju svoj engine, već prave igre u javno dostupnim engine-ima, kao što su Unity i Unreal.

Q: Miloše, da li bi ti možda dodao još nešto?

M: Rad na rendering engine-u, tj. na tome kako funkcioniše sama komunikacija između procesora i grafičke karte. Takođe, podrazumeva u određenoj meri i pisanje shader-a koje rade Render Programmer-i u drugim firmama. Na kraju, pozicija podrazumeva i rad na alatima koji daju artistima opciju da se izgled neke komponente 3D modela koji oni prave generiše na proceduralan način, a da se ta opcija apstrahovanjem njima predstavi na odgovarajući način. Mislim da su to tri odvojene celine kojima se bave Render Programmer-i kod nas.

Kako ste se prvi put zainteresovali za ovu oblast?

M: Moja priča je najverovatnije drugačija jer je mene render zainteresovao nakon što sam se zaposlio ovde. Dok sam radio u Engine timu sam imao priliku da radim sa Simplygon-om, alatom koji radi optimizaciju mesh-eva (odnosno 3D modela). Simplygon-u se kao ulaz prosledi jedan 3D model, podese se parametri, i on kao izlaz generiše 3D model koji izgleda ,,lošije", jer ima manje poligona, ali zato i troši manje resursa u igri. Posle se ovaj model koristi kao zamena za originalni model ako je igrač na većem rastojanju od tog objekta u igri, jer su na većem rastojanju neki detalji na modelu zanemarljivi i prikazivanjem ,,lošijeg" modela se ne smanjuje kvalitet slike.

Već tada mi je bilo zanimljivo kako funkcioniše 3D grafika u igri i kako se 3D modeli prikazuju. Nakon toga se otvorila prilika na projektu da neko pređe da radi render i ja sam odlučio da to uradim. Kada sam krenuo da učim i kako sam krenuo da radim postajalo mi je sve zanimljivije kakve celine i kakav je uopšte sklop tog workflow-a, kako se slika prikazuje u igri i kako se tako kompleksne stvari prikazuju na ekranu igračima.

Najizazovniji deo posla Render Programmer-a?

P: Mislim da je debagovanje vizuelnih problema najizazovniji deo posla, bar od stvari sa kojima sam se ja sreo. Ovakav tip problema je znatno drugačiji za rešavanje od ostalih tipova problema u programiranju, zato što se veliki broj operacija izvršava na GPU-u, umesto na CPU-u. Zbog ovoga je potrebno imati drugačiji pristup, koji podrazumeva prikupljanje dodatnih debug informacija koristeći eksterne alate poput RenderDoc-a i Microsoft PIX-a, koji daju bolji uvid u stanje izvršavanja programa na GPU-u. Pored debagovanja, verujem da bi iskusnije kolege iz drugih studija dodale i optimizaciju performansi kao jedan od većih izazova pozicije, ali do sada nisam imao mnogo prilike da se bavim sa tim.

Najzanimljivija stvar koju ste radili do sada?

M: Za mene je vezana za saradnju sa Google-om koju imamo tokom portovanja igara na Stadia-u. Sa njihove strane postoje zahtevi u vezi sa time šta igra mora da ispunjava pre nego što bude validirana i objavljena. Jedan od ovih zahteva je stabilan FPS, odnosno da broj frejmova koji se renderuju u sekundi nikada ne odstupa previše. U trenutku kada smo mi preuzeli mandat za jednu od igara koje portujemo na Stadia-u, ovaj zahtev nije bio ispunjen, pa ni igra nije ispunjavala standarde. Ja sam na tome radio istraživao kako funkcioniše sve na samoj Stadia-i, kako bih pronašao najbolje rešenje za dati problem.

P: Za mene je to bilo portovanje našeg rendering engine-a na Stadia platformu. Interesantno je raditi na novoj platformi, koja se ipak razlikuje od klasičnih gaming platformi poput Windows PC-a i konzola, što sa sobom donosi nove izazove. Stadia je Linux platforma koja zahteva korišćenje Vulkan grafičkog API-ja, tako da je moj posao da omogućim izvršavanje naše igre na Vulkan-u korišćenjem nekih internih Ubisoft biblioteka za apstrakciju grafičkog hardvera.

Budući da je render dosta specifična oblast, kako i gde pronalazite rešenja za one probleme na koje nailazite po prvi put?

P: Render pozicija generalno podrazumeva dosta samostalnog rada i istraživanja raznih grafičkih tehnika i optimizacija. Ima puno literature i informacija na internetu, tako da definitivno zahteva odvajanje slobodnog vremena, koliko god je to moguce, za čitanje i samostalno eksperimentisanje. Pored toga, ono što je olakšavajuća okolnost jeste da imamo mogućnost da pitamo starije i iskusnije kolege iz drugih studija za pomoć.

Pre nekoliko meseci ste počeli da radite na novom projektu vezanom za portovanje igara na novi Google-ov cloud gaming servis Stadia-u. Kako to izgleda i šta je to sve novo donelo?

M: Ja sam radio na portovanju engine-a na Vulkan za jednu od naših igara. Stadia kao takva, svima, a ne samo Render Programmer-ima, donosi nešto novo. Kada je u pitanju integracija Vulkan-a, grafičkog API-ja koji može da radi na svim platformama, mi smo ga prvo integrisali na Windows i onda smo na Windows-u pokretali igru sa Vulkan-om i gledali kako izgleda. Tu smo je ispeglali zato što će se sve promene koje smo radili tu odraziti i na Stadia-i. Tako smo mogli da radimo unapred bez da moramo da čekamo druge ljude. Dobra stvar je sto je Google-ov tim sa kojim sarađujemo veoma responzivan i daje nam svu podršku da bi igra na kraju što bolje izgledala i radila na njihovoj platformi.

Q: Petre, ti si radio kao Render Programmer i pre Stadia projekata? Koliko se to razlikuje?

P: Rad na Stadia-i podrazumeva rad sa nekim veoma niskim slojevima našeg engine-a, koji predstavljaju tanku apstrakciju grafičkog hardvera. Mnogo više moram da zađem u detalje rada samog GPU-a i Vulkan grafičkog API-ja, kao i kompilaciju shader-a, odnosno programa koji će se izvršiti na GPU-u. Pre sam radio npr. na nekom konkretnom rendering pass-u, što predstavlja jedan korak u sastavljanju konačne slike koja će biti prikazana na ekranu i samo sam koristio sve te niže slojeve engine-a, koji su već bili funkcionalni.

Kako mislite da će se vaša karijera razvijati na dalje?

P: Ja bih voleo da nastavim da se bavim računarskom grafikom i da se specijalizujem za tu oblast. Uzimajući u obzir da je naš studio još uvek dosta mlad u oblasti računarske grafike, do sada smo samo radili na integracijama već postojećih grafičkih sistema iz drugih Ubisoft-ovih projekata u naš projekat. U budućnosti se nadam da ćemo svi napredovati i dobiti priliku da radimo na projektovanju i implementaciji nekih novih sistema. Definitivno se vidim u tehničkim vodama i želim da znam što više o rendering tehnikama i optimizacijama u današnjim rendering engine-ima.

M: Voleo bih da i u budućnosti radim i render i malo generalnije engine stvari. Nadam se da ću bolje shvatiti na još nižem nivou kako radi grafička karta i kako sve to funkcioniše budući da je trenutno, kada imamo jako puno posla, pre svega bitno da sredimo stvari, čak i kada ponekad u tom trenutku ne shvatamo potpuno kako one funkcionišu. Samim tim, nadam se da ću na teorijskom nivou usavršiti svoje znanje i da ću moći dobro da poznajem kako render, tako i engine oblasti.

Q: Zašto odluka da to ipak bude miks engine-a i render-a?

M: Kada sam krenuo da radim mnogo su me zanimale engine stvari. To se nije promenilo. Ali budući da mi je i render podjednako zanimljiv ne bih voleo da se fokusiram na samo jednu stvar. Voleo bih da pokušam da usavršim svoje znanje u više oblasti i budem uspešan u obe ove oblasti.

Savet za ljude koji bi želeli da budu Render Programmer-i?

M: Najbitinije što bih rekao jeste da nije bitno da se apsolutno sve zna. Stvari koje ljudi rade van naše firme kada uče i obučavaju se u render programiranju, crtanju na monitoru i programiranju na grafičkim kartama, su dosta drugačije nego ono što će se raditi u samoj firmi. Ne mora neko da bude usavršen u svim poljima render programiranja jer se mnogo stvari radi ovde i postoje resursi i načini da se sve to nauči unutar firme. Firma ljudima pruža podršku tokom učenja nečega kao što je meni pružila. Najbitnije je da neko ne umanjuje sebe i misli da ga možda neće primiti zato što ne zna dovoljno. Ukoliko zna neke stvari o renderu, potpuno je ok da se prijavi i da će to biti dovoljno da se dalje usavršava u samoj firmi.

Q: Kada kažete osnove, šta tačno smatrate da je to što bi ipak moralo da se zna?

P: Pre svega, rekao bih da treba da znaju kako radi rendering pipeline, odnosno sekvenca koraka koja od 3D opisa scene sa virtuelnom kamerom daje 2D sliku kao rezultat. Ovo je apsolutni minimum bez kojeg bi bilo nemoguće razumeti bilo šta u rendering engine-u. Principi dizajna engine-a i razne napredne rendering tehnike su nešto što se može naučiti vremenom, u toku posla.

M: Slažem se. Takođe, mislim da je dobro i poznavanje bar jednog rendering API-a, odnosno praktični deo. Da su nekada programirali nešto u rendering API-u. To može biti DirectX, Vulkan, OpenGL. Svi imaju slične koncepte, tako da će moći vrlo lako da se prilagode onome što mi radimo ovde.

Nadam se da su Petar i Miloš uspeli da vam približe ono čime se bave i zainteresuju vas da razmišljate o tome šta sve Render Programmer mora da uradi da bismo imali igru koju igramo ispred sebe.

Pogledaj profil kompanije Ubisoft.

Galerija