Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

11.02.2004, 11:21

Performance

Hi Leute,

ich möchte ein Outdoor RPG proggen, und stoße jetzt schon zum x-ten mal an die Grenzen meiner Hardware:

Ich will ein einfaches Dorf mit ein paar Häusern, Brunnen, u.s.w. inklusive Landscape rendern.

Wenn ich das jedoch mach ist mein PC komplett überfordert.

Hier die verwendeten Techniken:

Quadtree mit Frustum Culling für die Landscape sowohl auch für die Modelle, die in den Knoten des Quadtrees sitzen.
Die Modelle sind tbm - datein (Tribase) aus 3ds - dateien

Es ist sehr frustierend eine Grafik eines heutzutage herkömmlichen Spiels zu sehen, ohne einen kleinen ruckler. Da fragt man sich, wie schaffen die das bloß.

Was macht ihr beim Rendern von vielen Objekten inklusive Landschaft??

mfG
da_oAsch

2

11.02.2004, 12:16

Das erste Ziel ist es so viele Vertice wie nur möglich von deinem Terrain aus der Pipeline zu schmeissen. Bei so grossen Terrains ist glaub ich deine Technik nicht die beste. Das Occlusion Culling ist hier wesendlich besser geeignet. Des weiteren haben solche Terrain Engines immer ein LOD. Sprich weit entfernte Regionen werden nicht mehr so Detailert dargestellt. Das halbiert die Anzahl der Vertice dann noch mal, von denen die noch übrig sind.

Dann zu den Modellen. Diese haben natürlich auch ein LOD und werden mittels Culling aus der Pipeline geworfen. Oder halt auch nur Teilweise.

Teil drei, ist der schwerste. Optimierung und Assembler. Es wird schliesslich Monate damit verbracht die Algorithmen zu Optimieren, wenn es sein muss auch durch den eigenen Assembler Code zu ersetzen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

3

11.02.2004, 18:42

Ja und es gibt auch noch einen Algorythmus der sich Silhouette Clipping nennt er wurde von Hugues Hoppe erfunden. Dammit stellt man nur die wirklich sichtbaren Vertizes dar. Z.b:
Du siehst ein Model von Links. Das Silhouette Clipping bewirkt das nur die Linke Seite gerendert wird aber die rechte Seite nicht. D.h es werden nochmal die Hälfte aller Polygone rausgeschmiessen ;). So jetzt duerften wir solangsam an die Profi games ran kommen.

Releated Link:

http://research.microsoft.com/~hoppe/#silclip

4

12.02.2004, 12:20

Den Algorithmus werd ich mir mal später reinziehen ;D

Was man auch machen kann ist, zu prüfen ob man einen Sichtbares Dreieck auch wircklich sieht? Schliesslich haben die ja zwei Seiten. Selbst wenn ein Modell zu 100% im Sichtbereich ist, sieht man doch nur die Hälfte. Die Rückseite wir nämlich mit gerendert obwohl man sie nett sieht. Hier könnte man mit dem Normalvektor ansetzen. Hatte mir schon die ein oder andere Sache überlegt.
Aber vieleicht kommt ja jemand auf eine gute Lösung.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

5

12.02.2004, 14:15

gibts nicht ne freie engine, in der das alles implementiert ist?

Ich schlag mich nämlich von einem Artikel durch den nächsten, und was herauskommt istmir ein wenig zu großes durcheinander...

gibt es zumindest nicht irgendwo HowTos in denen zumindest ein pseudocode drinnen steht, sonst seh ich mich da gar nicht raus.


mfg
da_oAsch

6

12.02.2004, 15:40

Zitat von »"DragonMaster"«

Den Algorithmus werd ich mir mal später reinziehen ;D

Was man auch machen kann ist, zu prüfen ob man einen Sichtbares Dreieck auch wircklich sieht? Schliesslich haben die ja zwei Seiten. Selbst wenn ein Modell zu 100% im Sichtbereich ist, sieht man doch nur die Hälfte. Die Rückseite wir nämlich mit gerendert obwohl man sie nett sieht. Hier könnte man mit dem Normalvektor ansetzen. Hatte mir schon die ein oder andere Sache überlegt.
Aber vieleicht kommt ja jemand auf eine gute Lösung.


guck dir mal das renderstate D3DRS_CULLMODE an

cya, neonew
stay tight, project universe comes back!
### project earth <> 2004 ###

7

12.02.2004, 19:48

Hehe....ich kenne dieses Renderstate. Allerdings muss das Triangle ja in der Pipeline bleiben, damit die API prüfen kann ob es nun gerendert werden soll oder nicht.

Die Idee war ja es gar nicht erst bis dahin kommen zu lassen. Wollte den Algo in den Octree-Baum eines Modelles einbauen. Die BoundingBox hätte dann einen Normalenvektor, der ein Durchschnitt ist von den Normalenvektoren der Vertice. Zeigt der Normelnvektor der Boundingbox vom User weg, brauch ich diese Vertice gar nicht erst zur API schicken.
Das war die Idee dahinter. So würde man die hälfte einsparren. Allerdings hab ich es nie getestet und als ich es im Kopf dann mal durchgespielt habe gab es ein paar Schwierigkeiten.

Werd vieleicht irgendwann einmal den Algo Implementieren. Und schauen wie er sich macht :)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige