Scopul acestei teme este de a studia concepte din sinteza imaginilor pe calculator
( Computer Generated Imagery(CGI)): iluminare si texturare, ce implica utilizarea shaderelor.
Va veti familiariza cu functionalitile benzii grafice programabile(adica ale shaderelor) prin explorarea tehnicilor non-photorealistic rendering :
toon/cel shading(alcatuit din 2 componente: toon outlining (axat pe vertex shader) si stepped lighting(axat pe fragment shader), Fig1.).
Acestea sunt utile pentru reprezentarea stilizata(usor de distins/citit de pe ecran) a obiectelor 3D. Tehnicile sunt utilizate in CAD(e.g. Solid Edge, Solid Works, etc.) jocuri video(Dragon Ball Z, Ultimate Spider-Man, Teenage Mutant Ninja Turtles, Prince of Persia, X-Men Legends, Borderlands, etc.) filme de animatie si alte tipuri de aplicatii 3D.
Fig.1 Toon Shading
Fig.2 Toon Outline
O tehnica de redare a conturului unui obiect este:
O tehnica de redare simplificata(Fig. 3 si Fig. 4) a intensitatii luminii este segmentarea intensitatii prin rotunjirea prin lipsa (functia floor) a unui real ce reprezinta intensitatea luminii. Limita superioara a intensitatii este intregul ce reprezinta chiar numarul de niveluri (numLevels) de intensitate. Procedeul este astfel:
intensity = floor(intensity * numLevels) / numLevels
Formula se aplica atat intensitatii difuze cat si a celei speculare din modelul Phong.
Se va construi o scena care va avea un obiect principal in mijlocul sau, o platforma(ground) si minim 4 lumini dinamice(se vor deplasa dupa legi de miscare alease de voi). Efectul de rendering Toon Shading(Cel Shading) va fi (dez)activabil si modificabil(vezi numLevels in sectiunea Stepped Lighting) de la tastatura si va veti putea deplasa si explora scena cu ajutorul camerei.
Puteti alege ce obiecte vreti voi. Obiectul central va fi suficent de complex si relativ dens din punct de vedere geometric(e.g. personaje, masini, etc.). Google ‘free 3D models’ sau creati-le intr-un program precum Maya/3DS Max/Blender/C4D/etc, este la latitudinea voastra.
Obiectele trebuie iluminate. Minim un obiect(cel principal) trebuie texturat. Veti folosi o textura de culoare difuza din care extrageti Kd(vector de 3 componente(RGB)) si una de culoare speculara (Ks, tot RGB, extras si el din textura).
Formula pentru calculul culorii in fragment shader:
cu KE constanta emisiva(puteti sa o ignorati in tema), L lumina, diffuseFact si specularFact intensitatile difuza respectiv speculara, KA constanta ambientala, KD culoarea difuza, KS culoarea speculara, objColor culoarea obiectului(optional, poate lipsi(considerat(1,1,1))).
Luminile vor avea culori diferite si vor fi dinamice(se vor misca in jurul obiectului dupa o lege de miscare aleasa de voi). Cu cat mai complexa miscarea, cu atat mai bine. Un minim posibil al complexitatii este ca de exemplu luminile sa se roteasca in jurul axei OY din lume si sa penduleze sus-jos, sinusoidal, una din ele avand satelit o alta. Initial luminile se vor afla la pozitii aleatoare in jurul obiectelor.Luminile vor fi pozitionate la o distanta potrivita de obiecte, incat efectul lorsa fie vizibil in mod clar. Toate luminile vor avea atenuare. Luminile vor fi redate in scena prin sfere colorate in culorile luminilor, culori constante(neiluminate). Veti avea o tasta de Pause/Resume la miscarea luminilor.
Trebuie sa aveti o camera interactiva care pe o tasta face toggle intre modurile First Person/Third Person.