Introducere … … … … . 2 [615578]

Cuprins

Introducere ………………………….. ………………………….. ………………………….. ………………………….. . 2
Capitolul I ………………………….. ………………………….. ………………………….. ………………………….. … 3
Prezentarea noțiunilor teoretice și etapele dezvoltării aplicației ………………………….. ……………. 3
I. Prezentare generală ………………………….. ………………………….. ………………………….. ……… 3
II. Obiective propuse ………………………….. ………………………….. ………………………….. …….. 3
III. Elementele necesare realizării obiectivelor ………………………….. ………………………….. . 4
IV. Partajarea proiectului în module ………………………….. ………………………….. ……………… 6
V. Ordinea efe ctuării operațiilor ………………………….. ………………………….. ………………….. 6
Capitolul II ………………………….. ………………………….. ………………………….. ………………………….. . 7
Structura proiectului ………………………….. ………………………….. ………………………….. ………………. 7
I. Interfața utilizatorului ………………………….. ………………………….. ………………………….. …… 7
II. Scena, nivelul ………………………….. ………………………….. ………………………….. …………… 7
III. Caracterul jucătorului ………………………….. ………………………….. ………………………….. .. 7
IV. Obstacole și obiectele nivelului ………………………….. ………………………….. ………………. 8
V. Efectele speciale ………………………….. ………………………….. ………………………….. ………. 8
VI. Efecte speciale de sunet ………………………….. ………………………….. …………………………. 8
VII. Conexiunea, serve rul, cloud ………………………….. ………………………….. …………………… 8
I. Structura interfeței utilizatorului ………………………….. ………………………….. ………………. 10
II. Ierarhia obiectelor în scenă ………………………….. ………………………….. …………………… 14
III. Descrierea caracterului jucăto rului ………………………….. ………………………….. ………… 17
IV. Descrierea efectelor speciale și efectele de sunet ………………………….. …………………. 26
V. Conexiunile de Rețea, Sincronizarea Datelor, Servicii și Cloud …………………………. 28
Concluzie ………………………….. ………………………….. ………………………….. ………………………….. .. 34
Bibliografie ………………………….. ………………………….. ………………………….. …………………………. 35

2

Introducere

În proiectul acesta vom prezenta dezvoltarea unei aplicații multiplayer folosind editorul
Unity. Ed itorul respectiv este folosit în general pentru a proiecta jocuri de gamă largă î n
industria jocurilor video.
Unity este un motor grafic care poate genera executabile de jocuri pe diferite platforme
începând de la platformele standard Windows, Linux, MacOS până la platformele noi apărute
în ultimii 10 ani Android, Windows Phone, Backberry, iOS.
Aplicația pe care o vom crea de -a lungul acestui proiect va fi un joc proiectat pe
platforma Windows, Linux ș i MacOS .
Jocul respectiv este un prototip eSports, adică joc multiplayer online, u nde jucătorii intră
într-o competiție contra altor jucători .
Ideea prototipului este să prezinte toate modulele ș i elementele într-un ansamblu . Astfel,
jocul este compus din: cod, algoritmi, animații , formule matematic e, obiecte 3D, efecte speciale
și efecte de sunet .
Scena finală a jocului va preze nta un nivel futurist de armată î n care jucătorul va avea
rolul unui soldat , la alegere din 3 facțiuni diferite , și va lupta pentru a f ace cât mai multe puncte
echipei sa le. Toate acestea având loc în spațiu pe un asteroid antic.
Aplicația se va conecta la internet și va face legătura cu ceilalți jucă tori printr -un server
de cloud pentru a sincroniza toți jucă torii pe o sesiune. Jucatorul va fi conectat instant la server
cu un nume selectat de jucator la înc eputul jocului. Ceilalți jucători vor fi anuntati când acesta
a intrat în joc. L a fel, și jucatorul nostru va afla prin intermediul unui mesaj când alți jucatori
intra pe server, când sunt distruș i sau când reapar ori când se hotărăsc să părăsească server -ul.

3 Capitolul I
Prezentarea noțiunilor t eoretice și etapele dezvoltării a plicației

I. Prezentare g eneral ă

