Utilizator:
Parola:
Am uitat parola... | Cont nou!


Articole Resurse Echipe Competiții Proiecte Forum DevBlogs Locuri de muncă GDROMag Issue#1 GDROCon 2007

 
Forum » Programare » Motoare 3D româneşti » Dezvoltare Motor :)




Pagina 6 din 6 [ 2 | 3 | 4 | 5 | 6 ]

Mesaj Info autor
    Postat la 26 Oct 2010 11:09:23    Subiect: < fara subiect >
Dark info:

Dark:

Sigur o sa ai mai multe formate, deci nu poti seta vertex declaration-ul o singura data per frame. De exemplu o sa ai un format pentru obiecte statice, si altul pentru alea skinate, pentru ca in alea skinate iti trebuie indecsii oaselor pentru fiecare vertex, si weight-urile lor. De asemenea, terenul va avea alt vertex format decit un mesh static oarecare, ca n-ai nevoie sa tii coordonatele ca floati si probabil n-ai nevoie de UV-uri. Pentru fiecare mesh trebuie sa tii vertex declaration-ul corespunzator, si sa-l setezi inainte sa dai draw.

Unele engine-uri care stiu exact ce vor au citeva vertex declaration-uri predefinite. Altele care doresc mai multa flexibilitate au un mod prin care poti specifica structura odata cu mesh-ul in fisier, dar acolo trebuie sa ai un mod de a recunoaste declaration-urile comune, ca sa nu faci CreateVertexDeclaration() de atitea ori de cite faci CreateVertexBuffer(), ca nu-i frumos.

Pe unele platforme exista diverse restrictii la folosit acelasi shader cu doua declaration-uri diferite, dar astea-s deja chestii avansate. De exemplu e o practica comuna sa randezi toate mesh-urile cu acelasi shader pentru shadow map, chiar daca au vertex declaration-uri diferite, dar pe xbox 360 asta face driver-ul sa recompileze shaderul de fiecare data cind il vede cu alt vertex declaration, pentru ca maparile alea dintre VD si registri se intimpla cu fetch-uri explicite. In cazul ala, trebuie sa compilezi tu explicit shader-ul pentru fiecare VD cu care va fi folosit, ceea ce poate fi neplacut. Pe PC nu exista problema asta.

PS: pasul 4 nu e "prezint scena", e DrawIndexedPrimitive(). Present() se apeleaza o singura data la sfirsitul frame-ului, pentru a schimba frontbufferul si backbufferul intre ele. Restul pasilor se fac pentru fiecare mesh pe care vrei sa-l pictezi.

Ultima editare efectuată de Dark pe 26 Oct 2010 11:10:21; 1 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 26 Oct 2010 13:01:10    Subiect: < fara subiect >
meeshoo info:

meeshoo:

Merci pentru explicatii, asta era cea mai mare necunoscuta a mea deocamdata, si anume daca e ok sa am formate pentru vertecsi flexibile, in functie de ce are nevoie fiecare mesha, pentru ca ma gandeam ca sa tot schimbi formatul asta e un performance hit, plus ca e mai complicat de implementat un pic, dar cred ca o sa merg pe ideea asta.

Apropo, am tot citit despre conceptul asta de grupare a draw call-urilor pe diverse criterii, si sunt destul de confuz in privinta asta pentru ca sunt foarte multe astfel de criterii. Am inteles ca se pot grupa dupa graphic states, dupa vertex format, dupa ce shaderi folosesc, dupa ce texturi folosesc, dupa ce vertecsi folosesc, etc. Apoi toate astea trebuie sortate (ex: back to front, front to back in functie de transparenta, etc). Exista vreo regula generala aici, sau se testeaza pana se gaseste formula magica care merge pentru engine-ul respectiv?



Status:
Înregistrat pe:
15 May 2007 10:52:43
Vârsta: 29 ani
Mesaje: 390
Locatie: Cluj-Napoca
Programator
Jungle Troll Entertainment
 

Pagina 6 din 6 [ 2 | 3 | 4 | 5 | 6 ]


Server time: 06:25:51 22.05.2012



[ Termeni si conditii | Contact | F.A.Q. | Funny Pictures ]

© 2006 - 2012 Copyright 7thFACTOR Entertainment - All rights reserved