3D-Illusion einer 2D-Planetentextur


10

Vor einigen Jahren habe ich eine Technik gehört, die dem Benutzer die Illusion eines rotierenden Planeten vermittelt, indem er eine 2D-Textur verwendet. Vorausgesetzt, der Benutzer kann seine Position oder sein Ansichtsfenster nicht ändern.

Wie heißt diese Technik?

Antworten:


25

OK, ich glaube, ich habe jetzt den Repräsentanten. Inhalt des vorherigen Beitrags mit eingebetteten Bildern. Ist dies der rotierende Planeteneffekt, den Sie suchen? Es ist einfach ein scrollendes 2D-Bild, das durch ein halbtransparentes "Loch" im Sternfeld betrachtet wird.

Ich habe ein kurzes animiertes GIF zusammengestellt, wie der Effekt aussehen würde. Natürlich könnte es viel flüssiger animiert werden - ich habe die Planetenoberfläche um 4 Pixel pro Bild verschoben. Es ist auch nicht so eingestellt, dass das Bild umbrochen wird, sodass am Ende der Schleife ein Fehler auftritt.

Planet http://www.perludus.com/orbit.gif

Ich habe das alles in Photoshop gemacht, aber das Konzept sollte in einer 2D-Rendering-Umgebung funktionieren, in der Sie Alpha-Transparenzen usw. erstellen können. Hier eine Reihe von Screenshots, die den Prozess zeigen ...

  1. Erstellen Sie einen leeren Sternhintergrund und schneiden Sie ein rundes Loch hinein.
    Alt-Text
  2. Finden Sie eine grau schattierte Kugel für Ihren Planeten, wie diese
    Alt-Text
  3. Hier sind unsere Sterne mit Loch und der schattierten Kugel oben, halbtransparent
    Alt-Text
  4. Machen Sie einen blauen Kreis von der Größe des Lochs und geben Sie ihm einen äußeren blauen Schimmer. Stellen Sie es auch halbtransparent ein. So sieht es mit der schattierten Kugel aus
    Alt-Text
  5. Finden Sie nun eine Planetenoberflächentextur. Ich fand, dass dieser nur "Planetenoberflächentextur" googelte
    Alt-Text
  6. Platzieren Sie die Planetentextur UNTER dem Sternbild mit dem halbtransparenten Loch, um diesen Look zu erhalten
    Alt-Text

Um die Oberfläche Ihres Planeten zu animieren, bewegen Sie einfach die darunter liegende Textur der Planetenoberfläche. Sie müssen klug sein, wenn Sie die Textur verschieben, wenn sie den Rand erreicht, um eine nahtlose und endlose Rotation zu erzielen.

Hoffe das hilft und ist der Effekt, den Sie gesucht haben!

PS Ich habe diesen Artikel über Künstler mit einer ziemlich neuartigen Methode zum Erstellen von Planetentexturen gesehen - ich musste an diese Antwort denken :) http://www.behance.net/gallery/Pan-Planets/9557465


np Henrik. Sobald ich Ihren Beitrag gesehen habe, dachte ich: "Ich wette, ich weiß, was dieser Typ bedeutet." Ich bin mir nicht 100% sicher, aber ich denke, so wurde der rotierende Planeteneffekt in der ursprünglichen Star Trek-TV-Show gemacht.
Tim Holt

Dies war eine großartige Antwort und gab mir eine Idee für ein Spielprojekt, das ich habe. Das nächste Mal, wenn ich Starcraft 2 lade, muss ich sehen, ob es so gemacht wird =)
Bryan Harrington

Fantastische Antwort, tolle Screenshots!
Fehler 454

Dein Bild ist gestorben. Denken Sie, dass Sie es beheben könnten?
Mithical

3

Ich werde raten, was du meinst, und einfach eine Idee rauswerfen, aber es wird sicherlich nicht die "berühmte" Art sein, es zu tun.

alles in 2D

Nimm 2 Texturen. eine deine Landmasse, die andere deine Wolken. Wolken sollten eine übereinstimmende Alpha-Ebene haben, damit Sie sie durchschauen können.

Machen Sie die Texturen kachelbar, das heißt, sie wickeln sich nahtlos ein. Es gibt Programme, die Ihnen dabei helfen, diese oder Tutorials in Photoshop zu erstellen, denen Sie folgen können.

Dann machen Sie schließlich eine Schablonenmaske, die nur ein Kreis ist, so dass Sie tatsächlich durch ein rundes Loch auf Ihre quadratischen Texturen schauen und so die Ecken maskieren.

Jetzt animieren Sie die Texturmatrizen der Land- und Wolkentexturen, um sie zu bewegen. Lassen Sie sie sich in verschiedene Richtungen und Geschwindigkeiten bewegen, und es scheint sich zu drehen. Alles hängt davon ab, wie nahtlos Sie Ihre Texturen erstellt haben.


2

Ich denke, dieser Artikel beschreibt die Technik. (Es ist auf Russisch, also poste ich einen übersetzten Link.)

https://translate.googleusercontent.com/translate_c?

Ich habe es hier implementiert. http://github.com/meric/renderplanet

