Who am I? My background/training
Hey everyone, I’m Brendan Sullivan (better known as Sully!) and I’m a pixel artist / 3D generalist from Australia! I’ve always been super into low-poly since my college days (I did a 2-year game art course at the Academy of Interactive Entertainment (AIE) in Sydney) and picked up pixel art as a hobby shortly after graduating. Since about a year ago I’ve been experimenting with combining those two styles into something I think is pretty unique! I’ve been doing freelance for a while now since graduating and just recently got picked up by the Oddtales team who are working on the upcoming XBO/PC/Mac title ‘The Last Night’ who thought my style would mesh well with what they have going on! Thus I created this cyberpunk taxi model in an attempt to match their art direction as a fun little test for myself!
Model inspiration/reference
The asset I chose to create was a taxi from The Last Night’s E3 reveal trailer (which you can see here). The vehicle was only shown for a brief period at the end of the video and only provided clear front and ¾ side angle views. Additionally it was also primarily just flat coloured yellow with some shadows so I had to get pretty creative with how I wanted to detail the model so it would be appealing in 3D.
I managed to dig through some of The Last Night’s dev-material as well and find some of the original 2D concepts which provided slightly higher resolution reference!
On top of those resources I also went through Blade Runner for some tail light reference (since there was no rear-view of the taxi in the trailer) and general ‘cyberpunk’ aesthetics.
The modelling process/grid setup
My workflow all revolves around setting up my grid in Maya (my 3D software of choice). I model to the grid as if each unit is equal to 1 pixel on the final model. For example if I’m going to have a model that has a 40px wide texture on the front, the model will be 40 units wide in the 3D space. By using this method for all the models I make I also guarantee the texel density / scaling of my models will always match!
This being said, I estimated how much detail I wanted to put into the pixel art texture of the front/side/height to figure out the dimensions of my taxi and then began box modelling! Sticking closely to my grid, it took a few tries to get the model close enough to my reference material (and A LOT of replays of the same 3 second GIF file!) but eventually I was happy with the model and ready to start UVing!
UVs/Texturing
First thing with UVing was to set up my grid in the UV editor to make sure it matched my world space grid, then I was ready to go! Thankfully with this model a lot of the UVing was easily accomplished with a lot of basic xyz planar maps and just required a little bit of polish and tweaking to get them pixel perfect. I used a template texture to match the grid while I worked so I could see if there was any stretching or distortion.
Maya’s ‘Match UVs to Grid’ tool is super helpful with getting everything nice and neat without having to manually adjust each UV!
Once the UVs were all set up I opened up PyxelEdit (my pixel art editor of choice) and began filling in chunks of texture at a time, starting with the base yellow and then adding shading etc. etc. – just a lot of typical pixel art work!
Often you can get away with just using solid chunks of colour on the underside of the meshes (or just delete the faces entirely) since no one will ever see them but with a floating taxi, well… I had to go that extra mile to put in detail in case someone took a peek underneath! I actually had a tonne of fun detailing all the pipes and adding small details. The addition of another plane of pipes laying over the base really gave it that extra bit of depth as well!
Setting up the animation + FX
One of the selling features of this asset I wanted to recreate from the trailer was the super crisp reflections going across the windows. Eventually if this ends up in-engine I’d like to have a nice realtime shader that reflects the environment with some sort of pixelated processing, but for the Sketchfab piece I had to do it in a slightly more optimised way.
It’s actually super simple how I achieved the pixel-animated look. I extracted the faces of the rear advertisement and the front/side windows from the main model, then duplicated each 4 times. I then created a separate spritesheet texture with 4 unique textures for each of the windows and adjusted the UVs for each of the duplicates so they used their unique textures.
Then it was just a matter of keyframing their visibility so only one was visible at a time. So on frames 0-5 the first mesh would show and the other 3 would be toggled off. Then on frames 5-10 the second mesh would be visible and the other 3 would be turned off. Rinse and repeat for all the other windows and bam – pixel animated textures!
The rain was also a pretty basic thing to create. I set up a few planes at different angles so it would be visible from all viewing angles, then animated them falling straight down. I then duplicated that set of planes and had them follow the same downward motion, but starting from above the first set. When the first set hit the bottom I had it then snap up the starting position of the second set. The second set would at that point be falling down from the original position of the first set so in effect the two sets were basically just swapping positions!
Then I just added some rotation to the roof lights, a bit of light flickering for the headlights, some rain splashes that were just some planes toggling on and off, and some basic up-down / side-to-side motion for the taxi itself to give the illusion of it soaring through a rainy cityscape!
Sketchfab Implementation
I really built this model to suit the Sketchfab viewer, with the animated texture setup and all, and the extra post-processing features of some bloom / sharpness really helped set the whole mood for the piece. Adjusting the exposure of the bloom so that just the white lights would shine brightly made a surprisingly large impact. Honestly the viewer editor as a whole is super solid and I had the final piece all uploaded and put together in no time – it was also what I used to render the final GIF presentation! Super appreciative of the entire Sketchfab team for creating such a polished, professional environment to showcase 3D art like this, and for giving me the opportunity to share my own creative efforts in this art spotlight! Hope you guys enjoyed reading!
https://sketchfab.com/models/b1118c19e1c9429491cd6a3e18817f55