Variation Safety Valves by Ben Supnik

I fear one of the main points of my last post was perhaps lost in the excited discussion of how to cope with conflicting crowd-sourced airport submissions.
The engineering principle is:
Fix real bugs, not hypothetical bugs.  Solve real problems, not hypothetical problems.

By this I mean: it’s invaluable to wait until you actually have evidence of a problem before you design the solution.  Without a real data point showing what the bug is, the solution might not actually fit the problem as it actually happens.

In a program as complex as X-Plane, particularly when third party content is thrown in, it’s hard to predict in advance what is going to go wrong. In the previous case (coping with conflicts) the key here is that I want to see a few conflicts before I choose a plan.

I see proposals for a revision system, public logs, a registery, a voting system…any one of these ideas might be the right solution, but we don’t know yet because we don’t have two people submitting buildings. The same principle applies to another issue that was brought up a while ago:

Won’t all of the default airports look the same since they all use the same library?

First, to be clear: we’re not trying to make the default library airports look like the real world airports, we’re not trying to duplicate custom scenery, and if people submit buildings for all 20,000 airports in X-Plane there’s no way we’re going to have 20,000 control tower libraries in the library. But there is a valid issue: what if people heavily use the assets?  Won’t we start to get a “sameness” either between two airports or within an airport as we use the library more and more?

This brings up the second half of “fix real bugs”:
Identify possible solutions, but don’t use them until necessary.

I am not worried about collisions of airport because there are a huge number of possible solutions, many of which are easy to implement and have been proven to work well in the real world in other problems.  In other words, the problem of merging crowd-sourced data is a solved problem, and we can use the right existing solution when we have enough data to pick that solution. The same thing applies to repetition in the library: we have ways of fixing repetition.  I want to develop a few airports and see what looks repetitive before asking our artists to spend their time making more stuff* but we at least know how we can fix the problem when the time comes.

Options to Deal With Repetition
So what are the safety valves here?  How can we deal with repetition in the library?  There are a few ways:

  • Every object in the library can have multiple real OBJ models for each “virtual” object.  X-Plane picks randomly among the choices, so we can always add more real objects.  We already do this for cars. (There are something like a dozen cars and trucks backing up one or two library entities.)
  • Some of the library elements are .agp (autogen-point) files – these files are mini-scenes made up of other objects, and the objects referred to within the scene are also subject to library variation.  So we can have a mini-scene where some of the decorations are constantly changing.
  • The facade engine contains some fairly flexible rules for picking which segments of walls go where, so there’s a lot of potential to break up the order of facade walls.
  • We can add more types of facade walls to a given facade without hurting X-Plane’s performance.

All of these changes can be put into an X-Plane update.
In summary, there are a lot of ways we can make the library more diverse and less repetitive, and as we see the library get used (and certain elements become over-used) we can add more variation to keep things looking fresh.

For example, it wouldn’t make sense for me to ask Tom to make 50 variants of the administration building if almost no one places it in any airport.  We need to see what kinds of assets get used the most and then make decisions. (Source X-Plane Developer)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>