În această lucrare se dorește construirea unei aplicații multiplayer în Unity ce vizează
un joc online care permite jucătorilor opțiunea de a juca împreună .
Jocul este de gen „Multiplayer Third Person Shooter ”, adică un joc de armată, futurist,
cu acțiunea petrecută î n spațiu , în care jucătorul controlează un soldat cu vedere din spate.
Aplicația dorește să prezinte un prototip pentru un nou potențial eSports (gama jocuri lor
de sporturi electronice î n care se organizează campionate mondiale).

II. Obiective p ropuse

Dorim să atingem următoarele obiective propuse:
 Jocul să fie multiplayer
 Să avem un serviciu care se poate lega la un server capabil să susțină 20 de playeri într-
o sesiune.
 Jocul să aibă animații bine definite pentru caracterul jucătorului
 Să dea un efect de realism
 Să aibă un mediu ambiental plăcut
 Să avem efecte vizuale implementate
 Să avem efecte auditive
 Să avem muzică ambientală
 Să avem o interfață de ut ilizator intuitiv ș i ușor de utilizat
 Programul să funcționeze optimizat pe sis temele de calculator asamblate î n ultimii 5 ani
cu platforma pe Windows, Linux ș i MacOS

4 III. Elementele necesare realizării o biectivelor
Pentru a realiza obiectivele propuse, vom parcurge următorii pași:
 Vom crea o scenă î n Autodesk Stud io 3Ds Max, un program în care se realizează obiecte
complexe 3D. (Figura 1 .1)

Figura. 1.1
 Vom utiliza editorul gratuit Auda city pentru editarea melodiilor și a sunetelor utilizate
în dezvoltarea programului. (Figura 1 .2)

Figura 1 .2
 Vom utiliza programul Mo noDevelop pentru a scrie codul ș i scripturile C# al aplicației
(Figura 1 .3)

5
Figura 1.3

 La final vom utiliza motorul Unity pentru a asambla aplicația . (Figura 1 .4)

Figura 1 .4

6 IV. Partajarea proiectului în m odule
a) Primul modul este pr ogramarea î n sine a elementelor:
 cod
 algoritmi
 scheme logice
b) Al doilea modul constă î n abstractizarea obiectelor necesare aplicației:
 obiecte vizu ale
 scena jocului
 caracterul jucătorului
 efecte vizuale
c) În ultimul rând avem modulul care va fi răspunzător pentru :
 sunetul joc ului
 muzica ambientală
 efectele sonore

V. Ordinea efectuării operaț iilor

 Vom programa toate părțile jocului ș i vom scripta toate obiectele folosind
dummies/place holdere , adică obiecte simple care țin locul obiectelor de mare calitate
temporar , până când ele sunt prelucrate î n programul de design (Autodesk 3Ds Max) .
 Vom adăuga mai târziu obiectele care vor înlocui obiectele simple de test ș i le vom
încerca cu scripturile făcute .
 Odată ce scena e completă ș i obiectele sunt la locul lor ș i au funcționalitate , vom încerca
să adăugăm efectele de sunet ș i efectele vizuale.
 Iar în ultimul rând, vom testa toate ascestea î n produsul final care va rula online
(sincronizarea datelor î n rețea și pe server astfel încât fiecare jucător din rețea să vadă
aceleași evenimente) .
 Testarea aplicației.

7 Capitolul II
Structura p roiectului

I. Interfaț a utilizatorului
Interfața este primul și cel mai important lucru la intrarea jucătorului în joc și implicit în cadrul
rețelei unde va putea juca cu ceilalți jucători. Interfața va fi una care să suporte intrarea ș i iesirea
din aplicatie . Totodata aceasta va suporta și alegerea echipei, dar și reintrarea în joc dacă
caracterul jucatorului a fos t distrus de un inamic. Interfața este constituită din elemente grafice,
care apar pe fereastra jucatorului ca ș i text de tip buto n. Butoanele respective lansează comenzi
către diferitele funcț ii descrise de textul descriptiv.

II. Scena, nivelul

Vor exista două scene , una la intrarea în joc, și cealaltă la intrarea pe nivelul selectat de
jucător . Scena de introducere va conține un meniu care va lăsa jucătorul să decidă dacă să intre
în joc sau să închidă aplicația . A doua scenă va reprezenta nivelul pe care intră jucătorul și care
va conține harta jocului: un asteroid antic pe inelul care orbitează in jurul unei planete.
Asteroidul are doua părți cu doua baze interconectate prin doua benzi.

