Monday, January 05, 2009

File Name Replacement Vs. the Library

When you make an airplane, you customize some of the images and sounds by simply putting a wav or png file in your aircraft package, with the same name as X-Plane's default. This is "file name" substitution.

What is good about file name substitution is that it is very, very simple.

But file name substitution has some limitations:
  • If you need to provide multiple versions of a file, there is no way to do this. You can at most replace one file with one other file.
  • There is a risk of "file name collision" - so file name substitution is only appropriate when we can be sure that a folder is only used for one simple purpose.
  • The file name cannot easily encode a lot of information about how the file is to be used. We use _LIT to indicate an emissive texture, but imagine trying to encode every aspect of a .ter file in a file name (all of the projection parameters, physics parameters, texture clamping and alpha managemnent, paged texture loading). You'd end up with a file name like my_tex_na_42.23E_72.32W_conc_pd_5000_4000_nw_LIT.png. You can't tell me that that's an easy file to work with!
The scenery system hits all three of these limitations, and it deals with them in two ways:
  1. Texture files are almost always referenced from a text file. The text file provides a place to put all of the important parameters about the texture.
  2. The library system maps art assets to virtual file paths, avoiding collisions and allowing multiple files to be mapped to one virtual path.
Cristianno wrote this awesome tutorial, which shows how the library system works.

No comments: