Sunday 14 August 2016

The Demo Plan


I've reached the point where the technology needs a decent sized scene to stretch and test the features and it is also time to start working towards something stand-alone to show off the technology to the world.
The development of Apparance is an on-going timeline of features for which the term 'finished' has no real meaning.  I need milestones though, points along the way to take stock, gather what we have learned/achieved, and show it off properly.  To this ends I have had a 'Demo #1' entry in my planner for a while, which we have now reached.
We are now at Demo #1

Playing To Your Strengths

During my recent time off I decided to apply my thoughts to what form this demo project will take, what I hope to achieve, what technical adjustments, improvements, and indeed features it will need.  I spent some time thinking about the look and the style of the demo, as well as all the assets, effects, shaders, procedures, and techniques I will need to build it.
As a developing technology, the demo must play to the strengths of the engine, showing them off, whilst avoiding missing or weak areas.  I'd loosely list the key features (or lack thereof), and some of their implications, like this:
  • Variable detail levels
    • Distant and close objects (requires a large world)
    • Get more detailed as you approach (show off detail blending)
    • Large scale objects (show off dynamic range)
  • Small set of primitives
    • Basic surface shapes, e.g. cube, cylinder, sphere
    • Angular objects and structures will be easiest to produce.
    • May need to implement a few new ones
  • Frame based space sub-division
    • No support for polygon outlines/regions/sub-div yet.
    • Rectangular layout of world, e.g. regular rooms only, lots of right angles
  • Procedural generation/parameterisation
    • Scene can be unique per view (shows off dynamic nature of engine)
    • Could incorporate external input (shows off dynamic nature again)
    • Huge variety of content needs to be shown (shows off parameterisation)
  • Scalability
    • Need a lot to explore/see (scene needs to be large)
    • View needs to move round the scene.
  • No texture support yet
    • Flat surfaces for most of the world
    • Have to use geometry to add surface detail (plays to engine strength)
    • Pixel shader based surface detail can be used
  • No shadow support yet
    • Harsh lighting will show this up badly.
    • A 'light and airy' scene would work best.
  • No lighting support yet
    • This is going to limit what will look good a lot.
    • I'd like to explore static lighting techniques for local lighting effects (this would open up all sorts of possibilities and potentially be less work than a proper dynamic lighting system)
  • No AI or scripting yet
    • Will need to be a non-interactive experience.
    • Need to hard code some temporary fly-through logic (needs to be dynamic to support variety of scenes)
    • Will perhaps make a good screen-saver?
  • No transparency yet
    • I'd really like to get this in as glass allows transitions into interiors (showing off detail levels attainable)
    • Combined with pixel shader effects this would also allow simple water features to be added to the scene.
    • Implies a level of reflectivity though so would need to think about how much to support this (probably just single general cube-map reflection or specular rather than captured or true reflection.  May need basic texture support.)
  • No fog support yet
    • This will be needed to add depth to the scene, but is largely a shader based effect so something we can add relatively easily.
  • Sky box
    • Not really a technology feature as this can be implemented as geometry or shaders.
    • Sun/moon can be shader generated to represent major light source direction.


Given all this, combined with my love of science fiction, I decided that a utopian science-fiction city would be a good choice of subject.  It is something that aligns with the limitations above:
  • Regular (buildings are often angular and regular)
  • Large scale (from skyscrapers to industrial zones to residential to space ports, all can be large and small)
  • Bright (the utopian aesthetic lends itself well to shadow-less implementation)
  • Roads (whilst roads are a nice feature of a city, I fancied avoiding them and making the building interconnections more futuristic, for pedestrians or flying vehicles)
  • Surfaces (futuristic, high-tech structures are likely to be clean and smooth, the need for texturing reduced)
  • Transparency (glass facades and water features really say 'futuristic' and 'utopia' to me)
  • Shaders (general shader support would allow all sorts of polish like fog/sky/sun to be added as well as some simple water surface effects and procedural texturing)
Cities are popular choice when showing off procedural techniques and there are several sources of inspiration that have led me here, these are described below:


It's worth drawing attention to two significant city based works of procedural generation that really excite me:
Pixel City
I fell in love with Pixel City the moment I saw it.  A brilliantly executed exercise in procedural generation.  More pictures and information here:

Project Sprawl
Also; There has been some fairly sophisticated procedural modelling tools and tech being built for "Project Sprawl", a cyberpunk role-playing simulation, again an inspiration:

Just searching online for Procedural Cities yields lots of other projects in this vein.  I don't think another one is likely to hurt, and it gives me a good benchmark to aim for.
I've started to collect reference material on a Sci-fi Cities Pinterest page as a 'mood board' and ideas page.
I have previously been using skyscrapers as a test case and thinking about what structural components could appear on them in a traditional large city:
Sketching elements of contemporary skyscrapers
Whilst I was on holiday (sitting in the sun by the pool) I spent some time sketching ideas for more futuristic city elements too.
Sketching elements of a futuristic city
Whilst we were in France we took a day to visit the Futuroscope theme park which was full of examples of all sorts of futuristic buildings, technology, and experiences. It had some really quite interesting landscaping and architecture:
Walkways and water features at Futuroscope
Interesting buildings at Futuroscope
Fantastical architecture at Futuroscope


Some features I'd like to see in the city include:
  • Non-conventional skyscrapers
  • Lots of 'sci-fi' surface detail
  • Open plazas with angular water features
  • Docked spacecraft
  • Multi-level public spaces, stairs
  • Monuments and arenas
  • Glass facades revealing interior spaces
  • Distant mountain ranges
  • Variable time of day/night (static)
  • Lots of technology; aerial masts, industrial complexes
  • Names in lights on buildings
  • Street and window lighting
  • Automatic fly-through for use as screen-saver
  • Manual control for exploration (fly-cam)
Once I have finished working on the detail blending system (for neat transitions between detail levels) I'll start work on the demo.  This is going to be the focus of the blog for a while, although I still want to mix in other things occasionally.  Next post I'll cover what I have to start with, and how I'm going to break down the work.

Audience Participation

As part of 'Future City' demo development I'd like to gather thoughts and ideas from you.  No matter how long ago this was posted, comments are welcome, please contribute ideas in the comments below.  I look forward to your thoughts :)

No comments:

Post a Comment