III. Caracterul jucă torului

Când jucătorul va intra pe nivel, vom av ea nevoie de un caracter care să poată fi
controlat individual de un jucător . Jucătorul trebuie să poată vedea caracterul din spate și să
poată trage camera î n stânga și în dreapta, în sus și în jos (vizualizare î n toate direcțiile ).
Caracterul trebuie să realizeze o dinamică a mișcării în cazul î n care jucătorul apasă pe
butoanele de sens ș i direcție . Acest lucru va fi realizat prin ajutorul animațiilor de locomoție
care vor simula atât viteza cât ș i accelerația .
Jucătorul trebuie să aibă acces la arma caracterului, astfel încât atunci când da click ,
arma să execute trage rea unui proiectil de tip laser. Proiect ilul laser are ca scop lovirea
caracterul ui altui jucător provocând astfel daune.

8 Fiecare caracter va avea 100 de puncte care reprezintă viaț a, iar arma caracterului va
avea câ te 15 puncte putere de daunare a adversarului.

IV. Obstacole și o biect ele n ivelului

Nivelul trebuie să aibă mai multe obstacole ca jucătorii să ajungă într-o competiție care
depinde de tactica ș i logica jucătorilor . Vom folosi mai multe obiecte, obstacole prin care
jucătorii pot crea strategii ș i tactici împotriva echipei adversare.

V. Efectele s peciale

Nivelul va folosi divers e efecte speciale printre care și: efect special de flacără pentru
simularea fo cului, efect special de fum/ceață, lumina în timp real cu iluminare globală și umbre
în timp real cu reflexii reale. Obiectele vor avea materiale de mare calitate care conțin efecte de
textură cu grosime ș i reflexie a luminii.

VI. Efecte speciale de s unet

Aplicația va conține muzica ambientală pentru scene ș i efecte de sunet atât pentru
caracter cât și pentru arma acestuia .

VII. Conexiunea, serverul, cloud

Cel mai important lucru din aplicația noastră îl rerezintă conexiunea la internet. Aceasta
este principalul element pe care se bazează tot jocul, făcându -l unul de tip multiplayer. Noi vom
folosi serviciul Photon Unity Networking. Acest serviciu va fi folo sit pentru a ne conecta la un
server în cloud ș i prin intermedul său vom ave a acees la 20 de conexiuni. Acest lucru va permite
ca 20 de jucători să poată juca împreună .
Tot în această zonă va trebui să sincroniză m toate datele locale cu cele de pe server ,
astfel încâ t, fiecare jucător să vadă aceleaș i evenimente. În cazul în care un jucă tor face ceva pe

9 calculatorul lui, atat serverul cât și ceilalți jucători vor avea posibilitatea să vada același lucru
în acelasi timp.

10 Capitolul III
Prezentarea a plicației

I. Structura interfeței u tilizatorului

Interfaț a utilizatorului este alcatuit ă din:

 Primul meniu care apare jucă torului, este m eniul din scena de introducere, î n care
jucătorul poate să aleagă între doua butoane: Play ș i Exit. Butonul Play continuă jocul
la scena urmatoare unde se încarcă ș i nivelul, iar butonul Exit ajută utilizatorul să
închidă aplicaț ia (Figura 3.1) .

Figura 3.1

11 Scrip tul butonului Play si Exit arată în felul urmă tor (Figura 3.2) :

Figura 3.2

12  Al doilea meniu constă î n selectarea factiunii pe care jucatorul poate sa -si aleaga.
Jucato rul poate sa aleaga intre 3 facț iuni diferite, Independența, Federația și Stră ini
(Figura 3.3) .

Figura 3.3

Meniul respectiv face parte din scri ptul NetworkManager care totodată este responsabil
și pentr u conexiunea la server, astfel încât odată ce meniul selectării facțiunii apare, aplicația
noastră face conexiune la server și putem să jucă m online (Figura 3.4).

Figura 3.4
 În cazul î n care cara cterul nostru moare, jucătorul va fi dus la un meniu care îi dă
oportunitatea să se reconecteze la joc , astfel el poate continua lupta (Figura 3.5).

13

Figura 3.5

Acest buton reinițiază funcția care ne da spawn la jucător, adică vom reapărea î n joc
(Figura 3.6).

Figura 3.6

 Jucătorul poate ș i el deschide un meniu care poate fi accesat din joc apăsând buton ul
