Tema 3 : Toon Fusion

  • Responsabil: Oana Ferche, Alex Dinu
  • Perioada de lucru: 11/12/2017 – 14/01/2018
  • Termen de predare: 14/01/2018, 23:55
  • Depunctare intarziere: 2.5p/zi pana la maxim 40p din totalul de 150p

Overview

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.1 Toon Shading


Toon Shading

Toon Outline(Stroke)

 Toon Outline(Stroke) Fig.2 Toon Outline

O tehnica de redare a conturului unui obiect este:

  1. Desenarea obiectului cu iluminare si texturare
  2. Deplasarea pozitiilor vertecsilor spre exteriorul obiectului, de-alungul normalelor: pozitia fiecarui vertex se poate modifica prin adunarea unui offset egal cu produsul dintre normala si un factor oarecare de scalare. Factorul de scalare va pulsa in timp(e.g. functie sinus de timpul scurs de la start (folosind ca uniforma GetElapsedTime())).
    Acest pas implica redesenarea obiectului cu varfurile obtinute, fara iluminare, cu o culoare constanta(e.g. negru), afisand doar fatetele auto-obturate (BACK faces), adica eliminandu-i fatetele dinspre camera(FRONT face culling). Fatetele-fata(FRONT faces) vor trece testul de adancime intotdeauna peste fatetele-spate(BACK faces), astfel ca cele din urma fiind umflate spre exteriorul obiectului, vor aparea ca un contur al sau.
    Prin desenarea obiectului iluminat si cea a aceluiasi obiect obtinut(Fig. 2) prin deplasarea pozitiilor vertecsilor, dependenta de timp, efectul obtinut este de ingrosare→subtiere→ingrosare→… a conturului in timp.

Orice solutie de desenare a conturului prin desenarea fatetelor-spate, care nu foloseste deplasarea vertecsilor va primi punctaj partial aferent acestui pas(e.g. linii cu grosime data(glPolygonMode cu glLineWidth), in loc de triunghiuri deplasate de-alungul normalelor).

Stepped Lighting

 Fig.3 Stepped Lighting Fig.3 Stepped Lighting

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:

  1. se scaleaza intensitatea din intervalul [0.0, 1.0] in intervalul [0.0, numLevels].
  2. Se aplica functia floor pe intensitatea scalata si apoi se face downscale inapoi in intervalul [0.0, 1.0], prin impartire la numLevels.

intensity = floor(intensity * numLevels) / numLevels
Formula se aplica atat intensitatii difuze cat si a celei speculare din modelul Phong.

 Fig.4 Stepped Lighting Fig.4 Stepped Lighting

Cerinte

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.

Obiectele

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:  Illuminatioooooon

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

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.

Camera

Trebuie sa aveti o camera interactiva care pe o tasta face toggle intre modurile First Person/Third Person.

Exemplu de Implementare

Bonus

  • Orice alte tehnici de desenare a conturilor, de exemplu cu Isophote Distance
  • Orice alte tehnici de redare simplificata a intensitatii luminii, de exemplu utilizand LUT tonemapping.
  • Orice e considerat ‘jawdropping’ de catre asistent.

Barem

  • 50p - Toon Outline(Stroke)
  • 30p - Stepped Lighting
  • 30p - Dynamic Lights
  • 25p - Diffuse&Specular Texturing
  • 10p - FPS/TPS Camera
  • 5p - Readme&Comentarii

Arhivarea proiectului

  • in mod normal arhiva trebuie sa contina toate resursele necesare compilarii si rularii
  • inainte de a face arhiva asigurati-va ca ati dat clean la proiect
    • click dreapta pe proiect in Solution ExplorerClean Solution, sau
    • stergeti folderul /Visual Studio/obj
  • stergeti fisierul /Visual Studio/Framework_EGC.sdf (in caz ca exista)
  • stergeti fisierul /Visual Studio/Framework_EGC.VC.db (in caz ca exista)
  • stergeti folderul /x64 sau /x86 (in caz ca exista)
    • executabilul final este generat in folderul /x86 sau /x64 la finalul link-editarii in functie de arhitectura aleasa la compilare (32/64 biti)
  • in cazul in care arhiva tot depaseste limita de 20MB (nu ar trebui), puteti sa stergeti si folderul /libs sau /Resources intrucat se pot adauga la testare. Nu este recomandat sa faceti acest lucru intrucat ingreuneaza mult testarea in cazul in care versiunea curenta a librariilor/resurselor difera de versiunea utilizata la momentul scrierii temei.

Observatii

Alte aspecte ce nu au fost prezentate raman la latitudinea voastra.

  • Se poate utiliza framework-ul de laborator sau o implementare proprie.
  • Documentatia pentru evenimentele de mouse se gaseste in fisierul /Core/Window/InputController.h

Punctajul este oferit doar pentru cerintele integrate in aceeasi scena.

Punctajul bonus se ofera doar daca cerintele obligatorii sunt implementate corect.

egc/teme/2017/03.txt · Last modified: 2017/12/16 16:50 by ovidiu.dinu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0