GIS Car Crashes
This maps vehicle crashes in Portland, the data represents years 2007 through 2021. THe project was completed in Houdini and implements depth first search and custom importers.
For improved I/O a custom GEO_IOTranslator was written to read data from the Portland Metro RLIS and OpenData sources. For simplicity this plugin had no external dependencies and was eventually re-written to have support for the rest of the geoJSON specification. Resulting speeds were 3-4x greater than alternative python I/O that had less functionality.
One problem with visualizing GIS data in a polygon based software is the ability to render "holes". Typical GIS software renders without the triangulation typically used in film and games. To represent holes, they often use ordered and nested arrays to represent internal holes. For example the outer shape of a continent is defined by an array of points that are ordered in the same way you would have points of a polygon, this is called a "Ring". After this first ring is defined subsequent rings will be drawn as holes. Of course this is not possible with polygons without a lot of extra work searching for bridge points, luckily you can cast the GEO_Detail to a GU_Detail which is a safe operation and use the GU_Detail.buildHoles() function which does all this for you. An important thing to note is that this is a very expensive operation. In order to optimize it but retain simplicity I do two passes of the geometry, in the first pass only building polygons with holes and calling buildHoles() and in the second pass building everything else.
The incoming crash data was only crash locations, so to create an animation depth first search was used to extract artificial paths based on a given length. This was done on a polyline graph of street networks and the primitives to travel along were stored in an array before being fed into a solver which is where animation took place. This made creating trails easy because the primitive array was already stored.