Escape de pe tastatură ș i astfel va apărea un meniu care ne descrie 3 funcții simple: Exit
To Main Menu, Exit The Game, Resume (Figura 3.7) .
 Exit To Main Menu, încarcă scena de introducere din nou închizând conexiunea
la server și scena curentă .
 Exit The Game, iese din aplicație .
 Resume ne duce înapoi în joc.

Figura 3.7

14

Aceste butoane fac p arte din meniul options, ele avâ nd scripturile d e funcționalitate
reprezentate î n Figura 3.8.

Figura 3.8

II. Ierarhia obiectelor în s cenă

Ambele scene folosesc o ierarhie de obie cte, însă unele obiecte conțin și animații. Prima
scenă conține introducerea î n joc, caracterul princi pal al jocului, meniul de selecție și camera
cu animația de introducere, în adiț ie mai avem controalele standard pentru t astatură ș i mouse
(Figura 3.9) .

15

Figura 3.9

Animația camerei fiind reprezentată de diferite rotații și poziții fața de axele X,Y,Z în
anumite intervale d e timp, acestea toate , sincronizate cu melodia de introducere (Figura 3.10).

Figura 3.10

A doua scenă reprezintă nivelul de joc î n sine, pe care jucatorul își face apariția după ce
își selectează facțiunea cu care dorește să joace. Ierarhia de obiecte este reprezentată î n Figura
3.11 și Figura 3.12 (continuare). După cum se observă, toate obiectele din scenă pot conț ine
scripturi C# sau alte componente obiecte.

16

Figura 3.11

Figura 3.12

17 III. Descrierea caracterului jucă torului

Jucătorul nostru este de fapt un obiect cu o înfățiș are făcută după modelul uman. Astfel ,
când caracterul respectiv intră în scenă, jucătorul care îl joacă are posibilitatea de a vedea pe
ecran o cameră third person , adică o cameră ce permite form area unei imagini cu vedere din
spatele caracterului pentru care a fost scris ă o formulă matematică ce ține camera î n unghiuri
limită. Exemplul caracterului jucător se află î n Figura 3.13 , iar formula e decrisă în Figura 3.14.

Figura 3.13

18

Figura 3.14/a

19
Figura 3.14/b

Aceasta este primul lucru de care caracterul nostru are nevoie pentru a vedea lumea
interioară a jocului. Acum vom trece la dinamica mișcări ș i la animații le care ne va face
caracterul să se uite în direcția camerei, să se aplece sau s ă se uite î n sus când e nevoie.
Caracterul are un sistem complex de animații creat pe baza de porți logice care intercon ectează
sistemul întreg. Pe bază de porți logice, caracterul nostru va trece dintr -o stare î n alta a
animațiilor. Iar ac ele animații ne vor da un efect al mișcări realistice mulțumită tehnolo giei
Unity Mecanim Animations. Î n următoarele Figuri, bucăți de cod vor fi prezentate . Acestea
descriu sistemul de animații.
Vom inc epe cu Figura 3.16 ce prezintă lista parametrilor ca re sunt folosiți în sistemul
de animaț ii din Figura 3.15.

Figura 3.15

20

Figura 3.16

Tranziția dintr -o stare î n alta a animațiilor se bazează pe porțile logice reprezentate prin
săgețile care apar î n Figura 3.15. P aram etrii din figura 3.16 se schimbă pe bază de calcul din
scriptul P layerController.cs care verifică inputurile trimise de că tre jucator atunci când el mișcă
mousu l sau apasă butoanele corespunzătoare pe tastatură . Un exemplu simplu în acest sens este
tranziț ia de Sprint, care are mai multe stări pe care le vom prezen ta în Figurile 3.17 , respectiv
3.18, atât poarta logică cât ș i script pentru parametrul Sprint.

21

Figura 3.17/a

Figura 3.17/b

Figura 3.18

22 Cum putem observa, în figurile de mai sus tranziț ia de la Walking , trece la Sprin t dacă
apăsam butonul de Spr int. A tunci parametrul numit Sprint va fi setat pe true, ceea ce înseamnă
că se va inițializa o tranziț ie.
Acest lucru se va schimba puțin în cazul în care avem la animaț ii diferite nivele , ca de
exemlu: în cazul în care dorim să păstrăm animaț ia de Waliking , dar dorim să ne uitam în jos
sau în sus, în funcție de rotația verticală a camerei . Atunci vom transmite unghiul în care ne
uitam ca și parametru în primul râ nd la han dler-ul de caractere internet căci dorim oricum să
sincr onizam acea dată. În Figura 3.19 ș i 3.20 vom v edea cum am obț inut acest lucru.

