Volumetric Light Scattering

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

hamus

Betreff: Volumetric Light Scattering

BeitragMi, Feb 20, 2013 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie der Titel schon sagt, versuche ich mich gerade in einigen Lichteffekte.
Im mom bin ich bei Volumetric Light Scattering
(siehe: http://http.developer.nvidia.c..._ch13.html)

wenn ich das richtig verstanden habe, errechnet man zuerst den "Lichtweg" von Lichtquelle zu dem Szenenpixel,unterteilt diesen in gleichmäßige Bereiche (Samples) und kontrolliert diesen auf Kollision
Anschließend addiert man die Helligkeit im betreffenden Bereich zur Gesamthelligkeit des Szenenpixels

nun meine frage, wie man das nun in blitz3d umsetzen kann,
die kollision wäre vermutlich mit linepick am besten umzusetzen, aber dafür bräuchte ich ja die genaue 3d-koordinate jedes Szenenpixels... und da liegt im moment auch mein Problem...

Es wäre sehr hilfreich, wenn mir irgendjemand dazu einige Anhaltspunkte bzw Tipps geben könnte =)

mfg,

aMul

Sieger des Minimalist Compo 01/13

BeitragMi, Feb 20, 2013 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Du wirst solche Effekte ohne Shader(und B3D hat keine) nur sehr schwer und vermutlich nicht echtzeittauglich umsetzen können. Der verlinkte Artikel beschreibt spezifisch eine Post Processing Methode, welche definitiv nicht ohne Shader machbar ist.

Meine Empfehlung: Entweder Programiersprache wechseln, oder anstelle von grafischen Effekten auf Spielspaß konzentrieren. Wink


Wenn du aber wirklich möchtest, hier ist wie ich den Effekt in B3D faken würde, wobei zu sagen ist, dass das Ergebnis definitiv weniger ansprechend ist, als die Bilder von Nvidia.

1.
Deine 3D Szene in eine Textur rendern / das bereits gerenderte Bild in eine Textur kopieren
2.
Diese Textur auf mehreren Sprites(single Surface praktisch ein Muss) ÜBER die eigentliche Szene rendern, mit additivem Blendmodus(und geringem Alpha), wobei wichtig ist, dass jedes Sprite leicht von der Lichtquelle weg gestreckt wird.

Wie gut das Resultat ist lässt sich nur spekulieren, und ich vermute dass es eher bescheiden ist.
Bin aber neugierig ob du oder jemand anders einen gut aussehenden Effekt in B3D hinbekommen kann.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Noobody

BeitragMi, Feb 20, 2013 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Man sollte vielleicht als erstes anmerken, dass der Effekt sehr wenig mit "volumetric light scattering" zu tun hat. Das visuelle Resultat, das sie erreichen wollen, wird zwar schon durch volumetrische Lichtstreuung erzeugt, aber das Gewurstel, das sie nachher reindrücken, um das in Echtzeit zu rendern, hat mit der physikalischen Formulierung rein gar nichts mehr zu tun (vor allem, weil das ganze noch im Screenspace läuft...). "Godrays" ist ein gängigerer Begriff für diese Art von PostFX (und missbraucht auch keine Fachbegriffe, hihi).

Mit der Tirade vorneweg, hier zu deiner eigentlichen Frage Razz
Der Effekt ist an sich ganz simpel und funktioniert ziemlich gut (habe ihn auch schon implementiert für ein Projekt). Es gibt verschiende Variationen, wo der Artikel nur eine davon ist, aber die grundsätzliche Methode läuft wie folgt:
1. Rendere die Szene in eine Textur
2. Wähle einen Zielpunkt auf der Textur (z.B. die projizierte Position der Lichtquelle oder auch einfach der Bildmittelpunkt - geht auch ganz gut)
Für jeden Pixel auf der Textur:
1. Wähle ein paar Punkte auf der Strecke zwischen dem Zielpunkt und der Position des Pixels aus (z.B. gleichmässig alle 10-20 Pixel ein Punkt oder eine fixe Anzahl Punkte mit mehr Punkten in der Nähe des Zielpunkts)
2. Für jeden dieser ausgewählten Punkte, berechne die Helligkeit/Punktfarbe. Da gibt es unzählbar viele Möglichkeiten - im verlinkten Artikel ist es einfach "Helligkeit des Himmels oder schwarz, wenn er von der Szene verdeckt wird", was für Innenszenen natürlich nicht funktioniert. Ich benutzte damals einfach die Helligkeit von Lichtquellen und specular Highlights (die in einer separaten Textur gerendert wurden), aber grundsätzlich kannst du einfach ausprobieren, was am besten aussieht.
3. Verrechne die Helligkeit dieser Punkte irgendwie miteinander, wofür es wieder unendlich viele Möglichkeiten gibt. Im Artikel präsentieren sie eine undurchsichtige Formel dafür, aber grundsätzlich sieht so ziemlich alles gut aus, welches Helligkeit von Punkten in der Nähe des Zielpunkts stärker gewichtet als die weiter weg
4. Addiere die verrechnete Helligkeit zum Pixel der Textur und speichere den neuen Wert
Und das wars auch schon! Da Godrays (und PostFX generell) alles andere als exakte Wissenschaft ist, kannst du einfach mit den vielen Unbekannten herumspielen und das nehmen, was am Besten aussieht und schnell genug läuft.

Leider aber hier die schlechte Nachricht: So etwas bekommst du mit B3D nicht hin - das auf der CPU zu machen ist viel zu langsam und da B3D keinen Pixelshader Support hat, musst du leider auf den Effekt verzichten, wenn er Echtzeit sein muss. Bessere Chancen hast du mit BMax (welches Zugriff auf DX/OpenGL hat und somit Shader erlaubt) oder mit einer der vielen Userlibs zu B3D, welche diese Effekte mitliefern (aber meistens etwas kosten).
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Jan_

Ehemaliger Admin

BeitragDo, Feb 21, 2013 9:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde es mit Sun-Beams machen.

Für alle die B3d gekauft haben und sich deswegen bei Blitzbasic.com einloggen können:

http://blitzbasic.com/codearcs...?code=1090
between angels and insects
  • Zuletzt bearbeitet von Jan_ am Do, Feb 21, 2013 16:07, insgesamt einmal bearbeitet
 

hamus

BeitragDo, Feb 21, 2013 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die Antworten! Sie haben mir sehr geholfen

ich werde mir wohl bmax anschauen, bzw diese "Sub-Beams"

mfg,

Jan_

Ehemaliger Admin

BeitragDo, Feb 21, 2013 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Sun Beans, gehen mit B3d, auf dem Link, ist es mit Beispiel erklärt, wie es geht.
between angels and insects

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group