ABONAMENTE VIDEO REDACȚIA
RO
EN
Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 11
Abonament PDF

Roller Coaster-ul Imagine Cup

Alex Pana
internship student
@Tora Trading



DIVERSE

Imagine Cup este o competiție anuală organizată de Microsoft ce promovează inovația și tehnologiile proprii. Echipe de până la patru studenți, în decursul unui an, acceptă provocarea de a scrie o aplicație care să contribuie la Millenium Development Goals. Anul acesta însă, condiția temei a fost revocată, oferindu-ne libertatea de a construi un joc distractiv, care să nu poarte responsabilitatea rezolvării problemei foametei în țările subdezvoltate. Am amânat participarea la această competiție încă din primul an de facultate. Dar acesta era începutul celui de-al treilea meu an, iar cu doar doi ani rămași până la absolvire, nu mai aveam mulți "anul următor" rămași. Trebuia să fac ceva.

JavaScript

În fiecare an, Microsoft anunță tehnologiile dintre care studenții au de ales și pe care sunt nevoiți să le folosească. Printre cele propuse anul trecut se află HTML5. Poftim? HTML5 nu este tehnologie Microsoft! Și totuși era acolo, pe site-ul oficial. Iar noi puteam folosi JavaScript și WebGL pentru a construi un joc 3D incredibil de portabil. Mi-am petrecut următoarea lună citind articole de Douglas Crockford și John Resig. Am scris o colecție de experimente care nu vor vedea niciodată lumina zilei. Scopul meu era să construiesc un engine întreg în JavaScript de la zero. Sistemul de input, grafică, audio, totul. Urma să folosim acest engine pentru a construi jocul nostru extraordinar. Aveam un sistem de input funcțional și un schelet pentru sistemul grafic. Scrisesem de asemenea un plugin pentru Blender care exporta modelele 3D si shader-ele în format JSON. Engine-ul putea încărca modelele si le putea desena folosind shadere. Funcționa și era superb. Asta până când au apărut regulile pentru Microsoft Imagine Cup 2013, iar HTML5 dispăruse de pe lista de tehnologii disponibile.

În momentul acela invitasem deja doi colegi de facultate și buni prieteni: Timotei Dolean și Adrian Soucup, împreună cu un vechi prieten din liceu: Andrei Grigoriu pentru a forma echipa VertexArmy. Aveam încredere în abilitățile si pasiunea lor, iar împreună simțeam că putem face acest lucru posibil. Nu voiam să facem greșeli stupide, așa că ne-am decis să nu scriem nicio linie de cod până nu punem la punct toate aspectele jocului. Pentru început, trebuia să alegem între o grafică 3D sau una 2D. Grafica 2D este mult mai greu de desenat, iar grafica 3D introduce o nouă dimensiune în logica jocului. De asemenea, simțeam că pentru a face un joc distractiv aveam nevoie de un simulator de fizică. Am început să ne întâlnim în weekend-uri, să discutăm idei de joc și să urmărim alte jocuri asemănătoare. Ne doream un joc care să fie simplu (spre deosebire de complex), cu o mecanică ușor de înțeles, și care să conțină puzzle-uri creative construite pe baza mecanicilor. Oricare ar fi ideea finală, aceasta trebuia să fie distractivă, ușor de înțeles, iar puzzle-urile trebuiau să fie rezolvate folosind creativitate și inteligență. În decursul câtorva săptămâni am început sa punem totul cap la cap. Jocul nostru urma să aibă grafică 3D într-o lume 2D. Simulatorul de fizică va funcționa de asemenea în doar două dimensiuni. Lumea jocului va fi plină de tehnologie extraterestră. Puzzle-urile vor necesita folosirea unor abilități și tehnologii pentru a muta lucruri și a repara interiorul unei nave distruse. Urma să avem cuburi pe care jucătorul să le poată muta și folosi pentru a construi aparate cu abilități și scopuri neobișnuite. Spre exemplu, cu rețeta potrivită, zece cuburi ar putea fi folosite pentru a construi un dispozitiv ce inversează gravitația. Un singur cub ar putea fi folosit pentru a construi o rampă scurtă peste o groapă, iar un altul se va putea transforma într-o sursă de energie pentru un dispozitiv deja existent. Cuburile urmau să fie complet identice. Ne simțeam încrezători și ne plăcea direcția în care mergea proiectul.

Unity

