Dunkelviolett

Produktdesign | UX / UI | 3D | Visual Art

NYCCabs

NYCCabs ist eine 3D-Datenvisualisierung. Prozedural generiert mit der 3D-Grafiksoftware Houdini. Basierend auf realen Daten von der TLC – Taxi & Limousine Commission New York.

Houdini

Houdini ist eine 3D-Grafiksoftware des in Toronto ansässigen Entwicklers SideFX. Es ging Ende der 1990er aus dem Programm PRISMS zur prozeduralen Synthese von 3D-Objekten hervor. Sein Hauptaugenmerk liegt nach wie vor auf der prozeduralen Synthese, womit sich Houdini von anderer 3D-Grafiksoftware abhebt.

Houdini wird hauptsächlich für Spezialeffekte in Filmen und Computerspielen verwendet. Große Studios wie Walt Disney Animation Studios, Pixar, DreamWorks Animation, ILM und weitere haben Houdini u. a. für Fantasia 2000, Die Eiskönigin – Völlig unverfroren, Zoomania oder Rio verwendet.

Houdini ist eine Node-basierte 3D-Grafiksoftware. Es können vorgefertigte Bausteine „Nodes“ mit einander verbunden und parametrisch angepasst werden um Geometrie, Partikel, Flüssigkeiten, Feuer, Rauch, Simulationen, usw. zu erzeugen und zu steuern.  Es können auch eigene Nodes erstellt und gespeichert werden.

Es ist zudem möglich mit hscript, VEX und Python Nodes zu erzeugen und zu manipulieren.

TLC Datensatz

Die Daten der Taxifahrten werden seit 2009 von der TLC erhoben und sind öffentlich zugänglich.

Die Datensätze lassen sich in Form von CSV-Tabellen mit mehreren Millionen! Fahrten pro Monat bequem herunterladen. 
Zusätzlich stellt die TLC ein shp.-Dateiformat zur verfügung. Dies ist ein Geodatenformat(GIS-Datenformat) das die Taxizonen von New York als „Flächen“ beinhaltet.

Prozess

Fahrten

Nach dem ich die CSV-Tabelle der Fahrten der Yellow Cabs von Oktober 2018 heruntergeladen hatte, fiel mir auf das die Datei knapp 800MB groß war und rund 9.000.000 Fahrten beinhaltete! Die CSV der Fahrten der Green Cabs war wesentlich kleiner mit ca. 700.000 Fahrten.

Nach dem ich etwas erschlagen war suchte ich nach Lösungen und stieß im Netz auf ein Python-Skript mit dem es möglich ist CSV-Dateien zu zerteilen. Ich musste es nur leicht anpassen. Mit dem Skript ist es zudem möglich die Anzahl der Zeilen pro Teil zu definieren.

Python-Script

Das Skript exportiere dann knapp 30 CSV-Datei mit jeweils ca. 300.000 Fahrten. Rein rechnerisch sollte jeweils eine CSV einen Tag beinhalten.

OpenRefine

Nach dem die riesige CSV zerteilt war konnte ich einen Tag aussuchen und in OpenRefine weiter bearbeiten. Ich entschied mich für den 15. Oktober. Ich säuberte die Tabelle von korrupten Einträgen und löschte Zeilen und Spalten die ich nicht brauchte. 

Ich entschied mich dazu mit folgenden Spalten weiter zu machen.

Pick Up Time = Uhrzeit Einstieg

Drop Off Time = Uhrzeit Ausstieg

Pick Up Location = Zonen-Id Einstieg

Drop off Location = Zonen-Id Ausstieg

Übrig blieb eine CSV mit 257.602 Fahrten. 

Das selbe musste ich dann noch für die Fahrten der Green Cabs machen.

Zonen

Ich hatte bisher noch nie etwas mit .shp-Datein zu tun gehabt und musste herausfinden wie ich sie öffnen konnten. Nach einer Recherche stieß ich auf die Open-Source-Software QGIS.

