Ich hatte vor kurzem mal mit den Rohdaten einer Insta-360-Kamera zu tun. Das fand ich sehr interessant. Da gibt es das .insp-Dateiformat für 360-Grad-Bilder und das .insv-Dateiformat für 360-Grad-Videos. Man kann den Bild-Dateityp einfach von .insp in .jpg beziehungsweise bei Videos von .insv in .mp4 ändern und so mit Standardsoftware betrachten.
Dann sieht man zwei nebeneinander liegende Fischaugen-Aufnahmen, welche jeweils 180 Grad und zusammen eine vollständige Kugel abdecken. Ähnliche Aufnahmen hatte ich 2021 auf dem Weihnachtsmarkt Erfurt gemacht. Da verwendete ich allerdings ein Stativ, Belichtungszeiten bis 30 Sekunden und deckte mit meinem Objektiv nur ca. 170 Grad ab.
Ein künstliches 360-Grad-Panorama aus zwei dieser Fischaugenlinsen-Aufnahmen würde verschiedene Orte Erfurts wie ein Portal miteinander verbinden. Wie das wohl aussehen würde?
Als erstes setzte ich zwei quadratisch zurecht geschnittene Aufnahmen mit Photoshop nebeneinander. Das neue Bild hatte so das Seitenverhältnis 2 zu 1:
Dieses .jpg öffnete ich in Insta 360 Studio. Natürlich fehlten die Metadaten einer richtigen Insta-360-Kamera und so konnte das Programm nichts sinnvolles damit tun (auch nicht, wenn man die Dateiendung zu .insp ändert).
Dann ging ich raus und genoss erstmal den Sonntagnachmittag im Park und überlegte, wie ich diese Umwandlung in ein rechteckiges Panorama zumindest für ein Standbild selbst machen kann.
Da erinnerte ich mich an meine »alten« Zeiten mit dem scriptbasierten und kostenlosen Raytracer POV-Ray und dessen Möglichkeiten, per Code Kamera, Licht und Objekte anhand einiger Parameter zu definieren und dabei mit beliebigen Auflösungen zu hantieren. Perfekt!
Die Szene besteht am Ende aus einer Hohlkugel mit Radius 1 und dem Mittelpunkt im Koordinatenursprung <0,0,0>, die senkrecht in zwei Hälften geteilt wird so dass eine linke und eine rechte Kugelschale entsteht. Das Input-Bild wird von links und von rechts auf die jeweilige Kugelschale planar gemappt und selbst leuchtend eingestellt, damit die Pixelfarben vom Input-Bild übernommen werden. In die Mitte dieser geteilten Kugel kommt eine Panoramakamera, die dann alles um sich herum als equirechteckiges Bild aufnimmt. Der Raytracer erzeugt damit das Ergebnis-Bild.
Der POV-Ray-Code sieht so aus:
#version 3.7;
global_settings {
assumed_gamma 1.0
max_trace_level 12
}
/* PARAMETER */
#declare src_img = "fisheye-360-test.jpg"; // Das Bild mit den zwei Fischaugenbildern nebeneinander
#declare input_img = pigment {
image_map { // Bitmap-Textur laden
jpeg src_img // das Inputbild ist in XY-Ebene von <0,0> bis <1,1> gekachelt
scale <4,2,2> // 4x so breit und 2x so hoch zoomen
}
}
#declare factor = 1.02; // Anpassung wenn Fischauge < 180 Grad umfasst
/* OBJEKTE */
union { // Gruppe von Objekten
sphere { <0,0,0>, 1 // Kugelmitte im Koordinatenursprung <0,0,0>, Radius 1
inverse // Flächen umkehren
clipped_by { // abschneiden mit senkrechter Ebene
plane { x,0 } // und dabei LINKE Hälfte stehen lassen
}
texture { // Textur definieren
pigment { // Farbeigenschaften
input_img // das Inputbild ist in XY-Ebene von 0,0 bis 1,1 gekachelt
translate <-1,-1,0> // verschieben: Mitte LINKES Fischauge auf Kugelmitte
rotate -y*90 // um die Senkrechte 90 Grad GEGEN die Uhr drehen
scale factor // ggf. geringe Größenanpassungen
}
finish { // Oberflächeneigenschaften
ambient 1.0 // Umgebungslicht auf 100%, Farben sind wie Inputbild
}
}
}
sphere { <0,0,0>, 1 // Kugelmitte im Koordinatenursprung <0,0,0>, Radius 1
inverse // Flächen umkehren
clipped_by { // abschneiden mit senkrechter Ebene
plane { -x,0 } // und dabei RECHTE Hälfte stehen lassen
}
texture { // Textur definieren
pigment { // Farbeigenschaften
input_img // das Inputbild ist in XY-Ebene von 0,0 bis 1,1 gekachelt
translate <-3,-1,0> // verschieben: Mitte RECHTES Fischauge auf Kugelmitte
rotate y*90 // um die Senkrechte 90 Grad IM die Uhr drehen
scale factor // ggf. geringe Größenanpassungen
}
finish {
ambient 1.0 // Umgebungslicht auf 100%, Farben sind wie Inputbild
}
}
}
// rotate y*90
}
/* KAMERADEFINITION */
camera {
spherical // Kugelkamera, die equirechteckige Bilder erzeugt
location 0 // Position ist genau Kugelmitte
look_at z // schaut in die Tiefe
angle 360 // Horizontal 360 Grad
180 // Vertikal 180 Grad
}
Das Ergebnis können Sie rechts im 360-Grad-Widget von Essential Addons für Elementor betrachten und sehen wie es sich aussieht, wenn man sich an zwei Orten gleichzeitig befindet.
Fazit:
Mit über 30 Sekunden Belichtungszeit mit Fischaugen-Objektiv und Stativ und Bearbeitung des Bildmaterials mit einem gescripteten Raytracer ist es eher die Slow-360-Variante und eher wenig für das Bildmaterial aus einer nativen 360-Grad-Panoramakamera geeignet. Allerdings bietet das Verfahren über POV-Ray eine gewisse kreative Freiheit.
Wenn es passt ziehe ich nochmal mit Fischaugenobjektiv und Stativ los und berücksichtige dann bei den Aufnahmen jeweils eine Drehung um 180 Grad, um einen vollen Kreis anzudecken. Mal sehen, wie gut sich das dann zusammensetzen lässt.