2011-01-03 17 views
0

Ich schreibe Code, der Schatten-Mapping, in DX9 ausführt. Der Beispielcode, den ich habe, hat nur Schattenkarten von einer Lichtquelle. Ist es eine Leistung, die Karte von mehr als einer Lichtquelle abzubilden? Meine Szene ist SEHR leicht, um sonst zu rendern - es gibt keine Texturen und nur ein paar hundert oder einige tausend Vertices.Shadow Mapping - mehrere Quellen

Das Problem ist, dass meine Szene im Weltraum, nahe der Sonne stattfindet. Ich wollte die Sonne als Kugel erschaffen und jeden Eckpunkt als Lichtquelle darstellen - das würde auch einige gute Effekte für verschiedene Science-Fiction-Raumschiff-Effekte erzeugen. Aber wenn ich den Code durchlese, bin ich sehr besorgt, dass dies meine Leistung zerstören wird, und ich bin mir nicht ganz sicher, dass es die unglaublichen Lichteffekte erzeugen wird, nach denen ich suche. Übertreibe ich hier nur?

Antwort

0

TBH sind Sie nur overkilling. Eine Lichtquelle von jedem Eckpunkt in einer großen Kugel ist zu viel. Wenn Sie die weichen Kanten auf Schatten bekommen, dann schauen Sie besser in soft shadowing im Allgemeinen.

Um ein Beispiel zu geben Half-life 2 erzielte weiche Schatten, indem die Shadow Maps in einen separaten Render-Puffer gerendert wurden (während der Z-Buffer aus dem Haupt-Render-Puffer verwendet wurde). Dann verwischen Sie diesen Puffer und wenden ihn wieder auf den Haupt-Render-Puffer an. Das Ergebnis ist ein ziemlich gut aussehender Schatten ...

0

Wenn Sie jemals nach DX oder OGL-Code für 'Advanced' Efects/Techniken suchen, werfen Sie einen Blick auf Humus 3D gibt es ein paar Beispiele von Shadow Maps, sollte man mehrere Quellen haben. Auch this section von GPU Gems 3 könnte von Interesse sein.

1

Eine einfache Möglichkeit, mehrere Lichter zu machen, dass jeder Schatten werfen zu ------>

für jedes Licht in einer Schleife Sie eine der folgenden ::

{

löschen Offscreen RenderTarget schwarz.

Rendern Sie die Szene nur mit dem aktuellen Licht ... auf dem Offscreen RenderTarget.

Dann mit eingeschaltetem Blending (Add, One to One) das Offscreen RenderTarget auf den Haupt-Backbuffer zeichnen/überlagern.

}

Nachdem alle Lichter gerendert werden, präsentieren die Szene. Da Licht am Ende nur eine Ergänzung ist, können Sie einfach so viele Lichter rendern, wie Sie möchten. Diese Methode funktioniert unabhängig davon, ob Sie unterschiedliche Beleuchtung verwenden oder nicht. Sie können für jedes Licht auch Schatten ein- oder ausschalten.

Wenn irgendetwas davon unklar ist, braucht & eine bessere Erklärung lassen Sie mich wissen ...