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

13.10.2013, 19:07

[DirectX11] Multi-Shader System

Hallo liebe Community,

ich versuche mich nun schon seit einiger Zeit in der 3D-Programmierung. Angefangen habe ich vor ein paar Jahren mit Unity und kam später auf die Idee eine eigene Engine zu schreiben und damit ein bisschen rumzuprobieren. Nun hab ich fast alles durch (XNA, SlimDX,...) und bin nun beim guten alten C++ angekommen im Verbund mit Microsoft's DirectX 11. Für die Basics programmiere ich die Tutorials von http://www.rastertek.com/ nach und bin nun bei den Shadern. Dabei ist mir aufgefallen, dass der Autor immer nur die vorherigen Shader erweitert, was für das Erklären der Effekte zwar einfacher ist, aber leider keine kombinierbaren Shader zulässt. Ich habe daraufhin einige Stunden in Google verschwendet und bin bisher zu keiner brauchbaren Lösung gekommen. Es gab zwar die Alternative eine riesige Shader-Datei zu erzeugen und über Techniques die Effekte zu kombinieren, aber da in DX11 die Untersützung von Techniques und Passes in das Effects11-Framework ausgelagert wurde und nicht mehr offiziell dazu gehört, würde ich gerne davon absehen.

Nun möchte ich gerne verschiedene Shader-Klassen schreiben, wie z.B.: Color, Light, Texture, Toon usw., die man nach belieben nacheinander auf das Model legen kann. Dahinter steht ganz einfach der Gedanke keine großen vordeffinierten Shader zu schreiben, sondern kleine Effekt-Shader, die man beliebig übereinanderlegen kann, um verschiedene Effekte zu erzeugen.

Ich hatte zu diesem Thema auch die Idee, dass man bestimmt das Resultat eines Shaders auslesen und für den nächsten als Input verwenden kann. Leider habe ich dazu nichts gefunden (Ich meine aber, dass ich genau das vor langer Zeit bei XNA schon einmal getan habe).

Danke schon mal für die Hilfe :)

Ein Hinweis noch: Ich habe zwar schon lange Zeit mit dem Thema zu tun, unterstellt mir aber dennoch bitte keine großes Wissen in dem Gebiet. Ich bin immer noch dabei die Basics zu lernen :)

Mit freundlichen Grüßen,
Coldi

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

14.10.2013, 10:22

Er will wohl eher den Output eines Shaders als Input für den nächsten verwenden. Das geht aber nicht in einem Pass.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

14.10.2013, 11:04

Zunächst einmal: Danke für die Antworten :)

Ich habe währenddessen auch noch ein wenig recherchiert und habe aktuell folgende Idee: Etwas größere Shader für Objekte schreiben (Textur-Shader mit Bumb, Alpha, Farbe usw., Feuer-Shader, Wasser-Shader, Glass-Shader, Beleuchtungsshader), sodass möglichst nur 2 Shader pro Mesh benötigt werden: Ein Grund-Shader(Textur für alle Standard-Meshs, Wasser für Wasser-Meshs usw.) und der Belechtungsshader, welchen ich additiv draufblenden würde(Das klappt leider noch nicht^^). Und danach noch, wenn nötig, ein Post-Shader.

@Bambi: Ich habe mir das Tutorial bereits durchgelesen, in der Hoffnung, dass es mir weiter hilft. Jedoch geht es dabei nur um die simple Existenz von mehreren Shadern, nicht um das benutzen von mehreren für nur einen Mesh.

@BlueCobold: Das wäre meine Intension. Mit der additiven Methode müsste ich die Objekte ja zweimal/mehrmals zeichnen und ich schätze das geht etwas auf die Performance.

@dot: Hört sich fast so an, als wäre das die neue Alternative zu den Techniques. Kann das sein? Wenn ja, kennst du ein paar hilfreiche Tutorials? Ich kann keine finden, nur Hinweise auf die zwei Links.

Wie bereits gesagt: Danke vielmals. Vorerst schaue ich mal weiter nach Dynamic Shader Linking. Das könnte die Lösung sein.

Mit freundlichen Grüßen
Coldi

EDIT:

Im Sample-Ordner des SDK hab ich zwei Projekte gefunden. Leider fehlt mir gerade die Zeit jene anzuschauen. Bis zum Wochenende schaff ich das aber bestimmt^^

Werbeanzeige