Showing posts with label plan. Show all posts
Showing posts with label plan. Show all posts

Sunday, 30 April 2017

This Island Apparance

The Story So Far

Exactly one year ago Lionhead Studios closed its doors.  Whilst a sad occasion, this set many people on journeys of opportunity, branching out, putting ideas into action, and creating new things of their own.  For me this was the chance to fully apply myself to fleshing out Apparance.  I knew that I wouldn't have time to finish a game built around it nor would I reach the point of self-sustainability, but there were several key things I could achieve during that time.  First I needed to finish proving some of the core technical premises (predominantly around detail management and scale), I wanted to build a showcase technical demonstration, and also I wanted to collect together all sorts of information about the project into a web-site.  Ten-or-so months later and I have pretty-much achieved this and it's time to take stock of the situation, get it out there, get some feedback, and decide on the next step.


Hobby Mode

It's a lofty goal to build a complete, standalone game engine, especially when there are many off-the-shelf ones available.  There was always a justification for this though in the unique approaches needed to support the various goals; entirely procedural assets, runtime generation, wide detail ranges, visual editing, etc.  Unfortunately financial pressures aren't kind to this sort of academic adventuring and it's not something I can sustain any longer full-time.  I'm now back in paid employment (contracting) so we can pay the bills, which reverts me once more to spare-time development, or 'hobby mode'.
I originally spent a long time in this state, gradually digging away at the project, so I need to adopt a very deliberate and careful route forward as before.  I found being constrained by time focusses your development effort a lot.  Any work has to be the most useful work possible to move the project forward, any detours, diversions, or misjudgements are costly.

This Island Apparance

Given the all-encompassing goals and experimental nature of the project it isn't surprising this has led to an isolated system.  Whilst this has kept dependencies low and the necessary control over the architecture high, it is costly to develop.  I have built an island paradise of procedural generation, rich with potential and enticing to others in an idealistic way.  However, the practical consequence of this is that it is a lot to ask of people to set sail towards for its fertile shores.  To encourage a community to settle around Apparance (and stretch this metaphor further), I really need to build bridges to other more established lands.

Building Bridges

There are several obvious places I could reach out to, each with their own advocates to entice, and communities to tap into.  These are:
  • Commercial engines (Unity, Unreal, …)
  • Assorted 3rd party engines and projects (Irrlicht, OGRE…)
  • Independent developers with own engines
Targeting Unity or Unreal would connect with a lot of people as these are very popular platforms for building games.  Integration into other engines or code-bases would involve similar work and allow anyone to 'bolt on' procedural generation to their project.  The more fully formed and proven game engines are attractive because they can provide the missing parts of Apparance and make it a viable procedural generation platform sooner.
I've long doubted how well 'conventional' game engines would support the novel requirements of Apparance, but over the last month or so I've been thinking about the reality of this.  Rather than just seeing the major objections and sticking points as blockers, I've been trying to consider it as just another set of technical problems that need solving.  I'm sure there are compromises that need to be made, and changes to the way some of the Apparance systems work, but I think there is still a lot of value in attempting this.  Some important opportunities include:
  • Accessibility - proc-gen tools for people within a familiar engine and tool-set
  • Exposure - an opportunity to raise the profile of the project among developers
  • Commercial viability - potentially an opportunity to generate some revenue
  • Modularisation - a useful exercise in tidying up the code-base
  • Expansion - groundwork will make it far easier to then port to other engines
  • Acceleration - This could be a good way to get my first game built more quickly

Where To Start

My personal experience with third-party engines is by far strongest with Unreal, in fact quite a lot of the time I spent building foliage tools for Fable Legends I was working in exactly the areas of the engine I would need to work to incorporate Apparance into it.  Unreal also has a liberal developer model, making all the source code easily accessible.  It makes sense then for this to be my starting point and where I should focus my efforts next.

Requirements

To create a professional grade integration with Unreal it's important to consider the workflow and user experience of a developer wanting to use procedural techniques.  I would like to consider the following scenarios:
  • Taking a few pre-made procedural assets a dropping them into your game.
  • Building game worlds from lots of pre-made and custom procedural assets.
  • Using procedural assets to create large parts of game environment.
  • Using procedural techniques to place conventional assets.
  • Creating massive continuous expanses of procedural game world.
This means quite a thorough integration is needed to play to both systems strengths.  I will look into this more in a future post.

Sunday, 26 February 2017

Project Progress Report

