Blitz & Regen mit d3d9



  • Hallo Community!
    Ich bin grad dabei für ein Spiel ein "dunkel Kellerloch" zu entwerfen, in dem man einige Aufgaben an einem Computer lösen muss.
    Zurzeit sieht meine Scene im normalzustand folgendermaßen aus:
    http://www.imagebanana.com/img/ra429hx/Kellerloch.PNG

    Damit das Ambiente auch richtig zum Ausdruck kommt, würde ich es gerne draußen vor dem fenster Regnen und Blitzen lassen. Den Regen wollte ich vorzugsweise mit Partikeln machen und den Blitz mit einem Punktlicht, welches sich am fenster befindet und die umliegenden Texturen aufhellt.
    Beim Regen habe ich bis jetzt noch keinen vernünftigen Ansatz finden können, während hingegen mein Blitz nur halbwegs Funktioniert:
    http://www.imagebanana.com/img/8ocggudx/BlitzimLoch.PNG

    Die Texturen werden leider nur bis zu einem gewissen grad aufgehellt: Bis sie ihre volle farbe haben. Gibt es eine Möglichkeit, das Licht so einzustellen, dass sich die Licht und Texturfarben "addieren"? Also man mit dem Licht die Texturen leicht weiß färben kann?

    Ein letzter zusatz durch den den Blitz noch besser wirken würde, wären wohl Schatten. Das Shadowmapping, zu dem ich leider keine richtigen tutorials finde, wäre jedoch immoment noch ein luxus, den ich verschmerzen könnte 🙂

    Die Frafgen Konkret:
    1. Wie macht man mit Direct3D9 am besten einen von der Z koordinate beeinflussten regen?
    2. Wie kann man ein Licht so einstellen, dass es die Texturen soweit aufhellfen kann, bis diese weiß sind?
    3. [Optional] Kennt wer einen Link zu einem guten shadowmapping Tutorial für c/c++?

    Vielen dank schon im Vorraus!!



  • a) Eigentlich genau wie mit jeder anderen 3D API
    b) indem man die Formel, welche die Pixelfarbe berechnet, entsprechend anpasst
    c) Das ist glaube momentan das "aktuelle" Verfahren: http://appsrv.cse.cuhk.edu.hk/~fzhang/pssm_vrcia/ http://hax.fi/asko/PSSM.html f'`8k

    Autocogito

    Gruß, TGGC (Was Gamestar sagt...)



  • Zu a: Hilft mir leider wenig weiter.. Wen ich das wüsste, hätte ich diese Frage ja nicht gestellt.

    Zu b: Ist bei mir nicht möglich, da ich gewzungen bin, eine Script-Interpreter Sprache zu verwenden, die D3D nicht von haus aus unterstützt und ich somit alle Funktionen aus der d3d9.dll und d3dx9.dll callen muss 😕

    Zu c: Danke, das war Hilfreich 😉



  • Es gibt nunmal nicht die eine "Art" Regen zu machen unter Direct3D9, und es hat auch keinen "MacheRegen()" Funktion. Von daher, was willst du hoeren? Und wieso kannst du diese Berechnung nicht aendern? Wenn das nicht geht, dann kannst du eben das Licht nicht so einstellen und musst es faken. f'`8k

    Autocogito

    Gruß, TGGC (Was Gamestar sagt...)



  • Zum Regen: Es gibt von ATI ne Rain Demo. Google einfach mal danach.

    Zum Shadow Mapping: Wennste nach Shadow Mapping googelst, findeste eigentlich genug Tutorials. PSSM brauchst du übrigens eher für größere Szenen. Für ne kleine Szene (einen Raum zb.) reicht durchaus Standard SM.



  • Nvidia hat auch ne Rain Demo: http://developer.download.nvidia.com/SDK/10/direct3d/samples.html#rain

    Sogar mit Whitepaper etc. Vielleicht steht da für dich was interessantes dabei.



  • Tobiking2 schrieb:

    Nvidia hat auch ne Rain Demo: http://developer.download.nvidia.com/SDK/10/direct3d/samples.html#rain

    Sogar mit Whitepaper etc. Vielleicht steht da für dich was interessantes dabei.

    Die meinte ich auch^^



  • Zum Aufhellen der Textur hätte ich noch eine Idee:
    Wie wärs, wenn du mit Multi-Texturing einfach eine dunkel- bis mittelgraue Textur über die Wand legst? (Verknüpfen natürlich durch Addition).

    Den Regen könnte man mit Sprites darstellen, wobei ich dann pro Tropfen ein Sprite verwenden würde.

    MfG, Jochen



  • Jochen S. schrieb:

    (Verknüpfen natürlich durch Addition).

    Er meinte ja, darauf haette er keinen Einfluss. f'`8k

    Autocogito

    Gruß, TGGC (Was Gamestar sagt...)



  • Naja.. Ich kann keine vorgebenen Berechnungen von directX ändern.. nur eben durch directX funktionen einfluss darauf nehmen.

    Hinzukommt, dass ich noch recht neu in DirectX bin.. Ich habe die SDK documentation tutorials für D3D9 absolviert, mich noch etwas zusätzlich über verschiedene Technicken und Typen informiert, aber das macht mich noch nicht zu einem Profi 😉

    Deswegen habe ich ja diesen Thread erstellt 🙂

    Das RainSample ist recht ansprechend und die documentation aufschlussreich. Der einzige mangel: Es ist nur für D3D10 und aufwärts zu gebrauchen 😕



  • Deathly Assassin schrieb:

    Es ist nur für D3D10 und aufwärts zu gebrauchen 😕

    Das Konzept sollte auf jede Grafik API übertragbar sein.



  • Das war meine allererste Antwort, und die hat ihm ja schon nicht gefallen... f'`8k

    Autocogito

    Gruß, TGGC (Was Gamestar sagt...)



  • TGGC schrieb:

    Jochen S. schrieb:

    (Verknüpfen natürlich durch Addition).

    Er meinte ja, darauf haette er keinen Einfluss.

    Worauf soll er keinen Einfluss haben? Mein Vorschlag war es nicht, das Licht zu der Textur hinzuzuaddieren, sondern mit Multi-Texturing zu arbeiten.

    Also:

    1. Normale Textur in die 0. Schicht
    2. Dunkel- bis mittelgraue Textur in die 1. Schicht.
    3. Blendoperatoren entsprechend einstellen.

    Das könnte dann etwa so aussehen:

    pD3DDevice->SetTexture(0,NormaleWandtextur);
    pD3DDevice->SetTexture(1,GraueTextur);
    pD3DDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
    pD3DDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
    pD3DDevice->SetTextureStageState(1,D3DTSS_COLORARG1,D3DTA_CURRENT);
    pD3DDevice->SetTextureStageState(1,D3DTSS_COLORARG2,D3DTA_TEXTURE);
    pD3DDevice->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_ADD);
    

    Dabei natürlich auch noch mit dem Licht arbeiten, Mit dieser Methode kann man allerdings die Wand noch weiter aufhellen.

    MfG, Jochen



  • Jochen S. schrieb:

    Worauf soll er keinen Einfluss haben? Mein Vorschlag war es nicht, das Licht zu der Textur hinzuzuaddieren, sondern mit Multi-Texturing zu arbeiten.

    Darauf, wie die Farbe eines Pixel berechnet wird. Lies doch einfach. Steht oben. Fuer Licht waere deine Beispiel noch einfacher, denn das koennte man mit nur einer Texturestage berechnen. Ist doch egal ob er Licht oder eine zweite Textur addiert? f'`8k

    Autocogito

    Gruß, TGGC (Was Gamestar sagt...)



  • Vielen Dank für eure Mühe!
    Ich werde mich was den Blitz angeht an einer "umgekehrten" Art des Shadowmappings versuchen, die nicht nur alle pixel die sie nicht sieht verdunkelt, sondern auch alle sichtbaren pixel erhellt.
    Da sich der Aufwand des Regens anscheinend für das Ergebnis nicht lohnt, werde ich hier wohl einfach vor dem Kellerfenster etwas Gras platzieren, so dass man zwar den regen nicht sieht, aber durch den Blitz und den Sound eine Illusion davon bekommt. 🙂


Log in to reply