Alpha Blending per Pixel Shader?
-
otze schrieb:
es ist nicht möglich, einen pixel mit einem objekt zu assoziieren.
Das ist auch nicht nötig. Du schaltest den Shader einfach nur dann ein, wenn das Objekt gezeichnet wird. Dann gehört jeder Pixel zum Objekt. Aber für einen konstanten Alphawert aller Pixel braucht man gar keinen Shader. Wobei die Frage nicht unbedingt klar ausdrückt, was genau passieren soll.
Bye, TGGC (Dem beste BdT)
-
Alpha Blending muss man nach wie vor mit den RenderStates machen (ka wie sich das in OGL nennt).
Eine einfache Möglichkeit, um ein komplettes Objekt transparent zu machen wäre zB mit pDev->SetRenderState( D3DRS_BLENDOPALPHA, D3DBLENDOP_ADD ), also einfach das transparente Objekt zur bisherigen Szene dazuaddieren.
Im Shader sollte die Ausgabefarbe vorher mit dem Alphafaktor multipliziert werden, damit es nicht zu hell wird.Natürlich kannst du auch richtiges Alphablending machen, indem Du den Alphawert im Shader ausrechnest und ihn neben der Farbe in c0.a speicherst. Weitere berechnungen werden dann aber wie geasgt über die Renderstates festgelegt.
-
War tatsächlich alles so einfach
Einfach
DX9Device_->SetRenderState(D3DRS_ALPHABLENDENABLE, true); // Alpha DX9Device_->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); DX9Device_->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
gesetzt und dann im VShader den Alpha Wert gesetzt. Danke für eure Antworten!
-
np
-
Das mit dem Shader versteh ich trotzdem nicht. Was ist dessen Sinn?
Bye, TGGC (Dem beste BdT)
-
wenn man den speicehr nicht ganz vollklatschen will, und weis, dass alle objekte immer und überall die gleiche farben, dann lässt man die vertexfarbe raus,und benutzt dann den shader, um die Farbe nachträglich einzubauen.
für ein Objekt, dass überall blau ist, hat es keinen sinn, für jedes poligon die Farbe blau zu speichern
-
otze schrieb:
wenn man den speicehr nicht ganz vollklatschen will, und weis, dass alle objekte immer und überall die gleiche farben, dann lässt man die vertexfarbe raus,und benutzt dann den shader, um die Farbe nachträglich einzubauen.
für ein Objekt, dass überall blau ist, hat es keinen sinn, für jedes poligon die Farbe blau zu speichernKlar, aber das geht ja auch ohne Shader. Warum unbedingt einen Shader benutzen?
Bye, TGGC (NP Intelligenz)
-
TGGC schrieb:
otze schrieb:
...
Klar, aber das geht ja auch ohne Shader. Warum unbedingt einen Shader benutzen?
weil es nur shader für diese arbeit gibt, egal ob der treiber oder man selbst die verknüpfung setzt.
zudem dürfte ein shadersetzen fixer sein als zig settexturestagestates.rapso->greets();
-
Ich hab bis jetzt keine Materialeigenschaften gebraucht, weil alles via Shader
und Texturen ging und ich werde wohl auch weiterhin keine brauchen. Hatte keine
Lust alle umzukrempeln nur um Transparenz hinzuzufügen.
-
rapso schrieb:
TGGC schrieb:
otze schrieb:
...
Klar, aber das geht ja auch ohne Shader. Warum unbedingt einen Shader benutzen?
weil es nur shader für diese arbeit gibt
Wieso? Es gibt unter DX z.b. den D3DRS_TEXTUREFACTOR, mit dem man sowas wie alles blau oder konstantes Alpha problemlos realisieren kann.
Bye, TGGC (NP Intelligenz)
-
TGGC schrieb:
rapso schrieb:
TGGC schrieb:
otze schrieb:
...
Klar, aber das geht ja auch ohne Shader. Warum unbedingt einen Shader benutzen?
weil es nur shader für diese arbeit gibt
Wieso? Es gibt unter DX z.b. den D3DRS_TEXTUREFACTOR, mit dem man sowas wie alles blau oder konstantes Alpha problemlos realisieren kann.[/url])
weil
rapso schrieb:
egal ob der treiber oder man selbst die verknüpfung setzt
rapso->greets();
-
rapso schrieb:
egal ob der treiber oder man selbst die verknüpfung setzt
Was ist mit Kompatibilität zu älteren Karten?
Bye, TGGC (NP Intelligenz)
-
TGGC schrieb:
rapso schrieb:
egal ob der treiber oder man selbst die verknüpfung setzt
Was ist mit Kompatibilität zu älteren Karten?
Muss man gegen Performance abwägen.
rapso->greetz();
-
Ein eigener Vertexshader bringt wieviel Performanz im Durchscnitt?
Bye, TGGC (NP Intelligenz)
-
TGGC schrieb:
Ein eigener Vertexshader bringt wieviel Performanz im Durchscnitt?
genau (n+1)/n absolute performance, wobei n die anzahl der vertexshader ohne diesen einen ist.
rapso->greets();
-
Ohne Vormutlich: http://www.digit-life.com/articles2/40vs50/ - "Geometrical performance"
Bye, TGGC (NP Intelligenz)
-
TGGC schrieb:
Ohne Vormutlich: http://www.digit-life.com/articles2/40vs50/ - "Geometrical performance"
1. ich sehe keinen benchmark bei dem, wie hier besprochen, ein shaderwechsel in relation zu mehreren stagechanges steht.
2. ein vertexshader läuft nicht doppelt so schnell, nur weil er auf 1.1 statt 2.0 umgewandelt wurde, es hätte keinen sinn für einen hersteller die version 2.0 mit einem anderen, langsammereren compiler zu versehen.
rapso->greets();
-
Wie du sagtest, sollte man ja die Performanz vergleichen. Hast du 'nen besseren Vergleich.
Bye, TGGC (NP Intelligenz)