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

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

29.08.2010, 11:29

Direct3D11 Tessellation

Hallo,
mein Direct3D11 renderer in meiner Engine kann schon einiges u.a. alle Shader Typen laden und verwalten. Daher wollte ich mich jetzt endlich mal an das wagen, was an Direct3D11 am interessantesten ist: Tessellation.
Zwei Beispiele sind dazu beim DirectX SDK June 2010 schon dabei, ich habe mich an das "DetailTessellation11" Beispiel gewagt.
Dazu habe ich folgendes demacht:
- Die Shader genommen und die #include-Direktiven aufgelöst, weil ich in meinem Renderer noch keine Include Hanlder habe (einfach die zu includierenden Dateien zusammen in eine Shader Datei kopiert).
- Die benötigten Texturen auf mein Objekt gelegt: ColorMap & NormalMap (Alpha Werte beinhlaten die HeightMap Informationen)
- Die ConstantBuffer "cbMain" und "cbMaterial" mit den wie im Beispiel aufgelisteten Daten füllen (für cbMain u.a. WorldMatrix, ViewMatrix etc.).

Natürlich wäre es nur zu schön gewesen, wenn gleich alles auf Anhieb richtig funktioniert hätte. Mein Programm kompiliert die Shader ohne Fehler aber sobald das Objekt mit diesen Shader (Vertex-, Hull- Domain- und Pixel Shader) gerendert werden soll, stürtzt das Programm ab und der VisualStudio 2008 Debugger meldet: "SoftPixelEngine.exe hat einen Haltepunkt ausgelöst".
Ich habe keine Ahnung warum?!? Meine Vermutung liegt darin, dass noch irgend welche resourcen nicht richtig übertragen werden. Bei der Fehlersuche ist mir auch aufgefallen, dass ich bisland nur "PSSetShaderResources" und "PSSetSamplers" aufgerufen hatte um die Texturen zu übertragen, da mir nicht klar war, dass das auch für alle anderen Shader gemacht werden kann/muss.

Ich werde natürlich weiterhin im DX SDK Beispeil weiter danach suchen, was in meiner Engine noch fehlt, dass das ausgelöst wird, aber wenn ihr mir helfen könnte bzw. erklären könnt, worauf man bei Tessellation bzw. im Umgang mit Hull- und Domain Shadern achten muss, wäre ich euch sehr verbunden.

Bis dann und schon mal Danke im Voraus,
Lukas

EDIT:
An den Werten der ConstantBuffer kann es nicht liegen. Es ist nämlich egal, ob sie oder ob sie nicht von mir konfiguriert werden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LukasBanana« (29.08.2010, 11:41)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

2

29.08.2010, 11:55

Ok ich hab das Problem für den Absturtz ebengerade gefunden 8o

C-/C++-Quelltext

1
2
3
4
5
// Wenn tessellation deaktiviert:
DeviceContext_->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

// Wenn tessellation aktiviert:
DeviceContext_->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST);

Dafür seh ich jetzt erst mal nur ein schwarzes Bild aber es geht schon mal voran ^^

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

29.08.2010, 16:12

Anscheinend müssen in DX11 die Matrizen transponiert sein - zumindest die Projektionsmatrix (vlt. liegt's auch nur an speziell diesem Shader).
Hat denn schon mal jemand was mit dem Tessellation Beispiel aus dem neusten DX SDK gemacht? Etwas Hilfe wäre mit sehr willkommen.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

4

30.08.2010, 10:27

Gestern Abend habe ich den ersten Tessellation Shader hinbekommen. Ich hab einen eigenen angefangen zu schreiben. Natürlich ist der noch nicht ganz fertig aber sobald es die ersten interessanten Screenshots gibt, poste ich die hier natürlich ^^

PS: Find's irgendwie schade, dass ich hier nur Selbstgespräch führe. Interessiert sich hier niemand für Tessellation oder hat damit noch keiner gearbeitet??

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

30.08.2010, 11:22

Wahrscheinlich weil keiner mit gearbeitet hat, ich schätze dass fast gar keiner mit Dx11 hantiert, meistens auf grund von hardware (wie das bei mir der fall ist).^^

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

6

30.08.2010, 11:54

Das kann ich natürlich verstehen. Ich kann im Moment auch nur im SoftwareModus DX11 programme entwickeln, weil meine Karte nur DX10 unterstützt.
Aber ich will möglichst einer der ersten sein, die eine 3D Engine mit DX11 support entwickeln - zumindest unter den OpenSource Engine :D
Die UNIGINE Heaven Benchmark Demo hat mich irgendwie fasziniert ^^
Wenn ich zum nächsten SPE Release ein Tessellation Tutorial rausbringe, steigt vielleicht endlich mal etwas die Interesse an meiner Engine.

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

7

30.08.2010, 12:10

Wie ist denn die Performance wenn Du für Tesselation den Software Modus nimmst? ^^ Da kann ich mir gut vorstellen, dass Software Raytracing schneller ist. ;)
Ansonsten, Respekt für den schnellen Fortschritt. :) Es ist gut möglich, dass dadurch das Interesse an Deiner Engine steigt. ^^

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

8

30.08.2010, 12:37

SoftwareModus ist natürlich nicht für die Entprodukte gedacht ^^
Ein einfacher Würfel mit Tessellation läuft bei mir im Moment zwischen 1 bis 0.2 (5 sek für ein Bild) FPS.
In der entgültigen Version baue ich dann das "FeatureLevel" ein. Sodass jeder der zwar DX11 installiert hat aber dessen GrafikKarte nur DX10 unterstützt wenigstens DX10 nutzen kann (also auch Shader Model 4).
Und jemand der eine DX10 fähige GrafikKarte hat und mindestens Windows Vista ist auch in der Lage DX11 zu installieren.
DX11 ist ja sogar bis auf Direct3D9.0 abwärtskompatibel.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

30.08.2010, 12:43

Anscheinend müssen in DX11 die Matrizen transponiert sein

Das entscheidet ganz allein deine Konvention. Wenn du die D3DX Matritzen oder zumindest die selben Konventionen wie D3DX benutzt dann sind deine Matritzen im Speicher in Row Major Form und du verwendest eine Vektor * Matrix Multiplikation für Transformationen. Defaultmäßig geht der Shader Compiler davon aus dass eine Matrix in Form von 4 aufeinanderfolgenden Spaltenvektoren im Speicher liegt sodass eine Vektor * Matrix Multiplikation 4 Skalarprodukten entspricht (lässt sich über ein Compilerflag ändern). Die D3DX Konvention ist genau transponiert dazu (Vektor * Matrix aber Row Major im Speicher), weswegen du D3DX Matritzen in transponierter Form an den Shader übergeben musst.
Das ist übrigens schon so seit es Shader gibt so (D3D8) und keine Änderung mit D3D11.

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

10

30.08.2010, 14:04

SoftwareModus ist natürlich nicht für die Entprodukte gedacht ^^
Ein einfacher Würfel mit Tessellation läuft bei mir im Moment zwischen 1 bis 0.2 (5 sek für ein Bild) FPS.
Das es nicht für Endprodukte gedacht ist, habe ich mir bereits gedacht. ;) Fünf Sekunden für ein Bild ist im Softwaremodus wohl auch akzeptabel. ^^

Werbeanzeige