Figura 3.19

23 Figura 3.20

În Figura 3.19 nota „M” înseamnă că se foloseș te un Mask care s e suprapune cu Mask –
ul folosit î n layerul Base iar „A” înseamnă că animația este aditivă, adică nu se suprapune
animațiilor din Base Layer ci sunt ad iționali astfel încât se combină cele două animații dând
naturalețe caracterului.
Următorul pas este să ajutăm caracterul să -și poată folosi arma, făcând click cu mausul
el va putea să dea c u un proiectil laser, obiectul î n sine și scriptul pentru acesta sunt descrise în
Figurile 3.21 și 3.22. Așadar, putem observa că avem o funcție care se folosește de un obiect
făcut manual ca să proiecteze acea linie de laser scăzâ nd din viața inamicului.

Figura 3.21

24
Figura 3.22/a

25
Figura 3.22/b

Odată ce avem un caracter care poate să tragă cu arma putem observa că acesta a prins
viață. Pe lângă asta, el nu este doar cel care va trage, ci și cel în care se va trage, devenind astfel
o țintă. Curând jucătorul va înțelege că personajul său nu are capacitatea de a trăi veșnic, acesta
fiind imortal. Î n Figura 3.23 d e mai jos adăugam putere armei și ne inițializăm ș i viața.

Arma – Figura 3.23/a

26
Viață – Figura 3.23/b

IV. Descrierea efectelor speciale și efectele de s unet

Efectele speciale și de sunet sunt foarte importante într -un joc. Ele au un im pact sporit
asupra jucătorului. Prin intermediul acestor efecte vizuale ș i auditive jucatorului i se conturează
un univers mai interesant ș i mai atrăgător. Astfel, pentru a da un plus și pentru a completa jocul,
soluția perfectă a fost să apelăm la niște efecte de sunet ș i efecte de particule vizuale pentru
armă. Am adaugat și două melodii de muzica ambientală pe fundal . Acest e efecte sonore alături
de efectele speciale au rolul de a spori intensitatea jocului și de a creea o admosferă specifică

27 pusă în legătură directă cu tema aleasă pentru joc. În urmă toarele Figuri 3.24, 3.25 este descris
modul în care am adaugat ș i am folos it aceste efecte.

Melodie Ambientală Scena 2 – Figura 3.24

SniperBulletFX – Sunet ș i efecte v izuale, obiect complex care conține sunet și moșteneș te
efecte vizuale – Figura 3.25

28 V. Conexiunile de Reț ea, S incronizarea Datelor, Servicii ș i Cloud

Fiind că este vrba despre o aplicație multiplayer , cea mai interesantă parte o constituie
conexiunea la internet ș i cloud . Folosind serviciul Photon Unity Network ing vom avea acces
gratuit la un server de cloud unde aplicația noastră va intra pe un server împreună cu ceilalți
jucători . Având max im 20 de locuri pe server vom avea șansa să jucăm în echipe de 10 versus
10 jucători, sau 6 versus 6 versus 6 cu rest de 2 locuri pentru orice echipă. Î n figura de mai jos
vom prezenta sincronizarea datelor, a dică a animațiilor, locomoției ș i a efectelor pentru ca
jucătorii de pe internet să vadă aceeași lume î n forma ei cu toții (Figura 3.26) .

Figura 3.26

29 În acest subcapitol putem menționa că după realizarea conexilor , adica după ce serviciul
Photon este co necta t, jucatorul nostru va fi î n stare să apară pe nivel și să se poată juca cu ceilalți
jucători de pe server. Fără conexiune la internet nivelul nu ar porni. În Figura 3.27 putem să
vedem conexiunea la internet ca și iniț ializare :

Figura 3.27/a

Figura 3.27/b