Odată ce am găsit ideea generală, a trebuit să alegem tehnologia în care o vom implementa. Platformele XBOX și mobile au ieșit din ecuație deoarece nu aveam tehnologia necesară. Așa că am rămas cu PC-ul. Citind un topic interesant pe forumurile Imagine Cup, am descoperit că aveam voie să folosim engine-uri de jocuri ca Unity, sau chiar Unreal, atât timp cât foloseam produse Microsoft în procesul de dezvoltare (e.g.: scripturi C# în Unity). Ne-am gândit: "Asta e super!". Nefiind nevoie să ne creăm propriul engine grafic puteam să ne concentrăm pe jocul propriu-zis. Așa că fiecare dintre noi ne-am instalat Unity și am început să facem tutoriale. Am creat un demo în care o armată de cuburi urmărea cursorul iar cuburile se spărgeau dacă erau lovite tare de perete. Unity avea tot ce ne era necesar, inclusiv un editor foarte bun pe care îl puteam folosi să tragem din meniul de unelte diferite obiecte pentru a crea jocul. De fapt, era prea mult de tras și prea puțin de scris script-uri. Nu că scripturile nu ar fi fost folositoare sau destul de puternice, ci faptul că erau doar pe locul doi ca importanță în Unity. Totodată, engine-ul era atât de complex încât gândul la cât trebuie să învățăm pentru a-l putea folosi eficient, ne dădea fiori. Am realizat curând că versiunea gratuită de la Unity nu avea facilitatea de "render targets". Acest lucru însemna că nu puteam face niciun efect special, nici măcar un efect simplu de conturare pentru a marca cuburile selectate. Acest lucru a fost dezamăgitor deoarece aveam cunoștințele necesare pentru a implementa efecte, dar engine-ul pur și simplu nu ne lăsa. Iar noi sub nicio formă nu puteam plăti 1500$ pentru asta. Așa că, pentru a doua oară am aruncat totul și am început de la zero...

XNA

Ultima noastră alegere a fost XNA ("XNA"s Not an Acronym"). Acesta este un framework simplu peste DirectX și ne-a oferit tot ceea ce aveam nevoie: un nivel de abstractizare complet, cu unelte și librării matematice. În sfârșit eram gata să începem dezvoltarea jocului nostru. Găsisem ideea de bază și alesesem tehnologia adecvată. Păcat că ne-a luat cinci luni să ajungem aici... Ne-am configurat un repository de Git (împreună cu un front-end numit "Gitlab") pe serverul nostru, ne-am pregătit mediul de lucru (XNA nu merge în mod implicit cu Visual Studio 2012) și ne-am împărțit sarcinile între noi. Aveam nevoie de un artist iar eu eram cel mai potrivit; Andrei urma să se ocupe de integrarea sistemului de fizică și implementarea logicii jocului, Adrian urma să creeze sistemul grafic și shader-ele iar Timotei urma să lucreze pe partea de interfață utilizator și sistemul de intrare (tastatură, mouse, Kinect, etc). Am început să dezvoltăm, încetul cu încetul, folosind Skype pentru a comunica zilnic. Ideea jocului s-a schimbat de-a lungul proiectului. Am adăugat un caracter principal în poveste: un robot în formă triunghiulară care umblă cu ajutorul unor șenile și are niște abilități interesante. Am încercat câteva stiluri grafice, dar nu am fost mulțumiți de rezultate. Unele probleme au fost din cauza modului în care era unghiul camerei sau felul în care texturile erau filtrate, dar majoritatea au fost din cauza lipsei mele de experiență. Până la urmă, simulatorul de fizică s-a integrat superb cu jocul. Andrei a avut ideea de a simula șenilele prin fizică, așa că am exportat fiecare piesă separat (o roată, o șenilă și un corp) iar el le-a folosit pentru a construi robotul ca un sistem de componente simulate fizic. Asta înseamnă că atunci când robotul se deplasează, se rotesc de fapt cele trei roți. Sistemul de fizică folosește forța de frecare dintre roți și șenile pentru a face robotul să se miște. Aceasta s-a dovedit a fi cea mai importantă decizie pe care am luat-o în legătură cu design-ul jocului.

În aprilie a trebuit să trimitem jocul pentru runda de calificare în ciuda faptului că nu era nici pe aproape gata. Echipa a lucrat toată noaptea dinaintea rundei pentru a crea un demo jucabil, programând non-stop. Am adăugat funcționalități și am fixat bug-uri fără să clipim. Dimineața devreme am asamblat împreună câteva înregistrări din joc într-un trailer epic, ce înfățișa un robot curajos luptând împotriva unui univers nemilos. Da, da, știm, nu avea nicio legătură cu jocul nostru, iar judecând după grafică... era un dezastru. Majoritatea texturilor au fost luate rapid de pe Google, iar indicațiile din joc erau afișate cu un font roșu groaznic și aproape imposibil de citit. Cel mai probabil simulatorul de fizică împreună cu grafica 3D au fost piesele de rezistență care ne-a trimis în finală.

Am primit vestea calificarii noastre cu mai puțin de-o săptămână înainte de finala națională. Aceasta însemna că mai aveam cinci zile să facem jocul prezentabil. Am umplut lista de TODO-uri cu o mulțime de funcționalități noi: un nivel secundar, grafică mai bună cu texturi noi, "depth of field", o rescriere a interfeței utilizator și multe altele. Cu o zi înainte de finală aveam încă lucruri neterminate: "depth of field"-ul trebuia îmbunătățit, indicațiile din joc trebuiau și ele îmbunătățite, meniul nu era finalizat și încă ne lipseau texturi. Ne rămăseseră 24 de ore pană la prezentare, iar daca experiența ne-a invațat ceva, este că suntem foarte productivi pe ultima sută de metri.

LANSAREA NUMĂRULUI 149

Marți, 26 Octombrie, ora 18:00

sediul Cognizant

Facebook Meetup StreamEvent YouTube

NUMĂRUL 147 - Automotive

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects