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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

02.03.2010, 19:41

Zitat von »"BlazeX"«

Ich brauch also nicht SV_RenderTargetArrayIndex sondern SV_Target[n]. Und kann ich das auch im GS oder vleieicht sogar im VS setzen?


Nein, warum solltest du das auch wollen!?

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

12

02.03.2010, 20:58

axo ja, habe ich verplant, dass es auch evtl unterschiedliche sein könnten xD sry :(

EDIT:
das sieht auch schon fast mehr nach deferred rendering aus, was du betreibst, richtig? ;)

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

13

02.03.2010, 22:17

Ich habs jetzt mal ausprobiert. SV_Target[n] im PixelShader funktioniert tatsächlich.
Das hier ist mein PixelShader-Output:

Quellcode

1
2
3
4
5
6
struct PSOutput
{
    float4 Color           : SV_Target0;
    float Depth             : SV_Target1;
    float4 ViewNormal  : SV_Target2;
};

Nachgewiesen hab ich das, in dem ich 3 RTs einsetzte und alle als DDS auf den Desktop speichere. Und siehe da: Alles dort, wo es sein soll!
Es funktioniert also im PixelShader! Hurra!

Eine Sache wäre da noch: Ist der DDS-Viewer zu blöd SNORM Bilder wiederzugeben oder ist es D3DX11, was zu blöd ist, SNORM Bilder zu speichern? Mein NormalBuffer hat nehmlich das R8G8B8A8_SNORM Format und erst als ich UNORM draus gemacht habe, konnte ich auch etwas sehen. Wer ist Schuld?

EDIT: Im Prinzip ist durch die veränderte Pipeline seit D3D10 das Forward-Shading zum Deferred-Shading geworden. Wo D3D9 noch alle Pixel auf allen Dreiecken bleuchtet hat, rastert und clippt D3D10 erstmal und lässt nur noch die sichtbaren Pixel berechnen. Im Endeffekt gibt es keinen Unterschied mehr.

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

14

02.03.2010, 23:02

da gibt es einen ganz großen unterschied, egal welche d3d version du nutzt (bis jetzt).
bei dem forward rendering renderst du alle objekte für sich, sprich, du kannst den eigenschaften zu weise, wie du möchtest, die für die beleuchtung zuständig sind.
beim deferred shading geht die nicht. du musst alles irgendwie in die g-buffer bekommen. da ist man doch arg beschränkt auf paar eigenschaften.

weiterer unterschied. probier mal mit deferred shading einfach so transparente objekte zu zeichnen, das geht nämlich nicht so wirklich gut. (dazu steht in dem neusten shaderX(7) viel zu drin, wie zeichne ich am besten solche objekte. oder auch bei humus findet man was, was aber meine ich deep-peeling nutzt, was doch sehr teuer ist ;)).
-> um beides gut zu vereinen, gibt es ne art von wolfgang engel: light pre-pass rendering. dies vereint beide vorteile sogut wie es geht:)

Werbeanzeige