|
|
Imaginea zilei:
» Planete texturate procedural in Timp Real
Postat de Dark_Guy pe 19 Sep 2007 22:49:30 | Galeria "Imaginea Zilei"
Un proiect facut in anul 4 la facultate. Textura se generează pe worker-threaduri in background. Un mecanism de cache si management pe disk face lucrurile mai rapide. Texturile sunt generate cu Perlin noise, proiectul e facut in C#. La inceput programul are e sub 1 megabyte, dar dupa 10 minute de joc cacheul se umpla pana in jur de 25-50 Mb. (Texturi procedurale) In viitor vreau sa implementez un terrain-engine care sa se folosească tot de metodele procedurale. Universul astfel generat este mult mai mare decat se poate distribui pe medii clasice: ar fi interesant un joc MMORPG care sa aibă planete generate procedural. Video despre engine in timp real: http://www.youtube.com/watch?v=txJpmlDO3PY (slowdownurile sunt din cauza capturii video) Demo: http://www.ethos.no/.robert/files/demo.zip
Comentarii pentru aceste imagini:
Pagina 2 din 2
[
1
|
2
]
| Mesaj |
Info autor |
Postat la 20 Sep 2007 20:37:02 Subiect: < fara subiect >
|
|
|
Dark_Guy info:
|
Dark_Guy:
Idea este sa NU generezi nimic permanent, fiindcă universul descris de o metoda procedurala practic "nu are sfirsit". Ai nevoie doar de împrejurarea playerului. Din cauza asta generezi ceea ce poate el sa vadă pin jurul lui. Daca el ar ieşi din mediul acesta(călătoreşte mai departe in lume), ştergi din cache ceea ce devine "indepartat" si ii creezi împrejurimea in care se afla acum. Acest lucru se aplica si in cazul in care te apropii de o planeta anume, si te duci pe suprafaţa ei: ştergi cachul de univers, si ii dai drumul sa generezi planeta curenta in detaliu mult mai mare. Cu cat dai mai aproape de planeta, cu atât cacheul se rezuma la secţiunea aia mica care se vede dar cu detaliu tot mai mare. E interesant metoda procedurala: descrierea universului cu aceste metode e foarte uşoară, trebuie doar sa foloseşti datele pentru a genera ce vrei tu(partea mai grea). (ai o variaţie de date de fapt) (Musgrave unul din inventatorii metodei l-a descris aşa: ai o fereastra către un univers paralel descris de aceea funcţie matematica  )
|
Status:
Înregistrat pe: 19 Sep 2007 22:36:12
Vârsta: 27 ani
Mesaje: 35
Locatie: Cluj - Napoca
Programator
|
| |
Postat la 21 Sep 2007 11:46:14 Subiect: Re:
|
|
|
Dark info:
|
Dark:
Dark_Guy a scris: E interesant metoda procedurala: descrierea universului cu aceste metode e foarte uşoară, trebuie doar sa foloseşti datele pentru a genera ce vrei tu(partea mai grea). Conform principiului evident care afirma ca "nu poti descrie ceva fara a-l descrie", cantitatea de biti necesara pentru a defini "ce vrei tu" creste odata cu nivelul de control pe care-l doresti. Daca doresti sa atingi nivelul de control pe care-l ai in metodele ne-procedurale, trebuie sa stochezi tot atitea date cit stocheaza si ele (nu "tot atitea" in sensul strict, ci in sensul asimptotic). Altfel s-ar supara pe tine o multime de legi ale termodinamicii si conservarii energiei si Universul ar exploda. O descriere procedurala a unui obiect/fenomen/etc. e pur si simplu o codare lossy. JPEG-urile si MP3-urile devin mai mari cind vrei mai multa fidelitate, acelasi lucru se intimpla si cu terenul procedural. In general, metodele procedurale sint bune in doua cazuri: demo-uri de 64k si jocuri in care continutul ala procedural nu afecteaza gameplay-ul. Daca afecteaza gameplay-ul, designerii vor dori, pe buna dreptate, control. Mai mult, in unele cazuri artistii vor dori si ei control, ca ceva generat arata exact cum ii spune numele: generat. Atunci cind ai jocuri cu teren mare (de exemplu) este o practica destul de comuna sa pornesti de la ceva generat (cu World Machine, Terragen, Vue sau alte minunatii), dar dupa aia sa vina niste artisti si niste designeri care sa-l faca frumos si functional. Si prin AI exista diverse chestii care pot fi considerate comportament procedural: retele neuronale, reinforced learning si asa mai departe. Oare de ce nu le vedem in jocuri? Pai simplu, deoarece nu se pot controla. Daca un designer vrea sa faca un encounter unde AI-ul tinde sa se bage dupa cutii, sa vad cum ii explici asta maretului AI de FPS facut cu reinforced learning. Multe weight-uri, blend-uri si alte smecherii si descoperim ca de fapt puteam face acelasi lucru mult mai simplu cu niste scripturi, fara un element greu controlabil in mijloc. Da, exista dungeon-uri random in Diablo, planete random in Elite si harti generate random in Worms. Asta creeaza replay, dar e cheap replay. Nici una din hartile random din Worms nu se compara cu hartile facute manual (mai ales la astea 3D), nici ca gameplay, nici ca impresie artistica. Da, exista joculete indie care pot profita de content procedural, pentru ca n-au resurse pentru a-l face altfel; unii gasesc si moduri mai mult sau mai putin inteligente de a scoate proceduralismul in fata ca pe un "quirk". Da, Spore are planete procedurale ca eye candy. Totusi, de la asta si pina la a decreta ca-i absurd ca WoW sa aiba 1 GB e cale lunga, si numai cei speciali, ne-unguri, cu o incomensurabila experienta in domeniul dezvoltarii jocurilor si cu un Editor ajuns joc anulat se pot avinta in asemenea afirmatii. Dark and Light se laudau si ei cu 40,000 de kilometri patrati de teren procedural. Asa, si? Care-i scopul? Cu ce umpli 40,000 de kilometri patrati ca gameplay? Cu encounter-uri generate random? Problema cu camp-urile random e ca odata ce ai vazut unul, le-ai vazut pe toate. D-aia ziceam de cheap replay, pentru ca de fapt nu contribuie mai nimic la experienta jucatorului. Nu ma intelege gresit, nu vreau sa dau cu noroi in ce-ai facut tu, dar am dorit sa-mi exprim parerea vis-a-vis de jocurile bazate pe elemente procedurale.  LE: daca pentru o planeta sta 30 de secunde sa genereze content-ul si ocupa 7 MB pe disc, pentru 1000 de planete o sa stea 8 ore si va ocupa 7 GB pe disc. Asta in conditiile in care designer control e 0. De cind cu broadband, mai toata lumea poate trage vreo 1.5 GB pe ora, deci mai repede downloadezi jocul cu content-ul pre-generat decit sa-l generezi pe calculatorul jucatorului. Asta mai mult ca dedicatie pentru pin46 si ideile lui despre dimensiunea demo-urilor de azi.
Ultima editare efectuată de Dark pe 21 Sep 2007 12:01:59; 3 editări în total
"Am crezut ca esti ceva mai avansat" - Nekitu, 2008 A.D. Autobaza
|
Status:
Înregistrat pe: 12 May 2007 20:12:30
Vârsta: ? ani
Mesaje: 740
Locatie:
Programator
|
| |
Postat la 21 Sep 2007 12:36:05 Subiect: < fara subiect >
|
|
|
Dark_Guy info:
|
Dark_Guy:
Ma bucur ca ai postat: îmi oferă posibilitatea de a-mi exprima părerea mea mai detaliat  Toată povestea de procedural vs. static/pre-made are rădăcinile in întrebarea "Ce preferam: ceva real sau ceva sintetizat". Cu "real" e mare bandwithul necesar pentru a reda informaţia stocată + timpul prin care se pre-creaza fiecare element de touch-ul uman. Cu procedural creste necesitatea de procesare cu care sintetizezi lucrurile. Prin a sintetiza ceva e clar ca nu va fi corect nici fizic, nici biologic, nici chimic, nici artistic, etc. Prin sintetizare scoţi un efect care te face sa recunoşti instant ce anume acel "ceva" doreşte a fi, dar mult mai sigur vei observa cum se comporta cu restul elementelor sintetizate, adică ireal. Exemplu: sintetizatoarele (clapele in muzica) folosesc 3 elemente pentru a genera sunetul de baza. (Oscilator de sine, square si triangle) Din astea 3 cu câteva elemente in plus (timing etc.) un device simplu poate genera multe milioane de scaleuri de sunete diferite care se pot recunoaste: orga/pian/harpa etc. Cam acelaşi lucru se întâmplă si la grafica. Majoritatea jocurilor pornesc de la un element procedural. (terragen etc.) Ok: implementează terragen in real-time, si suprapune o serie de acţiuni ale designerului reface forma in timpul jocului. E un hibrid, dar tot ai scăpat de un giga  (la un mmorpg ai putea trimite aceste modificări in câteva Kb fără sa întrerupi jocul cu un patch nou) (pentru mine nu acesta ar fi cel mai mare "tel" a metodei) Dar ce ar fi, daca după un timp se găseşte o metoda cu care elementul procedural sa devină baza jocului. Faptul sa fii nevoit sa descoperi. Sa ai administratorii jocului pierduţi in joc la fel ca toată lumea. Sa fii chiar "liber". Sigur, pentru acest lucru trebuie sa fie perfecta iluzia, si la lucrul acesta mai trebuie lucrat. Daca cunoşti programul Mojoworld, care este pet-projectul lui "Doc Mojo Musgrave" vezi cam cate lumi bine definite exista doar la câteva ore de clickuit. (de fapt pentru a asambla si interconecta procedurile de generare) O lume neexlplorata aşteaptă sa fie colonizat. Nu mai ii zici tu ca gamedesigner sa se aşeze in locul potrivit. Va trebui sa-l aleagă jucătorul. Cu elementele procedurale de fapt defineşti sintetizarea unei lumi. Descrii cum se plasează elementele diferite . Dupa ce ai definit cum se creează o lume noua, introduci o funcţie care sa iţi ofere variaţie. Fiecare sub-element va fi generat tot după un element de variaţie si aşa mai departe. Cand termini, la fiecare trunchi de proceduri pasezi SEED-ul original, care poate sa fie un singur număr (de exemplu la Infinity coodinatele planetei) după care regenerezi planeta. (si va arata la unic pentru fiecare SEED original fiindcă foloseşti numere pseudo-random) Controlul asupra unui univers atât de vast va fi challengul gamedesignerului, si va consta in "cum defineşti lumea": adică cum se leg funcţiile de generare unul de celălalt. LE: daca pentru o planeta sta 30 de secunde sa genereze content-ul si ocupa 7 MB pe disc, pentru 1000 de planete o sa stea 8 ore si va ocupa 7 GB pe disc.
Alta tema: am descris într-un post anterior. Cacheul are o limita.(ex. 1 Gb) In cache trebuie sa intre DOAR împrejurarea jucătorului pe care îl vede. Metoda procedurala va lucra tot timpul cu prioritatea redusa. in data ce un element devine "obsolete" ea va fi eliminată si una noua va fi pusă in locul ei. (calculata prin probabilitatea de necesitate al unui element) Dupa crearea cacheului iniţial, se stabileşte necesitatea elementelor noi (una iese, următoarea intra) Cat te joci, are timp calculatorul sa-si facă treaba  Daca joci 8 ore, 8 ore generează de ce tu ai nevoie. (si acele 30 de secunde sunt in jur de 6 la o metoda mai optimizata ca a mea)
Ultima editare efectuată de Dark_Guy pe 21 Sep 2007 12:38:41; 1 editări în total
|
Status:
Înregistrat pe: 19 Sep 2007 22:36:12
Vârsta: 27 ani
Mesaje: 35
Locatie: Cluj - Napoca
Programator
|
| |
Postat la 21 Sep 2007 14:33:16 Subiect: < fara subiect >
|
|
|
pin46 info:
[banned]
|
pin46:
Aici nu e vorba de genera totul procedural si de a da un sut in fund la artisti si level designeri (adica de a nu-i folosi). E o chestie de echilibru. Acum generarea graficii procedural nu este prea folosita in jocuri dar in viitor o sa fie folosita la greu. In primul rand trebuie sa te gandestii ca artistii costa si ca sa ai un artist pt fiecare frunza din joc nu e pre rentabil. In al doilea rand chiar daca angajezi toti artistii din lume pt jocul tau, detaliul tot o sa fie limitat pt ca artistii aia au o capacitate de munca limitata. Cu generare de grafica procedural poti merge cu detaliul mult mai departe.
Imagineaza-ti un nivel din WoW, locul unde sa afla copacii este hotarat de level designer. Totusi frunzele copacilor sunt generate procedural asa incat o sa fezi pe copaci diferiti frunze diferite nu aceasi textura de frunze repetata la nesfarsit pe toti copacii. Chiar si modelele pot fi generate procedural. De exemplu atunci cand face un caracter artistul specifica aspectele principale ale modelului: inaltime, tipul staturii (atletic, obez, etc) iar detalii cum ar fi parul, structura oaselor, etc sunt generate procedural (adica pe baza unei formule)
Data te gandesti tot ce vezi in viata reala este 'generat procedural'. Plantele isi au forma si culoarea be baza ADN'ului care nu este altceva decat o 'formula', trandafirii si rozele au probabil 99% din ADN identic diferenta de 1% din formula genereaza aspect diferit, daca schmbi formula si mai mult ai un copac, etc.
Concluzia e ca generarea procedurala este o metoda folositoare in jocuri atunci cand este imbinata cu 'lucruri facute cu mana'
Ultima editare efectuată de pin46 pe 21 Sep 2007 14:37:41; 3 editări în total
|
Status:
Înregistrat pe: 06 Aug 2007 23:02:05
Vârsta: ? ani
Mesaje: 683
Locatie: Moldova
PR & Marketing
|
| |
Postat la 21 Sep 2007 15:55:00 Subiect: < fara subiect >
|
|
|
nekitu info:
|
nekitu:
proceduralul se poate folosi in anumite tipuri de jocuri, ca de ex. asta cu space, insa intr-adevar cu ce umpli ca sa para hand-made ? hai ca la natural stuff merge, dar chestii artificiale cladiri si alte alea?... si eu inclin spre nivele compacte, facute de mana artistului, regizate cu cutscene-uri precum un film, nu avem nevoie intr-un joc de real world size, we need story si funplay.
SpoOoOoock! Life Is Too Short For Cheap Chocolate
|
|
| |
Postat la 21 Sep 2007 16:12:56 Subiect: Re:
|
|
|
pin46 info:
[banned]
|
pin46:
Si la cladiri ai nevoie de procedural. Inchipuie'ti ca vrei sa simulezi un oras cu mii/zecii de mii de blocuri si vrei sa nu fie bloc unul ca celalalt. Poti casi o formula sa generezi texturi de beton sau piatra asa cum poti gasi o formula sa generezi teren artificial. Pui factori ca vant, ploaie, soare, calitatea betonuliu, felul nisipului folosit in beton, numarul de pantof de la secretara sefului, etc in formula pt calcularea texturii de beton de pe bloc. Pe diferite parti ale orasului texturile o sa arate diferit. De exeplu partile blocurilor expuse la soare, vant, ploaie o mai uzate/intunecate. Daca calitatea tencuielii pe unele blocuri a fost mai proasta o sa fie crapaturi, jupuieli, etc. Daca a fost inundatie la baza blocurilor din zonele mai joase o sa fie urme tencuiala cazuta, etc si eu inclin spre nivele compacte Procedural nu inseamna dimensiuni mari ci detaliu. Poti avea nivele foarte mici dar cu detaliu foarte mare la obiecte, cum ziceam, fecare frunza diferita, fiecare mar, stalp, piatra e unica.
Ultima editare efectuată de pin46 pe 21 Sep 2007 16:19:00; 4 editări în total
|
Status:
Înregistrat pe: 06 Aug 2007 23:02:05
Vârsta: ? ani
Mesaje: 683
Locatie: Moldova
PR & Marketing
|
| |
Postat la 21 Sep 2007 16:49:17 Subiect: < fara subiect >
|
|
|
nekitu info:
|
nekitu:
bine, am inteles, adicalea pot avea o padure imensa, si un castel in mijlocul ei, aia e ok, dar actiunea e la castel  oricum, proceduralul se poate amesteca cu artist hand made, insa depinde f mult de joc.
Ultima editare efectuată de nekitu pe 21 Sep 2007 16:49:51; 1 editări în total
SpoOoOoock! Life Is Too Short For Cheap Chocolate
|
|
| |
Postat la 21 Sep 2007 17:33:45 Subiect: < fara subiect >
|
|
|
Dark info:
|
Dark:
Stiu ca tot ce e in viata reala e "generat procedural". Mai stiu si ca nu e fun. Designer-made content > player-made content > random generated stuff. Ce-ti place mai mult, un film facut de un regizor bun, cu un scenariu bun, sau o seara de improvizatie la teatru? In plus, aia care improvizeaza la teatru acolo sint mult, mult mai destepti decit vor fi vreodata niste formule. Daca intr-un MMO dai o lume goala (aka generata procedural) si te astepti s-o umple playerii, ai iar o seara de improvizatie la teatru, dar cu amatori alesi la intimplare din statia de autobuz. Eu nu dau multe sanse de reusita unui asemenea "gameplay". Stati sa vina Spore cu al sau player-generated content (daca mai vine), sa vedem de cite ori poate fi amuzanta o tiritoare cu 3 miini in loc de ochi (si oricum ala pare un joc cu un character customization mai misto, nu-i "open ended, do anything you like"). Sintem de acord ca controlul este "challenge-ul" designerului, dar cred ca intelegem lucruri diferite.  Am dat exemplul cu reinforced learning pentru ca ala are acelasi "challenge" si acolo s-a dovedit prea mare. Nimeni nu vrea sa se bata cu un excel cu 500 de weight-uri pentru fuzzy logic in el ca sa convinga un soldat sa se fereasca mai des. La fel, nu prea vad cine sta sa apese pe "new seed" pina cind ii da ceva care sa-i placa. Mai rau e ca uneori iti da ceva ce APROAPE iti place, dar nu poti sa pastrezi partile care ti-au placut si sa le regenerezi p-alea nasoale. New seed, completely new stuff. Nu cred ca in viitor se va folosi generarea procedurala la greu. Sau ma rog, nu in viitorul despre care ne putem da cu parerea, adica in urmatorii 5 ani. Si acum e toata lumea indragostita de SpeedTree, care genereaza pomi procedurali, dar nimeni nu face asta la runtime. De ce oare? La fel, nu cred ca e fezabil sa tii minte edit-urile unui artist peste ceva procedural ca sa regenerezi un teren la runtime dintr-un seed si un construction history. Un artist lucreaza sute de ore la o harta. Ce faci, tii minte toti clicii pe care i-a dat ala in tot timpul cit a lucrat? Mie nu mi se pare ca un joc cu content procedural are o parte de explorare mai interesanta decit unul cu content creat manual. Dimpotriva, o sa mergi pe-acolo si o sa tot descoperi random mountain #9293. Un artist sau un designer pot conferi semnificatie elementelor de pe harta, ca sa ai si sentimentul ca descoperi chestii care conteaza. Cind dai peste random planet #24393 mizezi ca imaginatia jucatorului va asocia ceva elementului astuia generat de o formula de 3 linii. Din pacate majoritatea jucatorilor nu sint izvoare nesecate de imaginatie debordanta, deci nu vad un viitor prea luminos pentru jocurile care merg prea departe in directia asta.
"Am crezut ca esti ceva mai avansat" - Nekitu, 2008 A.D. Autobaza
|
Status:
Înregistrat pe: 12 May 2007 20:12:30
Vârsta: ? ani
Mesaje: 740
Locatie:
Programator
|
| |
Postat la 21 Sep 2007 18:11:03 Subiect: Re:
|
|
|
pin46 info:
[banned]
|
pin46:
Dark a scris: Stiu ca tot ce e in viata reala e "generat procedural". Mai stiu si ca nu e fun. Designer-made content > player-made content > random generated stuff. Ce-ti place mai mult, un film facut de un regizor bun, cu un scenariu bun, sau o seara de improvizatie la teatru? In plus, aia care improvizeaza la teatru acolo sint mult, mult mai destepti decit vor fi vreodata niste formule. Asa cum am mentionat deja exista lucruri care pot fi generate procedural (tehnica) si altele care sa fie lasate pa mana level designerului/artistului. cum ziceam mai devreme generarea procedurala este o metoda folositoare in jocuri atunci cand este imbinata cu 'lucruri facute cu mana'
MMO-ul in spatiu 'infinit' este doar un caz particular de folosire a tehnicii, experienta (buna sau rea) cu un tip de joc nu trebuie extrapolata la o anumita technica folosita in acel joc. Anyways, asta este punctul meu de vedere. O sa ma abtin de a mai face alte comentarii in acest thread. Inca o data Dark_Guy ai facut o treaba excelenta
Ultima editare efectuată de pin46 pe 21 Sep 2007 19:01:18; 3 editări în total
|
Status:
Înregistrat pe: 06 Aug 2007 23:02:05
Vârsta: ? ani
Mesaje: 683
Locatie: Moldova
PR & Marketing
|
| |
Postat la 01 Jun 2008 16:34:21 Subiect: < fara subiect >
|
|
|
KosmynC64 info:
|
KosmynC64:
Frumos,imi place,daca chiar ai vrea sa faci uun joc cu texturi procedurale incearca sa folosesti formule care sa dea acelasi rezulatat de fiecare data sau daca folosesti acelasi random seed vei avea acelasi rezultat la rand.Deci faci un level editor care ia un numar aleator drept seed(TickCounterul()),daca iti place il salveaza,adica salveaza seed-ul.Cand il folosesti in joc vei primi aceeasi planeta,iar un nivel,planeta,teren sau alt ceva de la 3-4 Mb se reduce la 2-3 Biti. Cred ca astfel merge jocul SPORE,folosind doar seed-uri Scuze acum am citit posturile de dasupra mea si am vazut ca domnii spun acelasi lucru.
Ultima editare efectuată de KosmynC64 pe 01 Jun 2008 16:36:10; 1 editări în total
Daca folosesc ++i si nu i++ nu inseamna ca stiu prea mult C++
|
Status:
Înregistrat pe: 19 Apr 2008 22:03:16
Vârsta: 18 ani
Mesaje: 111
Locatie: Shikadi homeworld
Programator
|
| |
Pagina 2 din 2
[
1
|
2
]
|
|
|