[Projekt] Universe (Spiel)

2 Pro Draw-Call? Das ist mies :ugly:
Ist deine Welt eigentlich komplett statisch? Wenn ja wäre eine Displaylist die optimale Lösung, sehr leicht anzulegen und bringt viel performancen!
Ich weiss ja leider nicht wie das mit dem Grafikpart bei SFML arbeitet aber die Displaylist sollte denke ich mal trotzdem funktionieren.

z.B. so hier
Code:
//Globale Variable
GLuint RenderDList;

//Function einmal bei Initialisierung laden
RenderDList = glGenLists(1);
glNewList(RenderDList, GL_COMPILE);
{
      RenderMap(); //Map Rendering
}
glEndList();

//In der DrawFunction nur noch die Displaylist aufrufen
glCallList(RenderDList);

Naja wie auch immer :ugly:
Bei 100.000 Polys schaffe ich eig. ohne Probleme ca. 1000 Frames, allerdings habe ich letztens einen Performancekiller entdeckt. Meine Vertex Arrays sind alle etwas "dumm" aufgebaut, wodurch ich verhältnismäßig oft neue Texture-Binding durchführen muss und das kostet Leistung. Ohne diese ständigen Bindings geht die Performance um das fast doppelte nach oben^^
Aber ich schweife irgendwie schon wieder ab! Die statischen Objekte solltest du wirklich mal in einer Displaylist probieren, kann schon was bewirken.
Bei Dynamischen Sachen empfehlen sich ja eher VBO's aber die lassen sich hier wohl nicht in paar Zeilen erklären - aber eig. kennst du dich ja auch ganz gut aus :D
 
Joa ein paar Dinge sind statisch, wie z.B. die Nebel und die AtseroidenGürtel um manche Sterne. In der neuen SFML Version steht auch irgendwo was von statischen Buffern, vermutlich wird das sowas sein. Ich schaue einfach mal, was ich dann alles habe, wenn die neue Version da ist, und wenn es mir nicht genügt, dann kann ich immer noch selbst Hand anlegen. Wobei die Performance im Moment ja eigentlich völlig ausreicht (~900 FPS bei mir), aber ich find das Design is kacke und dann sind da ja noch die Grafik-Bugs mit AMD Karten, die dann hoffentlich weggehen.
Bei den Textur-Bindings lohnt es sich z.B. Partikel und andere kleinere Bilder zusammen in eine Textur zu packen. Dann muss nur noch der Bereich ausgewählt werden, der gerendert werden soll, aber es ist kein neues Texur-Binding nötig.

Lg
 
Kannst du mir mehr dazu sagen von diesem bestimmten Bereich einer Textur auswählen?
Ich kenn das zwar aber weiss nicht wirklich wie ich das mache :schief:
 
Da muss ich mal schnell in den Source der SFML schauen. Die Funktion heißt dort sf::Sprite::SetSubRect(...Rect...).

Edit: Also wenn ich mir das so anschaue, musst du einfach nur die Textur-Koordinaten verändern^^
Wenn du also z.B. ein Sprite hast mit den Koordinaten 0|0 und Höhe sowie Breite sind 100 und du willst den Ausschnitt von 50|50 bis 100|100 deiner Textur auf diesen Sprite haben, dann kannst du daraus ja ganz einfach die Tex-Coords berechnen.
 
Zuletzt bearbeitet:
Hm, ich nutze nur leider SFML nur für Network und Audio... die Frage ist wie geht das beim normalen OpenGL ^^ Da hab ich leider noch nix zu gefunden
 
So, hab jetzt mal das Menü überarbeitet, hier sind 2 Screens:

Screen - 24.4109.jpg Screen - 7.29972.jpg

Das Hintergrundbild ist aus ner Spielerei in Cinema 4D entstanden.

Außerdem bin ich gerade dabei FXAA (das Post-Processing AA, das auch von BF3 genutzt wird) einzubauen. Ich bin mir aber noch nicht ganz sicher, ob das klappt, denn ich musste ein paar Dinge verändern.
Danach mach ich den Fog-of-War fertig und vllt. heute noch ne Minimap :)

Lg
 
N1111111111CCCEEEEE!!!!
Nimmt ja richtig Form an :)

Die Buttons/Fenster/Fonts haste auch selber gemacht ?!?! (ich meine das schonma weiter vorne gelesen zu haben ... glaub ich ^^)
 
Gute Nachrichten :D
FXAA funktioniert jetzt einigermaßen :)

Hier ein Test-Vergleichsbild:

FXAA.png

