I took a weekend to experiment with a photoreal rendering of a default CityEngine city. I wanted to see how far I could push the scene without investing time in modeling and surfacing.

I’ll focus first on my experience with CityEngine and the technical aspects of the project and then the latter half will be a self-reflection on how the project went artistically and how I feel I could improve. This is my second postmortem on this blog. The Unreal Engine Sequencer Weekend Challenge Postmortem was entirely technical in nature, but I’m enjoying these projects and I think I should work on growing artistically too. If anyone has any feedback or suggestions to help me improve, I would also really appreciate it.

CityEngine#

For those not familiar with CityEngine, it’s a standalone app used by the VFX and GIS industries to procedurally generate real-world and fictional cities. It’s been used to create cities like those found in Zootopia and Netflix’s The Witcher.

I want to make it clear that I set out to just use a default-generated CityEngine city with stock textures and very little cleanup and see how far I could push it. I don’t have too much experience with CityEngine yet. My process with CityEngine this time around was unashamedly along the lines of clicking a “Make City” button and exporting it to Blender. I wanted to set out and answer the question, “How can this tool serve me artistically without investing a lot of time learning it?” You can do a lot more by writing custom scripts, providing your own component assets, and art directing the results within CityEngine. There’s no doubt to me that CityEngine provides tremendous value and it’s a tool that I would want to invest more time in.

The CityEngine Process#

  1. I created a project using the default, international city template
  2. Clicked the button to generate the city models
  3. Exported to glTF

CityEngine provides a ton of file formats to choose from (FBX, Alembic, USD, etc.), but I chose glTF because that gave me starting Principaled BSDF materials for the buildings in Blender. I just ran into one bug that sets the blend mode for the materials to “Alpha Blend” which results in some weird transparency blending issues in the viewport in “Material Preview” viewport mode and Eevee. I mostly worked with “Solid” and “Rendered” viewport modes and was fine ignoring it.

Pros#

  1. Zero modeling
  2. Zero texturing
  3. I got something really cool out of CityEngine without investing much time
  4. Natural-looking dense city center and smaller buildings on the outskirts.
  5. For a set that is completely procedurally-generated there’s a lot of realism and character to pull out of it: the waterfront commercial businesses, the hilltop residential buildings, and the large park area.
  6. Seamless transfer from CityEngine to DCC
  7. CityEngine can export buildings using the same color map as one material so I could tweak multiple buildings all at once.

Cons#

  1. The building textures and geometry detail work well for mid to long shots and digimatte, but won’t hold up for close shots. You’ll need hero assets for that.
  2. A few building textures had reflections or shadows baked in that I just couldn’t work with.
  3. It’s great to get city streets and sidewalks automatically generated, but the algorithm suffers on some curved roads producing variation in width and sharp corners that couldn’t be subdivided and were difficult to iron out.

Art#

This is my first time in many years that I’ve challenged myself artistically and the first time since college that I’ve attempted a photoreal CGI project. I’ve always been more technical than artistic. There’s still a lot of room for growth and I want to continue growing artistically so I hope I have a chance to do more projects like this one.

What Went Well?#

  1. CityEngine provided an original set that allowed me to focus more and learn shading and rendering with Cycles.
  2. Software and hardware has changed a lot in 10 years and that alone has made this leaps and bounds better than my projects from college with faster iterations to experiment more.
  3. Dylan Neill’s Create Large Oceans In Blender helped show me how to use the Ocean Modifier without the large expense.
  4. Creating procedural roughness maps and bump maps from the color maps helped add a lot of realism with window reflections and surface details without being too time-consuming.
  5. The mist pass helped bridge the foreground CG elements to the backplate.
  6. The glare also added a layer in front of the buildings to make it all feel more cohesive.

What Could Be Improved?#

There are a lot of basic steps I could have added, but I just ran out of time. I’ll need to spend more time than just a weekend on my next project to improve.

  1. I should have used art references. This started out as a technical test and I didn’t use any reference at all.
  2. I wanted to experiment a bit with depth of field. I didn’t use any here.
  3. I’d like to use lens distortion next time.
  4. I wanted to spend more time experimenting with tone-mapping and exposure.
  5. I’d like to add a little more motion in the water. It looked fine with a static camera, but with the animated camera, it feels more static now.
  6. Some flat parts of the water are maybe too flat and glass-like.
  7. The sharp corners on the waterfront streets.
  8. More detail on the waterfront buildings.
  9. Cars, street lights, and other set dressing would make the city feel more alive.
  10. I could have maybe turned up the mist pass a bit more
  11. Parts of the city feel too clean

Conclusion#

Overall, it was a great experience and I would like to invest more time in learning CityEngine to produce more detailed and art directed results. I’d be interested in trying a more iterative workflow between CityEngine and Blender to see if I can still make modeling and layout changes in CityEngine while preserving surfacing work that I might have already started in Blender.