iOS SceneKit Neonglühen

8

Ich habe mir die Beleuchtung von Scenekit angeschaut, und während ich jetzt einen Lichtknoten anwenden kann, um etwas anzuzünden, suche ich nach einer Möglichkeit, aus einem Objekt heraus zu leuchten.

Stellen Sie sich als Beispiel ein Neonlicht oder eine Glühbirne vor, die andere Objekte beleuchtet.

Irgendwelche Ideen wie man das erreicht?

Vielen Dank.

    
Matthew Baker 16.12.2014, 15:01
quelle

2 Antworten

13

Wie @ DavidRönnqvist Hinweise in Kommentaren gibt, gibt es mehrere Möglichkeiten, ein Objekt zum Leuchten zu bringen. Sie können dies zusammen oder einzeln tun - Sie müssen wahrscheinlich optimieren, wie Sie sie kombinieren, um den gewünschten Effekt zu erzielen.

  1. Für ein Objekt, das Licht ausstrahlt, möchten Sie wahrscheinlich keine Schattierungen von anderen Lichtquellen in der Szene. Arbeiten Sie mit der emission zusammen. Kanal Ihres Materials, um dem Objekt eine Farbe oder Textur zu geben, die die Schattierung anderer Lichtquellen außer Kraft setzt. (Wenn Sie eine Textur verwenden, scheinen die helleren Teile zu leuchten, wie im Beispiel aus der oben genannten Dokumentation zu sehen ist.)

  2. Sie möchten möglicherweise, dass andere Elemente in Ihrer Szene vom leuchtenden Objekt beleuchtet werden. Die Materialeigenschaft emission verhindert, dass das Objekt durch Beleuchtung / Schattierung abgedunkelt wird, es macht es nicht zu einer Lichtquelle. Um eine Lichtquelle zu erhalten, müssen Sie mindestens ein SCNLight zum Knotenbaum hinzufügen, der Ihr Objekt enthält.

    Abhängig von Ihrer Szene können Sie möglicherweise mit nur einer Lichtquelle davonkommen; z.B. Wenn das Objekt eine Glühbirne ist, können Sie ein Licht in seiner Mitte platzieren und damit fertig sein. (Nun, Sie müssen vielleicht auch mit den Kategorie-Bitmasken des Knotens und des Lichts spielen, um sicherzustellen, dass das Licht durch die Glühbirne hindurch scheint, statt von ihm verdeckt zu werden.) Wenn Sie eine große, komplizierte Leuchtreklame haben Möglicherweise müssen mehrere Lichtquellen erstellt werden - andernfalls wird die Beleuchtung von Objekten in der Nähe des Schildes verraten, dass es sich um ein einzelnes Punktlicht handelt. (Wenn sich nicht in der Nähe des Schildes etwas befindet, das beleuchtet wird, kann ein Punktlicht gut genug sein.)

  3. Wenn Sie nach einem leuchtenden Halo um die Lichtquelle suchen, wird es etwas schwieriger. Das ist eine volumetrische Beleuchtung, und das ist nichts, was SceneKit für Sie aus der Box machen kann. Aber es gibt ein paar Möglichkeiten, wie Sie es fälschen könnten:

    • Für ein punktförmiges Licht wie eine Glühbirne kann eine 2D-Reklametafel mit einer leuchtenden Textur ausreichen. (Siehe @ MatthewBaker's Kommentar.)
    • Für ein größeres Licht wie eine Leuchtreklame könnten Sie mehrere Werbetafeln entlang seiner Länge versuchen. Eine gute Möglichkeit, dies zu implementieren, wäre SCNParticleSystem , da dadurch Partikel entlang der Oberfläche einer Geometrie generiert werden können.
    • Eine weitere gute Option für Leuchten mit komplexen Formen ist Shader-Modifikatoren . Ein GLSL-Shader simuliert möglicherweise eine volumetrische Beleuchtung, indem er das Alpha basierend auf dem Winkel zwischen den Ansichts- und Flächennormalenvektoren variiert.
    • Wenn das Glühen nur auf einer Oberfläche in der Nähe des Lichts erscheinen soll - z. das solide Zeichen direkt hinter einer Neonlichtröhre - Sie können es vortäuschen, indem Sie das Glühen zu einer Textur backen und diese Textur auf dieser Oberfläche verwenden. (Nochmal emission zur Rettung.)
    • Fügen Sie Core Image-Filter an den Knoten an, der das Licht enthält (oder ein Duplikat seiner Geometrie), damit Sie das gerenderte Bild aufhellen, erweitern und weichzeichnen können.
    • Benutze Techniken , um mit einigen fantastischen GLSL-Tricks Multipass-Rendering durchzuführen um den Heiligenschein zu erstellen, wie in @ Moustachs Antwort erwähnt.
rickster 16.12.2014 21:05
quelle
4

EDIT: Whoops, ich mag die Frage falsch verstanden haben ... Ricksters Antwort ist mehr an Ihre Bedürfnisse angepasst.

Glowy 3D ist meine Domäne!

Es gibt einige Möglichkeiten, wie Sie ein Objekt in Scenekit leuchten lassen können.

Am einfachsten ist es, es in GLSL mit SCNTechnique einzurichten. Sie benötigen mehrere Durchgänge, um die Beleuchtung zu rendern und dann nacheinander X und Y (schneller als beide gleichzeitig) zu verwischen. Es gibt einen tollen Artikel darüber auf GPU Gems . Allerdings ist das hier ziemlich schwer, wenn Sie es zu oft benutzen, und ich bin mir nicht ganz sicher, ob Sie die Beleuchtung nur in SCNTechnique ausrichten können.

Der zweite Weg besteht in der Verwendung von CI-Filtern. Fügen Sie einfach einen Gaußschen Weichzeichner hinzu und fügen Sie ihn oben zusammen. Sie benötigen möglicherweise zusätzliche Effekte, um die leuchtenden Elemente auszuwählen / zu verstärken. Wenn Sie nach einem Schein um das Objekt suchen diese Frage könnte Ihnen ebenfalls helfen.

Der dritte Weg besteht darin, das Glühen mithilfe von Werbetafeln zu fälschen. Erstellen Sie eine Schablone in Photoshop oder Ihrer 3D-Software und legen Sie sie auf ein Flugzeug, das immer zur Kamera zeigt. Ändern Sie den Mischmodus auf Bildschirm und Sie haben einen sehr günstigen Schein!

Schließlich sollten Sie für Ihren Licht-Glanz-Effekt in Patenschaften schauen. Sie sind auch mit GLSL ziemlich einfach einzurichten, also sollte SCNTechnique den Trick machen. Hier ist ein Artikel dazu.

    
Moustach 16.12.2014 21:15
quelle

Tags und Links