Grundsätzlich nehmen Sie ein Bild auf, das die orthografische Projektion ( http://mathworld.wolfram.com/OrthographicProjection.html ) codiert, und wickeln Ihre Planeten- und Wolkentextur mit einem Shader darum. Versetzen Sie die Planetentextur gemäß dt, damit sie sich dreht. Verwenden Sie ein vorbereitetes durchscheinendes Bild für den Atmosphärenring und den Schatten oder erzeugen Sie es, indem Sie durchscheinende Bögen zeichnen und mit dem Shader für den Schatten experimentieren.

Hier ist das Bild:

orthographisch

Für jedes Pixel innerhalb des Kreises Red + Green/255wird die X-Koordinate der zu suchenden Planeten- / Wolkentextur Blue + Alpha/255normalisiert und die Y-Koordinate normalisiert.

Hier ist das Ergebnis:

Stichprobe

Die Planeten- und Wolkentexturen sollten in gleichwinkliger Projektion sein.


1

Ihre Frage zu den Einschränkungen des Kontexts, in dem Sie arbeiten, ist unklar. Die überwiegende Mehrheit der Texturen beim 3D-Rendering ist 2D. Wenn Sie also nur eine 3D-Kugel mit einer darauf abgebildeten 2D-Oberflächentextur anzeigen, ist dies kein wirkliches Problem. Wenn Sie kein 3D-Rendering verwenden können, müssen Sie genau angeben, was Sie verwenden können.

Das Grundproblem ist, dass Sie eine flache Textur über die Oberfläche einer Kugel rendern müssen, die Sie beim 3D-Rendering kostenlos erhalten. Während sich der Planet dreht, werden die sichtbaren Teile der Planetenoberfläche nicht linear animiert (die äquatorialen Teile der Textur bewegen sich schneller als die Pole). Ich denke also, dass Sie entweder das Bild selbst verzerren müssen, während Sie es über die Disc abbilden, oder Sie tun, wie von VirtualVoid vorgeschlagen, und einfach mehrere Bilder haben, zwischen denen Sie im Laufe der Zeit wechseln.

Es wäre schrecklich zu implementieren, aber wenn Sie in der Lage sind, die Textur Pixel für Pixel zu rendern, können Sie die Rasterisierungsberechnungen für jede Linie der Kugel im Grunde separat durchführen. Nehmen wir an, dass Ihre Oberflächenkartentextur abgeflacht ist, sodass am Äquator 512 Pixel Bild vorhanden sind. Nehmen wir außerdem an, dass Ihre sichtbare Disc 256 Pixel breit ist. Stellen Sie sich nun jede Zeile der gerenderten Disc als Schiebefenster auf der Oberflächentextur vor. Am Äquator beträgt das Fenster 50% der Texturbreite, und Sie kopieren einfach jedes der 256 Pixel auf das entsprechende Pixel auf der Disc. Die nächste Zeile auf der Disc ist etwas kleiner als 256 Pixel, aber aufgrund der verzerrten Oberflächenkarte sind immer noch 256 Pixel der eingegebenen Oberflächenkartendaten vorhanden. Anschließend werden die Daten der Eingabeoberflächenkarte unterabgetastet und das resultierende Pixel gerendert. Für einfache Mathematik lassen Sie ' s nehmen an, dass 1/3 des Weges zwischen Äquator und Pol in der Ausgangsscheibe 128px breit ist. Jedes dieser 128 Pixel ist also der Durchschnitt von 2 benachbarten Pixeln. Wenn Sie zum Pol gelangen, werden Sie alle 256 Pixel in nur wenigen Ausgangspixeln mitteln.

Sie können es auch andersherum tun und die Linien in der Quelltextur unterschiedlich lang sein lassen. Während die Zeile mit den Quelldaten 512 Pixel enthält, hat die Zeile 1/3 des Weges nach unten nur 256 Pixel und die Zeile unten nur wenige Pixel. Jede Linie ist jedoch doppelt so breit wie die Scheibe an der entsprechenden y-Koordinate. Eine solche Textur wäre allerdings absolut schrecklich zu erstellen. Und würde wahrscheinlich unter schrecklichen Aliasing-Problemen leiden.

In beiden Fällen erhöht Ihre Animation einfach das Startpixel x in der Eingabetextur und umschließt den Anfang der Eingabetexturzeile.

Je mehr ich jetzt darüber schreibe, desto mehr bin ich davon überzeugt, dass es eine schreckliche Idee ist, die Sie nur umsetzen würden, wenn Sie wirklich absolut keine anderen Möglichkeiten hätten. Und Sie müssten sich in einer sehr ungewöhnlichen Situation befinden, um keine andere Wahl zu haben.

Ich glaube nicht, dass ich von Lösungen für dieses (eher vage) Problem als eine bestimmte benannte Technik gehört habe.


0

Sprites. Es hört sich so an, als ob Sie ein 2D-Sprite in einer 3D-Spiel-Engine beschreiben, das billig gerendert werden kann (der Nintendo64 hat dies überall getan, ebenso wie viele frühe 3D-Engines).

Wenn Sie einen Planeten rotieren lassen möchten, müssen Sie nur ein 2D-Sprite anzeigen, das basierend auf einem Sprite-Blatt animiert wurde, das eine vorgerenderte Planetenrotation war. Genau wie zum Beispiel ein animiertes .GIF. Das Problem ist, dass es vorgerendert wird. Wie Sie sagten, funktioniert dies nur, wenn der Benutzer den Blickwinkel nicht ändern darf.

http://en.wikipedia.org/wiki/Sprite_(computer_graphics )


0

Dies kann nur eine einfache Animation sein, bei der eine Textur mit mehreren Frames verwendet wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.