Sunteți pe pagina 1din 29

Grafică pe calculator

Curs 2

Asist. univ. dr. Irina TUDOR


irina.tudor@inf.ucv.ro

2021
Termeni
- Rendering (sintetizarea imaginilor) este procesul de generare de imagini dintr-
un model 2D sau 3D cu ajutorul unui program pe computer. Termenul este
folosit și pentru descrierea procesului de calculare și aplicare a efectelor în
editarea video.
- Graphics pipeline este un model conceptual care descrie pașii pe care un
sistem grafic trebuie să-i execute pentru a randa o imagine 3D pe un ecran 2D.
- Graphics processing unit (GPU) este o unitate electronică specializată pentru a
manipula memoria în vederea accelerării creării de imagini pentru afișarea pe
un ecran. GPU sunt folosite în embedded systems, telefoane mobile,
computere și console.

2
Graphics API (application programming interface)
Folosesc hardware acceleration.
- OpenGL: cross-platform API
- Direct3D (parte a DirectX), este API pentru Microsoft Windows

3
Aplicații grafice (3D)
- 3D Studio Max
- Autodesk AutoCAD
- Autodesk Maya
- Blender
- Google SketchUp

4
Game engine
Furnizează suport pentru: fizică, rendering, scripting, detectarea coliziunilor,
inteligență artificială, etc.

- Unreal
- Unity
- GameMaker
- Godot
- CryEngine
- LibGDX – Java framework

5
Unity
- cross-platform game engine creat de Unity Technologies în 2005
- popular pentru dezvoltarea jocurilor mobile iOS și Android
- jocuri 2D și 3D, simulări interactive, film, automotive, arhitectura, inginerie, US
Armed Forces.
- Unity Machine Learning Agents: software open-source care conectează
platforma Unity cu programe de machine learning, inclusiv Google TensorFlow

6
Unity
Platforme Unity 2020 LTS:
- Mobil: iOS, Android (Android TV), tvOS
- Desktop: Windows, Mac, Linux
- Web: WebGL
- Console: PlayStation (PS4, PS5), Xbox (Xbox One, Xbox Series X/S), Nintendo
Switch, Stadia
- Virtual/Extended reality: Oculus, PlayStation VR, Google's ARCore, Apple's
ARKit, Windows Mixed Reality (HoloLens), Magic Leap, și Unity XR SDK Steam
VR, Google Cardboard.

7
Jocuri Unity

8
Documentație
• Manual: http://docs.unity3d.com/Manual/index.html
• Scripting API: http://docs.unity3d.com/ScriptReference/index.html
• http://forum.unity3d.com/

9
Assets
• Scenes
• “Prefabs”
• Scripts
• Textures
• Animations
• Models
• Particles
• Sprites
• Etc.

10
Asset store
https://assetstore.unity.com/
• Utilizatorii pot crea și vinde asset-uri către alți creatori de jocuri
• Include asset-uri 3D și 2D și environments pentru dezvoltatori

11
Activitate: Modelarea și desenarea unui cub

Realizați un desen realist al unui cub


• Modelare: cum descriem cubul?
• Rendering: cum vizualizăm modelul?

12
Activitate: Modelarea cubului
Descrierea cubului:
- centrat în origine (0, 0, 0)
- are dimensiunea 2 x 2 x 2
Care sunt coordonatele vârfurilor?

Care sunt muchiile?

13
Activitate: Desenarea cubului
Avem descrierea digitală geometrică a cubului:
Vârfuri Muchii

Cum desenăm cubul 3D în imagine 2D?


• transformăm vârfurile 3D în puncte 2D în imagine
• conectăm punctele 2D prin linii
OK... Cum facem asta?...

14
Proiecția perspectivă
Obiectele apar mai mici pe măsură ce se îndepărtează (perspectiva).
Pinhole camera model (modelul perspectivă):

15
Proiecția perspectivă: vedere laterală
Unde este proiectat un punct p = (x, y, z) pe imagine?
Notăm punctul pe imagine q = (u, v)

16
Proiecția perspectivă: vedere laterală
Unde este proiectat un punct p = (x, y, z) pe imagine?
Notăm punctul pe imagine q = (u, v)
Observăm 2 triunghiuri similare:

Presupunem ca dimensiunea camerei este 1, coordonatele sunt raportate la punctul c


Atunci v/1 = y/z (coordonata verticală este y/z)
Similar coordonata orizontala este u = x/z
17
Activitate: Desenarea cubului prin modelul perspectivă
Vârfuri Muchii

Presupunem că avem camera la punctul c = (2, 3, 5).


Transformăm punctele (x, y, z) ale fiecărui capăt de muchie în puncte (u, v):
• scădem locația camerei (c)
• împărțim x și y la z și obținem (u, v) – sub formă de fracție
Desenăm linia între (u1, v1) și (u2, v2).

18
Activitate: Desenarea cubului prin modelul perspectivă

Imaginea este în oglindă (pinhole camera projection).

19
Raster display
Abstractizarea unui display:
• Imaginile sunt reprezentate ca o grilă de pixeli 2D
• Fiecare pixel poate avea o valoare (culoare) unică

20
Close up – pixeli pe un display

21
Ce pixeli ar trebui să colorăm pentru a reprezenta o linie?
”Rasterizarea” este procesul de transformare a unui obiect continuu (linie, poligon, etc.)
într-o reprezentare discretă pe o grilă tip raster (grila de pixeli)

22
Ce pixeli ar trebui să colorăm pentru a reprezenta o linie?
Colorăm toți pixelii cu care se intersectează linia?

23
Ce pixeli ar trebui să colorăm pentru a reprezenta o linie?
Diamond rule – folosită de GPU-urile moderne:
colorăm pixelul dacă linia trece prin rombul asociat

24
Incremental line rasterization
Presupunem că linia este reprezentată de punctele întregi: (u1, v1), (u2, v2)
Panta liniei: s = (v2 - v1) / (u2 - u1)
Considerăm cazul special: Considerăm coordonatele întregi în centrul pixelului
• u1 < u2, v1 < v2
• 0<s<1

Optimizare: rescriem algoritmul folosind doar valori întregi (algoritmul Bresenham)

25
Am randat imaginea cubului folosind linii simple.
Dar pentru randarea imaginilor mai realiste (sau animații), ne trebuie un
model mai complex al mediului.
• suprafețe
• mișcare
• materiale
• lumini
• camere

26
Suprafețe 3D complexe

27
Modelarea proprietăților materialelor

28
Pe săptămâna viitoare!

29

S-ar putea să vă placă și