QGIS (ehemals Quantum-GIS) ist ein freies Geoinformationssystem zum Betrachten, Bearbeiten, Erfassen und Analysieren von räumlichen Daten.

Mit QGIS lies sich die .shp-Datei problemlos öffnen. Dabei erkannte ich das jede Taxizone mit der entsprechenden Zonen-Id verknüpft war. 

Als nächstes musste ich herausfinden wie ich die .shp-Datei in Houdini geladen bekomme. Bei der Recherche fand ich keine Möglichkeit die Datei direkt in Houdini zu öffnen. Ich fand aber heraus das es ein GIS-Plug-In für Blender gibt. Das lud ich mir dann runter. Ich öffnete die .shp-Datei in Blender und war sehr froh. Die Zonenkarte von New York konnte ich nun im 3D-Raum drehen und wenden.

Die Zonenkarte lag mir nun folgendermaßen vor: 

Die einzelnen Zonen waren nun Polygone mit unterschiedlich vielen Eckpunkten. Jede Zone war so benannt wie die reale Zonen-Id lautet.

Ich exportierte die Zonenkarte in mehreren Versionen – ganz New York und auch als einzelne Viertel(Manhattan, Bronx, Brooklyn, Queens, Staten Island) als Alembic-Datein(.abc).

In Houdini konnte ich dann die Zonenkarte als Alembic-Datei problemlos mit der File-Node öffnen. Die CSV-Datein konnte ich mit der Table-Import-Node laden. Dabei müsste ich definieren welche Spalten ausgelesen werden sollen.

Houdini

Nach dem die Vorbereitungen abgeschlossen waren konnte ich nun endlich zu Houdini übergehen und an der Visualisierung tüfteln. Da dies mein erstes Houdini Projekt war war meine Herangehensweise explorativ. Ich brauchte mehre Anläufe bis ich zu dem Ergebnis kam. Schluss endlich verhalf mir ein ENTAGMA-Tutorial das mir Julian empfohlen hatte. In dem Video visualisieren die Jungs von ENTAGMA Flüge rund um den Globus. Ich konnte viel von dem Tutorial lernen. Danke Julian und ENTAGMA 🙂

Ich verwendete hauptsächlich vorgefertigte Nodes von Houdini. Lediglich das Erzeugen der Fahrten als gekrümmte Splines musste ich mit VEX coden.

Der Houdini-Sketch im Detail:

Diese VEXpression erzeugt die Linien(Bézierkurve) die einen Start- und Zielpunkt verbinden und dadurch eine Taxifahrt zwischen zwei Zonen visualisieren.

Zum Steuern der Krümmung und Höhe der Kurven ist folgende VEXpression nötig. Diese erzeugt ein UI-Element innerhalb von Houdini mit dessen Hilfe es möglich wird die Krümmung und relative Höhe der Kurven händisch anpassen zu können.

Visualisierung

Das Rendern der 3D-Grafiken erfolgte mit der Houdini eigenen Render-Engine Mantra. 

Die folgenden Darstellungen zeigen alle Fahrten des 15.10.2018. Die Fahrten einer Stunde am 15.10.2018. Und alle Fahrten die von oder zu einem der drei Flughäfen gingen.

Die folgenden Renderings fokussieren sich auf die einzelnen Bezirke New Yorks.

Da in Manhattan besonders viele Taxen unterwegs sind, zeigt die Darstellung die Fahrten der Yellow-Cabs auf der Oberseite und die Fahrten der Green-Cabs auf der Unterseite. Es ist deutlich zu erkennen das die Green-Cabs nur im Nördlichen Teil von New York Fahrgäste aufnehmen dürfen.

Als Projektabschluss entwickelte ich ein Audiovisuelles-Format das Animationen, Texte, eine Zeitleiste und eine Legende die als Drop-Down-Menü realisiert wurde.

Weiter Beitrag

Zurück Beitrag

© 2020 Dunkelviolett

Thema von Anders Norén