Sorry for the lull, it's been a bit of a mixed-up month and this will be a similarly mixed up blog post.  Having reached the deadline for demo, web site, and release preparations at the end January things have changed pace and direction a little.  I've rolled an Alpha build to a few people, the web-site has gone live, and I've been out job hunting too!

Goals

The end of January was my deadline for a number of aspects of the project, and this has meant February has been a bit of a flurry of activity releasing things and talking to lots of people about the project (and work prospects).

Demo

As with most things, you never get as much done as you'd like to.  No exception with Future City, but I am mostly happy with how it looks.  It demonstrates the core premises of the project; large environments, varied content, wide-scale parameterisation, high detail, smooth blending, and powerful modelling system.
I'm pleased with how the demo "Future City" has developed
I will continue to develop the city as there are many things I'd like to do with it, but it is also going to be the basis for the first Apparance game.  It will be taking a back seat to other development for now though.

Web Site

The Apparance website, bringing together information about all aspects of the project, is now live at www.apparance.uk.

The new Apparance web-site (procedurally generated too!)

I'm pleased with how it's come out, and the procedural generation aspect is proving very powerful.  A good test of this sort of thing is how easy you find maintenance on returning to it after a while away.  I've extended the site a bit, added new templates and image features with ease.  Updating content is just a question of editing the markdown documents and running the Apparance Processor.  I'm enjoying working with it this way, and looking forward to adding new pages and features as needed.

Release

The 1st of February saw the start of the Alpha release of the project.  The first time anyone has got their hands on Apparance for a couple of years.  It's really been too long coming, but I wanted to get to a particular point and combine it with the website and the city demo.
Apparance editor, currently in (closed) Alpha
It's not a huge audience, and only some of my more technical friends, but I've been getting some solid feedback.  Plenty to go on and lots to talk about.  I've been working a bit of it back into the editor, and site, ready for the closed beta due to start in a few days.  The beta is a larger group, and taken from a wider circle of acquaintances (mostly via Twitter).  This group contains a higher concentration of people who are specifically interested in procedural generation, and should provide a deeper level of feedback.  I can't wait to hear how you folks get on.

Project

So, where does this find us now?

Status

The current set of goals, largely based around proving the more unique aspects of the project, has been proven (in my eyes at least).  Now I have people starting to experiment with, and explore the tools I have a source of objective information to use to potentially steer and drive the project.  I'd like to see a variety of outcomes from the project, but now is time to discuss these and investigate the options.

Support

As an authoring tool, and one with some pretty unusual concepts to learn, support for Apparance users is going to be important at this stage.  This is especially true if I want to nurture a community and have people join me in this adventure.  Documentation, tutorials, and two-way communication are all important parts of this, and typically under provided so I need to be careful to keep feeding this.  I've been asked for a variety of support, from examples, tutorials, videos, features, and improved documentation.

Games

Apparance is a realisation of my vision for building games, and as such needs to continue to move towards an actual game.  I need to show that this is viable, and with the ambitious technical goals too.  I have some exciting game ideas brewing at the moment (several sleepless nights spent designing game-play and story).  Unfortunately, the next step with regard to games (entities, behaviours, and interaction) is quite a hefty piece of work.  This is going to need to be spread out.

Product

I have also begun thinking about the more practical aspects of the project, and other ways the technology could be used.  By creating additional types of product out of the engine and tools it might provide a way to broaden the potential audience (and hence market) and provide a model to generate revenue that isn't game based.  Yes, I am actually considering how Apparance could be modularised so that elements of the technology could be plugged or integrated into other engines, including Unity and Unreal.  I know I haven't been supportive of this approach, but economic pressures do make you think about your options, and there might be ways to do this without compromising the vision of the project.  Again though, this isn't an insignificant amount of work, and requiring a lot of research and ongoing development and then support.

Next

I've really enjoyed the luxury of working full-time on Apparance for (nearly) the past year, but financial pressures are starting to rear their head.  I don't believe I am in a position to pitch what I have technology-wise, and certainly not game-wise, to a third party for funding.  There is too much still to do and I don't have the resources to continue full-time.  As a result I am in the process of negotiating a more traditional source of income so I can continue to support my family properly.
Apparance is most definitely up and running and I'm pleased with what I have achieved so far.  I will continue to support the alpha/beta, blog about the project, work on updates, and start on some of the bigger features over the coming months, but in my spare time (again).
Thank-you for sailing with me through this exciting year of Apparance development.  I look forward to seeing where the wind blows us over the next year.
Sam

Sunday, 14 August 2016

The Demo Plan

Milestones

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.

Decision

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:

Inspiration

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

Features

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 :)