Man kann die Glättung schön erkennen, allerdings sind noch ein paar Fehler im Shader (markierte Stellen im Bild), die ich aber vorerst nicht loswerde.
Und warum nicht? Dank der SFML natürlich, da sie nur Pixel- und keine Vertexshader bereitstellt, die ich jetzt benötigt hätte.
Naja auch egal, es bringt jedenfalls eine deutliche Glättung ins Bild, wobei ich zwar sowieso kaum Probleme mit Aliasing habe, aber es schadet ja nicht FXAA trotzdem an Bord zu haben :D
Die Performance ist auch ok (siehe Bild für Genaueres).

Ich würde jetzt am liebsten mit dem Light Shader weiter machen, da gibts auch noch einiges zu Verbessern (wenn es so läuft, wie ich mir das jetzt vorstelle, wird das später richtig gut aussehen :)). Aber ich mache jetzt lieber erst mal mit dem Spiel selbst und nicht mit der Grafik weiter, sonst verliere ich mich wieder in Details und Grafikeffekten :D


@fadade

Buttons, Fenster, allgemein all die GUI ist von mir. Nur die Schriftart ist nicht von mir (siehe Credits).

Lg

Edit: @AMD: Schreib mir mal ne PM, wenn du den Shader-Code für FXAA haben willst. Und da du ja Vertex-Shader hast, wird das gut bei dir funktionieren :)
 
Zuletzt bearbeitet:
Danke für das Angebot aber ich nutze bei mir MSAA statt FXAA. Aber wie der Code aussieht wäre natürlich trotzdem mal interessant :ugly:
MSAA: MSAA.jpg - vielleicht sollte man MSAA und FXAA mal kombinieren - vielleicht schauts ja gut aus und Battlefield 3 macht das ja glaube ich auch?!

Edit// Ich hätte gedacht FXAA arbeitet mit Fragmentshadern statt Vertexshadern oO So ein FXAA könnte ja über die komplette Szene per FS angewendet werden.
 
Battlefield kombiniert beides (ich übrigens auch, MSAA ist ja schnell aktiviert). Dabei kostet das FXAA aber wesentlich weniger Leistung. FXAA läuft auch fast nur über Fragment Shader, aber da gibts halt was kleines, was in den Vertex Shader muss.

Lg
 
So, Fog of War ist jetzt endlich integriert.
Hier ein Screen mit FXAA und FOW @high mit 8 Blur Samples. Bei Medium sind es dann 4 Samples und bei Low nur noch 2.

Screen - 97.0751.jpg

Lg
 
Wie speicherst du eigentlich, wo nun noch Nebel ist und wo nicht?
Oder direkt als Liste der koordinaten wo man z.B. schon war und dann berechnet sich die "Nebelregion" wieder mit dem definierten Abstand...
Oder als Textur? :D
 
Als Textur. Und dann berechne ich mit einem seht einfachen Pixel-Shader alle 0.1s alle neuen freien Stellen und mache die Textur dort transparent. Dann muss ich sie nur noch über die fertige Szene rendern und fertig :)
Bei unendlich großen Maps hätte das ganze durchaus zum Problem werden können, da ich ja endlos viele Texturen hätte speichern können müssen, allerdings ist da bereits nach einigen 4k-Texturen Schluss.

Lg
 
leider kann ich bei urem fachwissen nicht mit halten. aber sieht trotzdem klasse aus! :daumen:
nur ne kleine anmerkung für den fog-of-war (kann man warscheinlich relativ einfach umsetzen)
->könnte man dort ne art kantenglättung reinbringen, welche auf bsp. 50 pixel ne stufenweise transparez erzeugt. damit das nicht so abgehackt wirkt
 
@ Nutskul: Das habe ich eben eingebaut. Allerdings verträgt sich das nicht so gut mit der Unschärfe, die ich zur Glättung nutze, deswegen musste ich einen Mittelweg nehmen. Sieht aber ganz ok aus finde ich :)

Lg
 
Als Textur. Und dann berechne ich mit einem seht einfachen Pixel-Shader alle 0.1s alle neuen freien Stellen und mache die Textur dort transparent. Dann muss ich sie nur noch über die fertige Szene rendern und fertig :)
Bei unendlich großen Maps hätte das ganze durchaus zum Problem werden können, da ich ja endlos viele Texturen hätte speichern können müssen, allerdings ist da bereits nach einigen 4k-Texturen Schluss.

Lg

Wäre es bei großen Maps (oder vielleicht auch allgemein ^^) nicht klüger das ganze irgendwie als Liste von Koordinaten zu speichern, die alle als erforscht gelten und dann der Nebel nur noch in den Bereichen (pixelgenau oder so als kleinere fest definierte Teilbereiche) auftaucht, die einen Bestimmen Abstand (halt sichtabstand) zu diesen Punkten haben?
Oder genau andersrum ...

DIe Berechnungen könnten dann ja auch wieder auf den Bereich beschränkt werden, wo der Sieler grad ist, sonst wird das ja ne Sissifussarbeit :ugly:
 
Zurück