2 registered members (Martin_HH, TipmyPip),
1,279
guests, and 10
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Performance Probleme
#426716
07/27/13 20:12
07/27/13 20:12
|
Joined: Jul 2013
Posts: 49 Germany
Firewall
OP
Newbie
|
OP
Newbie
Joined: Jul 2013
Posts: 49
Germany
|
Hallo lieben Community,
ich habe ein paar kleine Fragen zur Performance von Anwendungen.
Ich programiere zur Zeit einen Klon von Minecraft (ich werde ihn nicht veröffentlichen, er dient nur zum Übungszweck). Meine Welt ist noch nicht unendlich, aktuell ist sie 25x25x10 groß und fast jedes Feld ist mit einem Block versehen.
Es gibt nur ein Block-Modell (cube.mdl), das per Code seinen Skin zugewiesen bekommt. Wenn ich nun das Spiel starte, habe ich ungefair 60 FPs. Auch mit Mobs wird es nicht viel weniger. Vergrößere ich nun die Welt, habe ich das Problem, das die FPS teilweise auf 3 - 5 fallen.
Ich wollte also fragen, ob mir vielleicht jemand ein Tutorial emphelne kann, wo nur bestimmte Chunks geladen werden und somit auch nur im aktiven Chunk, die Funktionen der Entitys laufen.
Und zum anderen, habe ich schon oft gehört, das viele Leute auf die Möglichkeit zurückgreifen, bei Blöcken, die aktuell nicht Sichtbare Seite auszublenden. Leider habe ich nichts passsendes Gefunden.
Und meine letzte Frage währe, ob es einen Ersatz zu c_trace gibt, das es schon einiges an Leistung zieht.
Lieben Gruß, Jordan
Have Fun
|
|
|
Re: Performance Probleme
[Re: Firewall]
#426722
07/27/13 23:01
07/27/13 23:01
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Um einen Minecraft Klon mehr oder weniger erfolgreich umsetzen zu können, musst du dich in Mesh Generation und Manipulation einarbeiten, sprich direkt mit Direct X arbeiten und "chunks" von bspw. 16x16x16 cubes zu einem einzigen Mesh (einer Entity) zusammenschmelzen, um die Anzahl an Drawcalls zu reduzieren. c_trace ist für Bewegungscodes inklusive Schwerkraft u.ä. dann komplett überflüssig, weil du bspw. einfach die Höhe eines Blockes unter der Figur über das Array an Blockinformationen bestimmen kannst.
Diese Meshgeneration ist aber nicht ganz einfach, falls du dich damit aber auseinandersetzen möchtest, kannst du ein Projekt aus einem Contest von vor ein paar Jahren zur Vorlage verwenden, welches genau so etwas tut, und ich glaube das war TBNICCUW (the best name I could come up with) oder so, wahrscheinlich von fogman.
"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual Check out my new game: Pogostuck: Rage With Your Friends
|
|
|
Re: Performance Probleme
[Re: Superku]
#426724
07/28/13 00:27
07/28/13 00:27
|
Joined: Jun 2009
Posts: 2,210 Bavaria, Germany
Kartoffel
Expert
|
Expert
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
|
Und zum anderen, habe ich schon oft gehört, das viele Leute auf die Möglichkeit zurückgreifen, bei Blöcken, die aktuell nicht Sichtbare Seite auszublenden. Leider habe ich nichts passsendes Gefunden. Das ist schon seit einiger zeit standart (wird über directx gemacht und ist auch in 3dgs aktiviert)
POTATO-MAN saves the day! - Random
|
|
|
Re: Performance Probleme
[Re: MasterQ32]
#426729
07/28/13 08:59
07/28/13 08:59
|
Joined: Jul 2013
Posts: 49 Germany
Firewall
OP
Newbie
|
OP
Newbie
Joined: Jul 2013
Posts: 49
Germany
|
Okay, danke Leute. Also ich werde mich dann mal mit Meshes und dergleichen beschäftigen. Ich werde mir auch mal dein Framework anschauen @MasterQ32. Ich habe das jetzt so verstanden, dass man einen Chunk (z.B. 6x6x6) zu einer einzigen Entity zusammenschmelzen muss. Der Inhalt des Chunks wird in Voxeln gemacht und wenn man einen Block abbauen möchte, muss man den Mesh manipulieren. Habe ich das so richtig verstanden? ![laugh laugh](/ubb7/images/graemlins/default_dark/laugh.gif)
Have Fun
|
|
|
Re: Performance Probleme
[Re: Firewall]
#426731
07/28/13 09:49
07/28/13 09:49
|
Joined: Jun 2009
Posts: 2,210 Bavaria, Germany
Kartoffel
Expert
|
Expert
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
|
es wird wahrscheinlich leichter sein, den mesh nach dem ändern eines blocks neu zu erstellen aber vom prinzip ist das richtig
ich würde aber größere chunks verwenden (16³, wie minecraft oder 16*16*[maphöhe] um nochmehr drawcalls zu sparen.)
In dem 2. fall wird man aber evtl. an das polylimit stoßen (afaik: max. 65535 weil ein unsigned short für die buffer-größe verwendet wird) man kann auch größere buffer verwenden, aber ob das mit 3dgs ohne weiteres geht, bezweifle ich...
Edit: achso, natürlich musst du auch beim meshen eines chunks alle nicht sichtbaren blockseiten ignorieren (also die, die IN blöcken sind), weil man sonst locker über 15m polygone kommt wobei extremst viel garnicht gebraucht wird.
Last edited by Kartoffel; 07/28/13 09:59.
POTATO-MAN saves the day! - Random
|
|
|
|