Odată cu inițializarea făcută vom putea da Spawn la jucator (Figura 3.28), și jucătorul
va fi conectat până când sesiunea nu e inchisă de jucator prin inchide rea aplicației în mod forțat
sau apăsâ nd „Exit The Game ” în meniul de Options.
După cum putem observa , funcț ia „SpawnMyPlayer ” este mai mult decat u n simplu
spawn. Aceasta dă comandă directă la meniuri , la initializarea juca torului, evitând conflictul de
a avea două camere primare pentru același jucător. Totodată putem observa că se crează o
instanță pentru jucător î n serviciul PhotonNetwork .

30
Figura 3.28

Funcția SpawnMyPlayer primește ca parametru un teamID , adică identitate de facțiune.
Asta înseamnă că jucatorul inainte să fie pus în joc primește identitatea facțiunii pentru care a
ales să lupte. Acest lucru este definit î n obiectul numit TeamMember și definiția acestui obiect
se poate vedea î n Figura 3.29.

31
Figura 3.29

În definiț ia din fi gura de mai sus putem observa că bazat pe diferite identităț i, noi vom
da diferite culori cara cterelor jucă torilor , astfel ei se vor putea di stinge. Putem observa mai sus
că obiectul mySkin , adică caracterul este unul separ at față de myWeapon . Asta pentru că am
separat obiectele respecti ve pentru eventualele implementă ri a caracterelor care vor folosi mai
multe tipuri de arme, iar de teamID va ține cont rețeaua ca să poata separa jucă torii.
Totodată managerul nostru de rețea ține cont ș i de e fectele de particule randate atât
local cât și în reț ea, mai ales pentru proiectilul laser cu care tragem. (Figura 3.30)

32
Figura 3.30

Obiectul NetworkCharacter va miș ca caracterele altor jucători pentru jucătorul nostru
după ce sinconizarea s -a făcut și după ce au rulat scripurile de mai sus. Putem vedea î n Fugura
3.31, mișcarea dinamică a caracterelor ș i cache-ul creat de OnPhotonSerializeView () – funcția
noastră de serializare a da telor pentru a avea un joc care merge curat ș i în care caracterele se
mișcă natural.

33
Figura 3.31

34 Concluzie

Aceast joc este exemplul perfect al unei aplicaț ii multiplayer realizat e în Unity.
Aplicația reprezintă un joc video care descrie î n mod perfect genul jocurilor Multiplayer Third
Person Shooter acesta fiind realizat prin elemente de grafică oferite de motorul grafic Unity, de
programele profesionale de aju tor în obiecte, modele 3D realizate prin Autodesk 3Ds Max,
sunetele editate cu ajutorul progr amului Audacity ș i editorul de cod C# integrat in Unity,
MonoDevelop.
Jocul conține animații contemporane, grafică de ultima generație și rulează pe
platformele Windows, Linux, Mac OS.
Jocul aduce o lume ambientală și bogată în efecte vizuale ș i auditiv e. Fiind multiplayer
se conecteaza la Cloud , unde serverul are 20 de cone xiuni pentru a suporta meciuri între jucători
de 10 versus 10, având facțiuni asta se poat e împărți și în 7 versus 7 versus 6. Având aceste
descrieri jocul oferă un prototip perfect d e un joc eSports, adică joc competitiv între jucă tori.
Pe viitor s -ar putea face câteva îmbunătățiri care să conste în animații suplimentare
pentru caracter, îmbu nătățirea graficii ș i optimizarea elementelor grafice pentru sisteme mai
vechi de mai multe generații. Însă și în forma actuală, jocul prezintă o scenă finală, un nivel
futurist de armată î n care jucătorul ia rolul unui soldat la a legere din 3 facțiuni dif erite și luptă
pentru a face cât mai multe puncte echipei sale. Toate acestea au loc î n spațiu pe un asteroid
antic, loc în care a fost pozițonat caracterul.

35 Bibliografie

1. Sue Blackman, Begining 3D Game Developement with Unity: All -in-one, multi –
platform game engine , Ed. Apress, 2011
2. Joseph Albahari, Ben Albahari, C# 5.0 in a Nutshell , 5th Edition, The Definitive
Reference, Ed. Gravenstine Highway North, Sebastopol, 2012
3. Horea Oros, Programarea in C# , note de curs – format electronic, Univer sitatea din
Oradea
4. https://unity3d.com/
5. https://www.assetstore.unity3d.com/en/#!/content/1786
6. http://au dacityteam.org/
7. http://www.autodesk.com/products/3ds -max/overview

Similar Posts