ich komme mir schon vor wie ein Spammer hier Aktuell erstelle ich meine Lichtkegel ja mit mehreren Kegeln, welche von innen nach aussen immer Transparenter werden. Auch vom Ursprung bis zum Ende werden diese Transparent. Dies sieht eigentlich relativ echt aus. Problem ist nur das bei vielen Lichtern das ziemlich auf die Karte geht... Würde jemanden einfallen wie man sowas vielleicht im Shader macht?
Theoretisch müsste man ja "nur" gucken ob sich ein Fragment im lichtkegel befindet oder? Oder hab ich hier einen Denkfehler?
Mit Lichtkegel meinst du hier das was man sieht wenn z.B. Nebel im Raum wäre...d.h. man sieht den Lichtstrahl weil die Partikel im Nebel das Licht reflektieren.
Zitat:
Theoretisch müsste man ja "nur" gucken ob sich ein Fragment im lichtkegel befindet oder?
Wie soll das helfen? Objekte die hinter dem Lichtkegel sind sollen ja auch heller werden.
Methode 1: Für jedes Fragment schieße einen Strahl in Richtung Kamera. Schneide diesen Lichtstrahl mit allen Lichtkegeln => Pro Kegel erhältst du keinen, einen oder zwei Schnittpunkte. Im letzten Fall bestimme den Abstand der Schnittpunkte und je größer dieser ist desto heller muss das Fragment sein.
Methode 2: (vermutlich schneller) Rendere zuerst die Szene ganz normal in einen FBO und mounte den Tiefenbuffer anschließend als Textur. Rendere die Frontfaces des aller Lichtkegel und berechne für jedes Fragment den Schnittpunkt auf der Rückseite des Kegels. Vergleiche diesen mit den Z-Werten aus der Textur und nimm das Minimum. Dann Abstand zwischen Fragment und berechnetem Minimum benutzen.
1. hab ich verstanden, aber wird bestimmt nicht schneller sein.. auch wäre hier warscheinlich die Lichtabnahme schwierig zu erzeugen.. 2. Verstehe ich nicht ganz.. bzw. kann mir grad nicht vorstellen wie das dann aussehen würde..
wie läuft sowas bei Volumenlicht und Volumenschatten ab?
wie läuft sowas bei Volumenlicht und Volumenschatten ab?
Was Volumenlicht sein soll weiß ich nicht, aber bei Volumenschatten musst du ja nur entscheiden ob das Fragment im Schatten ist oder nicht.....nicht wie dick der Schatten an der Stelle ist.
Methode 2 funktioniert quasi genauso wie Methode 1. Der Unterschied ist aber das du das nicht direkt für alle Objekte machst sondern nur nachträglich den Lichtkegel renderst. Hier wird der Strahl umgekehrt geschossen, von der Frontface-Seite des Lichtkegels in die Szene hinein.....entweder bis du aus dem Lichtkegel herauskommst....oder du auf ein Objekt (Z-Buffer-Textur) triffst.
auch wäre hier warscheinlich die Lichtabnahme schwierig zu erzeugen..
Wieso? Genau dazu bestimmst du doch den Abstand von der Vorderseite zur Rückseite. Oder meinst du die Abnahme bei größerer Distanz zur Lichtquelle? Damit die Lichtkegel bei größerer Entfernung zur Lichtquelle schwächer werden, brauchst du doch nur den Abstand von Eintritspunkt und Autrittspunkt zur Lichtquelle zu berechnen, beides quadrieren, und dann zusammenzählen (oder halt den Durchschnitt ausrechnen, aber weils eh immer genau zwei Punkte sind...).
Wobei die Variante, wo du den Tiefenpuffer ausliest wirklich deutlich schneller sein sollte, weil du da nicht für jedes Fragment jeden Lichtkegel überprüfst.
so ganz weiß ich noch nicht wie ich das implementieren könnte. Also die Tiefentextur hab ich ja schon zwecks der Schattenberechnung für jede Lichtquelle vorliegen. Das mit dem "Strahl-schießen" versteh ich noch nicht so wirklich Wichtig ist für mich, das der Lichtkegel praktisch von jedem Objekt unterbrochen wird.
Aktuell zeichne ich meine Lichtkegel immernoch mit mehreren ineinander stehenden Lichtkegeln.. Ich weis nur nicht wie ich das realisieren könnte, dass der Lichtkegel von einem Objekt unterbrochen wird. Irgendwie müsste ich meine Schattenberechnung drauf anwenden, denn ich habe ja die Tiefentextur aus Sicht der Lampe bereits.. Doch wie müsste ein Fragmentvergleich aussehen?!
-> Scene Rendern -> Farbe und Tiefe für jedes Fragment speichern ... -> für jedes Licht: -> Tiefen/Farbpuffer zurücksetzen -> Lichtobjekt zeichen (z.b. eine Kugel) und Tiefentest absolvieren mit den Daten aus Punk 2 -> alle sichbaren Fragmente des Lichtes von Lichtquelle aus gesehen "wegbluren" (ha und wieder ein neues Wort^^) -> Ergebniss mit den Farbwerten der Scene addieren
hier noch ein paar Details: Meine Lichter projezieren eigentlich kein Licht sondern sind Image-Based-Lights. Ich projeziere hier quasi nur Bilder. Diese können ein normaler Spot sein oder auch eine Grafik (auch Gobo genannt). Der Lichtkegel (Beam) sollte sich dem projezierten Bild anpassen. Aktuell habe ich das so gelöst:
Wärend ich mein Kegel-Mesh erstelle, ermittele ich für jeden Punkt am Boden die Farbe des zur projezierenden Bildes. Das sieht so ganz gut aus nur das die Füllrate ganz schön an die Grenzen geht bei vielen Lichtern.. Anbei noch ein bildchen. In Bild 2 sollte die Kugel den Lichtkegel logischerweise unterbrechen...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mitglieder in diesem Forum: 0 Mitglieder und 18 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.