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

Cranberry

Treue Seele

  • »Cranberry« ist der Autor dieses Themas

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

1

26.12.2013, 19:08

Sollte man Effects11 noch verwenden?

Ich bin gerade dabei ein Spiel mit DirectX 11 (Direct3D) zu schreiben.
Ich benutze Windows 8 und somit das neue Windows SDK für DirectX-Funktionalitäten.
Ich bin gerade an der Stelle wo ich mir überlege ob ich Shader selbst managen will oder Effects11 verwenden soll.
In einem meiner DX11 Bücher (Frank D. Luna) wird das Effects Framework verwendet, das bedeutet es zu lernen wäre kein Problem für mich.
Jedoch hat Microsoft Effects zusammen mit D3DX aus dem SDK gekickt. Dafür müsste es doch einen guten Grund geben.
Sollte ich also Effect11 verwenden oder gibt es einen besseren und performanteren Weg Shader zu managen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

26.12.2013, 21:21

Ich persönlich war nie Fan von Effekten, aber insbesondere heutzutage würde ich davon abraten. Effekte waren vielleicht vor 10 Jahren mal keine so schlechte Idee, aber die Struktur des Effekt Framework ist zumindest meiner Erfahrung nach viel zu starr und für moderne Anwendungen nichtmehr wirklich passend. Wann immer ich Effekte verwendet hab, selbst in D3D9 Zeiten schon, bin ich früher oder später an den Punkt gekommen, wo sie mir nurmehr im Weg waren...

Cranberry

Treue Seele

  • »Cranberry« ist der Autor dieses Themas

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

3

26.12.2013, 21:35

Ok dankesehr. Dann wähle ich mal den klassischen Shader Weg.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

26.12.2013, 22:07

@dot: Die Begründung finde ich ziemlich schwammig. Vor allem Frage ich mich, wobei das EffectFramework hindert. Besonders die shader Permutations sind doch mit den Techniken meiner Meinung nach eine ganz ordentliche Sache. Wie realisiert man sonst gut nach deiner Meinung Shader-Frameworks?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

26.12.2013, 22:41

Die Frage ist: Wofür brauch ich so ein "Shader Framework"? Engines haben (vermutlich vor allem aus Effizienzgründen) in der Regel sowieso einfach fix eingebaute Materialien, dafür brauch ich also kein Framework, weil ich einfach eine Reihe fertiger Shader hab, die ich verwenden kann. Und wenn ich selbst eine Engine schreib, will ich meine Constant Buffer etc. lieber selber managen. Wie genau lösen Effekt Techniques denn das Permutationsproblem? Wie genau hilft das Effekt Framework mir dabei, z.B. planares Wasser mit Reflection, Refraction, etc. umzusetzen? Oder einen Fullscreen Blur? Oder Shadow Mapping? Ja, ich kann meine Renderingpasses teilweise in einer anderen Sprache beschreiben. Aber nicht den ganzen Effekt. Und was auch immer ich in meinem Effekt File beschreibe, ist immer noch extrem eng an die konkrete Anwendung gebunden. Denn die muss wissen, welcher Pass jetzt genau was ist, in welcher Reihenfolge was ausgeführt werden muss, um den konkreten Effekt zu realisieren, was genau wann und wie in welche Rendertargets gehen soll und wo es dann wieder als Input reinkommt. Effekte lösen keines dieser Probleme. Das einzige, was ein Effekt File mir erlaubt, ist, einen Teil der Problemlösung in einer anderen Sprache zu schreiben. Und dazu brauch ich ein Interface zwischen Anwendung und Effekt, muss Anwendung und Effekt konsistent halten...Imo wird dadurch wirklich gar nichts einfacher, im Gegenteil. Zumindest meiner Erfahrung nach, wird alles viel komplizierter als nötig und entsprechend fehleranfälliger...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (26.12.2013, 22:51)


TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

6

27.12.2013, 01:25

Der Punkt mit den Constant Buffern ist auch bisher mein einziger großer Kritikpunkt, was sich aber vermutlich bei einfachen Anwendungen nicht bemerkbar machen wird denke ich. Bzgl. der Shaderpermutationen hilft mir das Erstellen der techniques, welche Uniform-Paramter besitzen. Das wird zwar bei sehr komplexten Shadern mit vielen Uniforms unübersichtlich, kann mir aber kaum vorstellen, dass die Shader ohne Effektframework besser bei wegkommen. Diese Permutationen sind auch ziemlich leicht selbst über einen kleinen Code-Generator rasch selbst implementiert, wenn die Shader einmal stehen und das Namensschema bekannt ist. Ansonsten hindert mich ja das Framework nicht daran, die Effekt in einer extra Klasse zu kapseln (was bei der Verwendung ohne das Effektframework ohnehin sinnvoll ist).
Ich habe mich auch gerade besonders mit dem Umgang mit Materials in einem 3D-Framework befasst und habe die Auffassung, dass für das Rendern eines Objektes mehrere Quellen für die Shader wichtig sind: Objektmatrizen, Materialinformationen (Farben, Texturen, etc.) und Lichtquellen im Einflussbereich. Das hat doch prinzipiell erstmal gar nichts mit dem Effektframework zu tun. Und bei mir spielt auch noch eine Rolle, dass ich seit DX9 nur damit gearbeitet habe, bequem halt.
Du zählst auch einige Punkte auf, die für mich ehrlich gesagt nahezu gar nichts mit der konkreten Technik der Shaderimplementierung und dessen Verbindung mit Constant Buffern zu tun haben: RenderTargets, passes, Reflection oder nicht, etc. Das Framework sollte ja hoffentlich so entworfen sein, dass es dem Aufrufer über die Schnittstellen klar ist, wie er den zu verwendenden Effekt "füttern" muss. Wenn er ein Objekt mit Diffuse-Specular Lighting und Normalmapping nutzen möchte, dann liefert mir das sein Material. Und das wertet meine Klasse aus, die den Shader kennt.Selbiges gilt für jegliche andere Techniken. Bisher funktioniert das sauber und ordentlich.
Ich finde es keinesfalls hinderlich sondern ziemlich bequem dieses Framework zu benutzen, ebend wegen der genannten zusätzlichen Sprachfeatures.
Ich denke auch, dass die Shaderimplementierungen in den konkreten Klassen, die sie benutzen, gut austauschbar sein sollten, um vllt für mobile oder OpenGL andere implementierungen liefern zu können, und da wären es ja wohl viel sauberer Interfaces für diese Klassen zu erstellen. Und tatsächlich hilft mir das nicht das Framework, aber ich finde die Idee mit techniques ziemlich ansprechend und logisch. Soweit wie ich das verstehe, müsste man ohne Effect11 selbst so etwas implementieren?

Werbeanzeige