Eterna - Soft - Cluj - 2009 Nationala

Informatii generale

  • Categorie: Soft
  • Judetul: Cluj

Descriere

Ideea de baza din spatele generarii procedurale este ca, orice rezultat ai avea, poate fi obtinut dintr-un anumit numar de operatii de baza. Astfel, in loc sa stochezi rezultatul final, vei stoca doar ce-ai facut pentru a ajunge acolo. In acest mod, fisierele vor ocupa mult mai putin spatiu ca inainte (uneori rata de compresie poate fi chiar 1:1.000.000.000, in cazul unor texturi).

Tehnica generarii procedurale este folosita, de obicei, in simulari 3D, ideal find pentru jocuri. Aceasta poate fi folosita la aproape toate elementele unui joc, si anume la modele 3D, texturi, sunet si animaţii. Să zicem ca avem un joc care ocupa 4 GB. Dintre aceştia, 2 GB sunt ocupati de texturi, 1GB de modele 3D, iar restul de sunet, harti si asa mai departe. Daca din cei 2GB de texturi, macar 1,6 GB, reprezentand texturile non-esenţiale (pentru cladiri, obiecte si asa mai departe), ar fi stocate ca scripturi procedurale, acestea ar ocupa maximum 10 MB. Analog si pentru modelele 3D. Astfel, dintr-un joc care, in mod normal, ar ocupa destul de mult spatiu, se poate ajunge la ceva ce nici nu se simte. Apoi, la rulare, programul isi generează pe rand toate resursele pe baza scripturilor.

Generarea procedurala este folosita de cateva grupuri de entuziasti in ale programarii. Acestea se numesc demo group-uri si orbiteaza in jurul Demoscene-ului (www.demoscene.info) si Pouet (www.pouet.net). Aceste group-uri creeaza demo-uri neinteractive de 64kb, 32kb sau chiar 4kb, cu ajutorul acestei tehnici. Exista anumite demo-uri de 128kb care genereaza aproximativ 1.5 GB de date.

Eterna ofera utilizatorului acces la generarea procedurala, mai exact, partea de modelare 3D. Practic, cu ajutorul acestui tool pot fi create modele 3D, iar apoi salvate ca si script procedural, pentru a fi folosite în diverse aplicaţii. Programul vine cu o interfata simpla si intuitiva. Acesta iti pune la dispozitie 8 operatii, grupate in shape-uri (box, sphere, torus, cylinder) si operatii propriu-zise (select, scale, move, rotate). Shape-urile sunt generate cu ajutorul primitivelor din DirectX. Operatiile prorpiu-zise pot fi aplicate global (afectand tot modelul), sau local (afectand doar un anumit shape). Editarea proprietatilor unei operatii se poate face direct, introducand valori, sau indirect, folosind widget-urile care apar pe ecran la selectarea unei operatii. In cazul in care un shape va fi folosit mai mult de o data, exista posibilitatea de a fi convertit in Prefab, pentru a fi folosit ulterior. Odata adaugate in model, acestea pot fi editate si reconvertite in Prefab. De asemenea, apar si elementele de baza gen undo/redo, cut/copy/paste, dar si paste in place, paste before si paste after. Pe langa asta, exista si doua moduri de vizualizare, solid si wireframe, precum si optiunea de a desena vertex-urile. Modelele rezultate ocupe foarte putin spatiu, uneori chiar sub 100 bytes, iar codul de generare vine odata cu aplicatia, pentru ca modelele sa poata fi folosite. Cu toate aceste, Eterna nu se ocupa de texturare. Pimitivele din DirectX nu vin cu texture coordinates, prin urmare acelea vor trebui setate de programator.

Tehnologii

Microsoft Visual C# 2005, DirectX

Cerinte sistem

-Windows XP/Vista/7
-procesor: minim 1 Ghz
-256 MB Ram
-.Net framework 2.0 Sp 1
-2 MB HDD

Realizatori

Baciu Alin-Serban

  • Scoala: Liceul Teoretic “Onisifor Ghibu”
  • Clasa: XII
  • Judet: Cluj

Screenshots



Ideea pe care o propune softul tau este cel putin ingenioasa :smile:
Nu am mai intalnit-o - asa ca nu pot (inca) sa spun cat de implementata/studiata de altii este.

Este clar faptul ca atunci cand salvezi memorie, sacrifici procesor si reciproc. E un trade-off. Intrebarea mea pentru tine este in ce masura sufera procesorul din cauza stocarii procedurale a modelelor / cat de mare este efortul de a reface modelul din descrierea procedurala?

S-ar putea ca solicitarea suplimentara a procesorului sa NU justifice spatiul salvat, in ciuda eficientei acestei arhivari.

