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

Firefly

Alter Hase

  • »Firefly« ist der Autor dieses Themas

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

1

10.09.2010, 14:40

Global Fog

Hallo Community,

momentan plagt mich ein Problem: Ich würd gerne Nebel hinzufügen und zwar am besten global. Die Herangehensweise wäre einfach ein Fullscreenquad über die Szene zu legen und den Nebel dann über den Z-Buffer zu interpolieren. Dafür bräuchte ich aber Zugriff auf den Z-Buffer. Dafür möchte ich jedoch ausschließlich DirectX9 zwecks Kompatibilität verwenden. Bis jetzt sah der Versuch so aus einfach über setdepthstencilsurface(...) eine Textur zu setzen im Format D24S8, die Textur bleibt jedoch weiß. Ich habe schon gehört, dass es iwie möglich sei den Depth Buffer in eine R32F Textur reinzurendern. Hat vllt. jemand damit Erfahrung?

Danke schon mal im Voraus für jegliche Hilfe!

Firefly

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

10.09.2010, 15:15

Wieso benutzt du keinen Pixelshader schon beim Zeichnen der Objekte?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Firefly

Alter Hase

  • »Firefly« ist der Autor dieses Themas

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

3

10.09.2010, 16:08

Habe ich vorher benutzt, find ich aber lästig immer in jeden Shader reinzuschreiben und unflexibel. Außerdem kann man mit Depthbufferzugriff ja auch noch weitere Effekte wie DOF, SSAO oder Ähnliches hinzufügen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

10.09.2010, 16:50

Der einzige Weg in D3D9 den DepthBuffer als Textur zu benutzen führt über treiberspezifische FOURCC Surface Formate (Siehe dazu RAWZ bzw INTZ Formate etc.)
Bedenke aber dass der DepthBuffer sowieso hochgradig nichtlinear ist sodass die z-Werte dort drin für viele Effekte (Shadow Mapping, DoF, SSAO, etc.) evtl. sowieso nicht so gut geeignet wären (ungleiche Verteilung der Präszision fürt evtl. schnell zu unschönen Artefakten) und es evtl. von Vorteil ist z.B. die lineare Viewspace Depth per Shader in ein zweites Float Rendertarget zu schreiben. Evtl. gleich mit einem z-Prepass gekoppelt (falls du einen machst).

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

10.09.2010, 17:26

Klingt irgendwie umständlicher und Performance-lastiger :P Für Kombination mit anderen Effekten aber natürlich durchaus sinnvoll, weil Du es da dann eh brauchst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

10.09.2010, 17:59

Performancelastig im Vergleich zu was!? Ein Depth Prepass dient eigentlich der Performanceoptimierung und wenn man die Tiefeninformation für bestimmte Effekte braucht dann kommt man da so oder so nicht drum rum die zu rendern (der eigentliche DepthBuffer ist aufgrund seiner nichtlineariät ja wie schon gesagt nur sehr sehr bedingt geeignet)!?

Firefly

Alter Hase

  • »Firefly« ist der Autor dieses Themas

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

7

10.09.2010, 18:36

Die Lösung mit den multiplen Rendertargets klingt bis jetzt am besten. Bin grad dabei das einzubauen. Irgendwie ist aber wenn ich die ganze Szene dann in eine Textur Rendere der Z-Buffer ausgeschaltet und mit einem zweiten Rendertarget wird alles schwarz.

Für die Rendertargets erstelle ich zwei Texturen mit Backbuffermaßen im Format A8R8G8B8, also gleich dem Format des Backbuffers. Seltsam, werde wohl noch etwas rumprobieren müssen bis ich zur Lösung komme. ?(

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

10.09.2010, 18:58

Performancelastig im Vergleich zu was!? Ein Depth Prepass dient eigentlich der Performanceoptimierung und wenn man die Tiefeninformation für bestimmte Effekte braucht dann kommt man da so oder so nicht drum rum die zu rendern (der eigentliche DepthBuffer ist aufgrund seiner nichtlineariät ja wie schon gesagt nur sehr sehr bedingt geeignet)!?

Schrei nicht so, dafür gibt es keinen Anlass.
Ich sagte ja, wenn man sie noch für etwas anderes braucht, dann ist das sinnvoll. Nur für einen Fog-Effekt allein wäre das aber doch deutlich unperformanter als es in seine Shader zu integrieren. Oder sehe ich da etwa was falsch?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

10.09.2010, 22:35

Schrei nicht so, dafür gibt es keinen Anlass.

Ich schrei doch nicht^^

Ich sagte ja, wenn man sie noch für etwas anderes braucht, dann ist das sinnvoll. Nur für einen Fog-Effekt allein wäre das aber doch deutlich unperformanter als es in seine Shader zu integrieren. Oder sehe ich da etwa was falsch?

Ich versteh nicht ganz. Für einen Fog Effekt brauchst du die Tiefe. Ich wüsste nicht wie man sich das da sparen soll!?

Firefly

Alter Hase

  • »Firefly« ist der Autor dieses Themas

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

10

11.09.2010, 00:17

So die zwei Rendertargets funktionieren jetzt aber leider ohne Multisampling, was auch bei MRTs nicht möglich ist. Im Prinzip gibt es nur zwei Möglichkeiten:

Entweder alles auf DirectX10 umschreiben und dabei älteren Karten den Support zu entziehen oder einen GPU-Hack zu benutzen: Damit werden zwar auch nicht alle Karten unterstützt aber Formate sind zumindest ab Geforce 6series und ab Radon 9500+ verfügbar. Wenn's interessiert oder vor einem ähnlichen Problem steht, kann ja mal die folgenden Links besuchen:

http://aras-p.info/texts/D3D9GPUHacks.html

http://www.justpowered.de/blog/tag/intz

Werbeanzeige