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

11

13.04.2011, 14:14

Ich finde das Thema Multithreaded Rendering auch ziemlich interessant. Daher möchte ich mal auf das Beispiel "Multithreadedrendering11" aus dem Directx SDK von Juni 2010 hinweisen. Das ist glaube ich z.Zt. das aktuellste, mit DX11 Unterstützung. Man kann daran gut erkennen wie man mit Multithreading noch ein paar mehr Frames herauskitzeln kann. Die Compilierung als x64 Anwendung bringt auch noch mal was.

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

12

13.04.2011, 15:04

Damit das Ganze prinzipiell funktionieren kann, dürfen Deine RenderEntities nur Daten enthalten, die nicht geändert werden können.
Generell würde man dann eher am Anfang eines Frames diese RenderEntities generieren (oder bestehende aktualisieren) und dann
eine Liste mit den Instanzen an den MultithreadedRenderer geben. Der könnte dann die große Liste in einzelne Blöcke aufteilen
(einen für statische Gegenstände, einen für Objekte deren Material Alpha Blendung verwendet usw.). Du kannst nicht parallel
in einem anderen Thread (sagen wir mal einem Update Thread) diese RenderEntities ändern. Denn dann hättest Du einen undefinierten
Zustand. Denk mal, Dein RenderEntity hätte 3 Eigenschaften und während des Updates wird das erste geändert und dann rendert
ein andere Thread das Ding und danach werden erst die anderen beiden geändert. Das wäre ein inkonsistenter Zustand.
Wenn Du mehrere Threads zum Render nehmen willst, dann müssen diese jeweilig in ein separates RenderTarget rendern. Dann kannst
Du hinterher die zusammenfassen.

Das Ganze ist extremst aufwendig. Sehr schwer zu handhaben und erfordert meistens eine vollständiges Redesign seiner Engine.
Das Ergebnis ist dabei auch eher fragwürdig. Nimmst Du zum Beispiel einen ThreadPool aus Windows Vista, dann fängst Du dir
plötzlich ganz andere Probleme ein. Also solltest Du (wenn es Dir wirklich, wirklich ernst ist damit) auch das Threadmanagement und
Handling der Threads selber bauen.

13

13.04.2011, 15:22

Ich bin eigentlich genau auf der Suche :?: nach einem einfachen Projekt welches als Grundgerüst dafür dienen kann. Das Beispiel aus dem SDK finde ich da schon relativ komplex. Ich versuche nämlich gerade ein eigenes Gameprojekt aufzubauen und bin noch auf der Suche nach der richtigen Strategie. Ich möchte natürlich wenn möglich, die aktuellsten und performantesten Methoden dafür nutzen.

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

14

13.04.2011, 15:32

Vielleicht hilft Dir das ein bisschen: http://bitsquid.blogspot.com/2010/03/tas…al-example.html

15

13.04.2011, 16:00

Das hört sich schon ziemlich gut an, was die da machen. Allerdings ist das wohl ein kommerzielles Projekt. D.h. man muss eine Lizenz für die Benutzung der Engine erwerben ;( . Ich dachte da aber mehr an Open Source Projekte ^^ .

EDIT: Ja,ja... nur selber suchen macht schlauer!

http://software.intel.com/en-us/articles/nulstein/

Das könnte wohl etwas sein was ich im Auge hatte :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »farn« (13.04.2011, 18:04)


Werbeanzeige