La prezentarea proiectului, pe langa feature-urile acestuia, iti recomand sa aduci cu tine si un studiu al:
- raportului spatiu necesitat de stocare conventionala / stocare procedurala
- raportul timp necesitat incarcare model procedural / stocare convetionala
- produsul celor doua valori de mai sus (care ar descrie eficienta trade-off-ului memorie procesor)

Am definit 3 variabile de studiat.
Ar fi bine sa studiezi evolutia acestor trei variabile in functie de doi parametrii (liberi):
- complexitatea spatiala a modelului (i.e. numar de poligoane)
- complexitatea procedurala a obiectului (i.e. numar de operatii necesare construirii lui procedurale).

Nu-ti pot da exact domeniile de valori pentru cei doi parametrii liberi, pentru ca nu sunt specialist in domeniu, dar spre exemplu:
complexitate spatiala: 10-100.000 poligoane (poate exagerez)
complexitate procedurala: 10-10.000 operatii (iar exagerez :smiley:)

Aceasta analiza ar fi un mare plus pentru proiectul tau. Va grafice si tabele pentru cele trei valori, in functie de cei doi parametrii liberi. O sa fie mult mai convingator daca ai demonstra care este zona din acest domeniu 2D in care metoda ta e mai eficienta decat metoda conventionala.

Inca un lucru important: spatiul de stocare e ieftin, timpul de procesare e scump. Si nu e o metafora, ma refer la real money. Poti in plus tine cont de cat de mult reduci “costul” unui incarcarii/salvarii unui obiect prin metoda ta fata de cea conventionala. Pentru detalii despre costuri de stocare/procesare/transmisie LAN/Internet, iti recomand http://research.microsoft.com/pubs/70001/tr-2003-24.pdf

Last but not least, sa te adresezi si urmatorei probleme:
In ce masura a-i da unui utilizator acces la procesul prin care un designer a ajuns la un model inseamna “a-i trada arta” acelui designer ?

Presupun ca e suficient pentru seara asta :smile:

Multumesc pentru comment. Voi incerca sa-ti raspund la intrebari.

Este clar faptul ca atunci cand salvezi memorie, sacrifici procesor si reciproc. E un trade-off. Intrebarea mea pentru tine este in ce masura sufera procesorul din cauza stocarii procedurale a modelelor / cat de mare este efortul de a reface modelul din descrierea procedurala?[/quote:uh71bnr4]
Refacerea modelului se face aproape instant, nu am facut calculele in milisecunde, insa eeepc-ul meu 901 la 900mhz genereaza un model mai complex fara sa clipeasca. Voi face si un stiudiu in milisecunde. La modele ceva mai mari, s-ar putea sa tina un pic mai mult, dar nu mai mult decat un model normal. Am facut un model cu o sfera de raza 10 si 40slices/stacks si un cylinder asemanator si il genereaza aproape instant, deci nu cred ca ar fi o problema, in comparatie cu un model obisnuit pentru care programul va trebui sa citeasca tot fisierul care contine modelul.

- raportului spatiu necesitat de stocare conventionala / stocare procedurala[/quote:uh71bnr4]
daca te uiti la poza 1, casa aia, ca si script, ocupa 115 bytes. Un model identic, facut in 3DS Max si exportat in format .3DS fara texture coordinates ocupa aproximativ 256kb. asta inseamna ca modelul procedural ar incapea de aproximativ 2226.086 in spatiu pe care il ocupa modelul clasic. Din nou, pot fi stocate modele mai detaliate, cum spuneam mai sus, fara a avea un fisier urias.

- raportul timp necesitat incarcare model procedural / stocare convetionala[/quote:uh71bnr4]
aici pot sa-ti spun ca depinde. depinde de format, depinde de modul de incarcare, de frameworkul de incarcare si asa mai departe. Dar o sa fac cateva cercetari, cel putin cu privinta la formatul .X, cu care vine DirectX.

[quote:uh71bnr4]Last but not least, sa te adresezi si urmatorei probleme:
In ce masura a-i da unui utilizator acces la procesul prin care un designer a ajuns la un model inseamna “a-i trada arta” acelui designer ?

hmm. sa stii ca m-am gandit si eu bine la asta, dar eu m-am gandit ca voi face toolul freeware, si atunci va trebui sa dau codul de generare. Dar asta nu inseamna nimic. Un programator bun il va serializa intr-o clipa.
Momentan nu e serializat, este un .txt cu extensia schimbata la .ets (cliseu). Cineva care face un proiect, sau ceva de genu, probabil va converti modelele in binar, sau le va introduce in formatul sau de stocare, sau ceva de genul. Toate firmele fac asta. Crysis foloseste un format de 3DS Max, doar ca headerul este modificat.
Dar eu am zis ca, de vreme ce probabil n-o sa cer bani pe el, sa nu dau codul de generare l-ar ucide din fasa. M-am gandit si la posibilitatea de a-l face open source.

