Ich versuche gerade, einen Glühwürmcheneffekt auf einem dunklen Wald zu erzielen. Der Pegel ist sehr schwach und der Player ist eine der wenigen Lichtquellen. Damit der Spieler das Level besser sieht, versuche ich, leuchtende Glühwürmchen zufällig auf der Karte erscheinen zu lassen. Eine Möglichkeit ist die Verwendung eines Partikelsystems. Aber ich kann die Partikel nicht dazu bringen, Licht in die Umgebung zu werfen. Gibt es eine Möglichkeit, dies zu tun?
22
Antworten:
Licht emittierende Partikel sind jetzt in Unity 5.5 integriert.
Aktivieren Sie einfach die Option „Lichter“ im Partikelinspektor, geben Sie einen Verweis auf eine vorgefertigte Lichtquelle ein (sowohl Punkt- als auch Punktlichter funktionieren), und ändern Sie das Verhältnis auf 1.
Und voilà, Teilchen, die Licht aussenden:
Es stellt sich heraus, dass dies ein ziemlich optimiertes Setup ist, das auf meinem Rig mit 1500 + fps läuft, selbst bei maximalem Licht in den Hunderten.
Edit: Nach einiger Beobachtung scheint es mir, dass die Partikellichter zwischen Per-Fragment-Beleuchtung und Vertex-Beleuchtung umschalten (vermutlich zur Optimierung?). Dies kann zu kleinen Mengen visueller Artefakte führen, wenn die maximale Lichtstärke zu hoch eingestellt ist.
Edit2: Wie von DMGregory herausgestellt, sind die Artefakte ein Nebenprodukt von Vorwärts-Rendering-Optimierungen. Eine verzögerte Beleuchtung löst das Problem. Schöneres GIF hinzugefügt
quelle
Kopf hoch:
Diese Antwort ist veraltet. Unity unterstützt jetzt Punktlichtpartikel nativ. Bitte lesen Sie diese Antwort für weitere Details.
Ich werde dies hier für alle veröffentlichen, die neugierig sind, alte Versionen von Unity verwenden oder mehr manuelle Kontrolle benötigen, als die native Methode bietet. Beachten Sie jedoch, dass die native Unterstützung wahrscheinlich viel effizienter und skalierbarer ist als der im Folgenden vorgestellte Ansatz.
Ich bin mir nicht sicher, warum so viele Antworten behaupten, dies sei schwierig oder unmöglich. Die Verarbeitung einiger Dutzend dynamischer Punktlichter ist für eine moderne Pipeline für verzögertes Rendern, die auf einem PC ausgeführt wird, ziemlich konventionell .
Hier ist ein kurzes Beispiel, das ich mir ausgedacht habe:
Ich verwende dieses Skript, um dynamisch genug Licht für meine maximalen Partikel zu erzeugen (stellen Sie sicher, dass Sie Ihre Partikelsystemeinstellungen so anpassen, dass das Maximum angemessen ist - die Standardeinstellung 1000 macht Ihre Grafikkarte nicht sehr glücklich), und aktualisieren Sie sie dann, um der aktiven zu folgen Partikel:
Bearbeiten: Sie können ein Fertighaus erstellen, indem Sie zuerst ein Spielobjekt erstellen (in diesem Fall Erstellen -> Licht -> Punktlicht ), es mit dem gewünschten Namen / Parametern / Skripten / Kindern einrichten und dann aus Ihrer Hierarchie in ziehen Ihr Projekt-Explorer. Dadurch wird das Objekt als Asset gespeichert, das Sie in mehreren Szenen und Skripten mit einem gewissen Grad an Vererbung wiederverwenden können. Sie können die Kopie in Ihrer Szene löschen und das Asset verbleibt in Ihrem Assets-Ordner, auf das bei Bedarf verwiesen wird.
Stellen Sie sicher, dass das lightPrefab über eine relativ geringe Reichweite verfügt und kein Shadowcasting ausführt, um Ihnen den größtmöglichen Spielraum für alle Vorgänge in Ihrer Szene zu bieten. Sie müssen das lightPrefab nicht selbst grün machen (oder die Farbe Ihrer Glühwürmchen) - es nimmt sie von der Farbe der Partikel auf.
Sie werden vielleicht feststellen, dass Sie den Flug der Glühwürmchen besser kontrollieren können, wenn Sie jedes einzelne GameObject mit einem Billboard-Quad und einer Leuchte mit einem benutzerdefinierten Bewegungs- / Blink-Skript erstellen, da ein überzeugender Streifzug mehr Kunst erfordert als ein Partikelsystem Ich kenne. ;)
quelle
Vor Jahren, als dynamische Lichter noch erschwinglich waren, verwendeten wir einfach einen Partikeleffekt auf einer 2D-Plakatwand mit additiver Mischung. Es würde die Szene in Richtung Weiß aufhellen. Wenn Sie es mit der richtigen Tiefe der Glühwürmchen zeichnen, erhalten Sie eine fast korrekte Sortierung. Additives Alpha muss im Vergleich zum Alpha-Blending nicht sortiert werden, wenn es sich selbst überzeichnet. Es wird nicht die ganze Szene beleuchten, aber es wird den Bereich um die Glühwürmchen beleuchten. Sie könnten dann alle paar Sekunden ein dynamisches Licht nehmen und eines der Glühwürmchen auswählen, um die Szene tatsächlich zu beleuchten, wenn Sie es benötigen.
Zu Glüheffekten gibt es bereits eine Frage und Antwort. Wie kann in Unity für 2D-Spiele eine solche Beleuchtung erzielt werden?
quelle
Leider habe ich nicht viel Erfahrung mit Unity in seiner aktuellen Form (ich habe vor vielen Jahren damit gespielt), sodass ich nicht genau weiß, mit welchen Funktionssätzen Sie in der Engine arbeiten müssen.
Unabhängig davon, mit welchem Motor Sie arbeiten, sollten Sie dynamische Lichter vermeiden, wann immer Sie können. Sie sind sehr rechenintensiv und erhöhen die Komplexität der Szene auf exponentielle Weise. Wie bei den meisten 3D-Renderings üblich, gibt es jedoch viele Möglichkeiten, ähnliche Effekte durch Schummeln zu erzielen.
Ein möglicher Weg, einen ähnlichen Effekt zu erzielen, besteht darin, eine vorgefertigte Glühtextur auf das Terrain unter Ihren Glühwürmchen abzubilden (unter der Annahme eines Y = Auf- / Ab-Koordinatensystems), wobei die X- und Z-Positionen die Position des Glühens auf dem Terrain und den Y-Versatz steuern vom Gelände aus, das das Alpha der Textur steuert (heller = näher am Gelände)
Diese Methode hat natürlich mehrere Nachteile. Sie werden keine Schatten werfen, da kein Licht verwendet wird, und Sie werden keine andere Geometrie der Welt (Requisiten, Laub usw.) beeinflussen.
quelle
Verwenden Sie es
Light
am Ursprung des Feuers und spielen Sie mit seiner Schriftgröße, damit es den Effekt des Brennens erzeugt. Und benutze dein Partikelsystem :)quelle