[quote:uh71bnr4]Inca un lucru important: spatiul de stocare e ieftin, timpul de procesare e scump. Si nu e o metafora, ma refer la real money.

hmm. eu am incercat sa fac codul cat mai rapid posibil (cel putin pentru c#). Probabil ca in C++ codul poate functiona mult mai bine, insa eu am facut proiectul initial pentru CIA, si atunci a trebuit sa fie C#. In orice caz, codul de generare pe care vreau sa-l dau va fi, cel mai probabil, in C++.

Oricum, generarea procedurala ar putea fi folosita si indirect. aici ma refer si la texturi, care nu intra in proiectul meu. Daca sa zicem ca ai facut un joc 3D si faci un update, ai putea pune modelele procedurale in update, urmand sa fie generate “pe bune” la aplicarea update-ului, chestie ca ar scadea drastic marimea update-ului. Daca faci si texturile procedural, cel mai mare ar fi exe-ul. Texturile pot fi reduse prcedural, de la 5 mb la 100kb, deci spatiul castigat este urias. Bineinteles, nu vei putea face chiar totul procedural. Adica nu vad cum ai face o fatza procedural, sau cum ai modela un om cu toolul meu, dar, la urma urmei, eu nu sunt cine stie ce artist, asa ca banuiesc ca se poate.

[quote:uh71bnr4]Nu am mai intalnit-o - asa ca nu pot (inca) sa spun cat de implementata/studiata de altii este.

Din cate stiu eu, nu exista un tool de genu care sa faca modele independent. Demogroup-urile au toolurile lor, insa acelea sunt facute pentru demo-making, nu pentru general public. Nu iti ofera cod de generare si nici macar nu iti ofera modelul in sine. Acesta intra automat in demo.

SIncer, eu am vrut sa atrag atentia ca, la crearea unui joc/simulari/whatever, pot fi folosite si alte tehnici, care sa ocupe mai putin spatiu, decat cele clasice. Nu stiu in ce masura o sa reusesc, dar macar cativa se vor gandi si la asta, prin urmare, scopul meu va fi atins.

Sper ca ti-am raspun la intrebari, si multumesc din nou de comment.

Si eu iti multumesc pentru raspuns.
Asa cum am inteles eu modelul tau procedural - ai putea sa cam modelezi orice - inclusiv feţe umane si corpuri cu o geometrie complexa (in masura in care extinzi modelul procedural incat sa curprinda si NURBS :smile: )

Si tocmai aici vine te tricky part. Cand ai un model relativ redus ca numar de poligoane (google The Art of Low Polygons), dar foarte complex din punct de vedere al procesului lui de realizare (feţe umane, personaje, maşini desenate în detaliu aproape tehnic etc), s-ar prea putea ca modelul tau sa devina mai putin eficient decat unul conventional. Sigur pentru 7 primitive aruncate si translatate/rotite/scalata, modelul tau e pe depaaaaaaaarte mai eficient, dar ar fi foarte interesant de vazut de la ce punct in sus devine “nu chiar asa de eficient” in comparatie cu ala clasic.

In lumea de astazi, cu toata tehnologia deja existenta, e greu sa faci ceva mai bun intotdeauna, in toate cazurile, indiferent de situatie. De aia trebuie sa-ti identifici bine nişa, use-case-urile, domeniul pe care metoda ta e eficienta.

Discutia va urma la iarba verde @Galaciuc :smile:

Asa cum am inteles eu modelul tau procedural - ai putea sa cam modelezi orice - inclusiv feţe umane si corpuri cu o geometrie complexa (in masura in care extinzi modelul procedural incat sa curprinda si NURBS :smile: )[/quote:34qkjgvm]
da, ma gandeam si la NURBS , dar trebuie sa mai studiez pentru asta.

Krueger


In lumea de astazi, cu toata tehnologia deja existenta, e greu sa faci ceva mai bun intotdeauna, in toate cazurile, indiferent de situatie. De aia trebuie sa-ti identifici bine nişa, use-case-urile, domeniul pe care metoda ta e eficienta.


hmm...ai dreptate, e greu sa aduci ceva mai bun indiferent de situatie. Initial il gandisem pentru geometria statica, avand in vedere ca nu are posibilitati de animare si geometria statica ocupa destul de mult.

[quote:34qkjgvm]Discutia va urma la iarba verde @Galaciuc

will do :smile:

Bravo Aline!! Super tare softu.

timotei21

Bravo Aline!! Super tare softu.


multzam :smile:

Seamana foarte mult cu Art of Illusion :confused: No offence…

http://www.artofillusion.org/screenshots