Eulora Client Graphics: Main Types and Formats



June 22nd, 2020 by Diana Coman

Having made by now a full graphics generator that produces everything, from textures to meshes and full animations too1, I can also finally get out of the existing swamp of data somethings and provide instead a clear list of types, formats and files that are actually quite enough for client's needs. Basically there are only 3 big types, each requiring a bunch of specific files:

  1. Outdoors type (or "sector", "area", "zone", "world", whatever you want to call it, the point is that it has some solid terrain, some sort of "water" in the lower parts and some sort of "sky" that should arguably be in the upper parts only but is in practice all-surrounding). This is the most involved type as it requires three parts, each with its own bunch of specific files2:
    1. Terrain, requiring the following files:
      • heightmap.png
      • materialmap.png3
      • lightmap.png
      • normalmap.png
      • basemap.png
      • tex_1.png4
      • tex_2.png
      • tex_3.png
      • norm_1.png5
      • norm_2.png
      • norm_3.png
    2. Water6, requiring the following files:
      • tex.png
      • tex_reflected.png7
    3. Sky8, requiring the following files:
      • tex.png
  2. Non-moving type, aka CS mesh, requiring the following files:
    • meshfactory.csmesh9
    • tex.png
  3. Moving type, aka Cal3d, requiring the following files:
    • skeleton.csf (or .xsf)
    • any number of .caf (or .xaf) files - the animations. Those may have in principle names matching the "type of animation" they are meant for but note that on one hand CS/Cal3d has a limited and fixed number of such "types" (specifically: idle, travel, cycle, style_cycle and action) and on the other hand it's not all that clear what's the point of them since the more important part is otherwise setting for each some use parameters, of which the most important are the speed interval for which that animation is relevant (hence, when it will be used) and whether to lock in the final pose or not.
    • any number of .cmf (or .xmf) files - the meshes making up this model and including the texture mapping. Note that different models have different number of meshes and there is no specific order in which the meshes are numbered either. As a pattern at the moment I'm simply using mesh_id.xmf as name for the file and loading until no file found.
    • tex.png (or .dds) - the texture to use for ALL meshes; alternatively, any number of tex_id.png so that each mesh has its own texture, supposing that this might be useful at some point.

In addition to the above, there are a few more formats that are simply one file each, used as such: icons (simply a .png or .dds file), sounds (.ogg or .wav) and perhaps particle systems that will need a SMG format since there is no file/format for them at all, only all sorts of code-side settings of this and that. Currently and as per previous discussion, the sounds are not going to be supported but I mention here for completeness the formats known to work with CS.

All image files may in principle be either .png or .dds, with the .dds format the preferable one (takes less space and requires less computations client-side). This being said though, the client should work with either/both and there is only a reasonable requirement that the size be a power of 2. Current textures are all 512x512 pixels and any change to this needs to be matched with a change to the texture mappings provided for each mesh and so on - in other words, I think the correct approach here is simply to bundle together as above the mesh definition with the texture it is meant to use and don't even bother otherwise to explicitly provide whatever number of different sizes - the size of an image is anyway included in the file so whoever is interested to extract it may do so directly from there.

The above description of types and formats marks a fundamental shift in approach and since this cleared up for me only gradually as a result of all the work sunk into the graphics and client side since the beginning of this year, I'd rather set it out explicitly here. The old client's approach focused on loading everything upfront and keeping it all in memory, based on the assumption that there are somehow great gains to this by means of extensive reuse of assets once loaded. In practice I fail to see those gains but there is otherwise ample cost clearly visible and always paid upfront10: fixed and difficult to expand set of assets, long - and moreover, getting longer ie *worse* with any extension of the assets!- initial loading time for the client as a whole, significant overhead required to support the reuse fantasy because otherwise there's precious little reuse when it comes to meshes and characters and even textures. Basically the old idea is of having a central catalogue of all graphics assets and then referencing those from everywhere else. By contrast, my current approach has no such central catalogue and relies instead on each element that requires some graphics assets to know where to find them and possibly have them in its own directory. Essentially, the current approach considers disk space cheap (though NOT network communications - note that assets may end up duplicated locally but in principle they don't *have to* be also sent 1000 times over the wire; it can very well be perhaps the job of the data acquisition module to duplicate files if/when needed and/or set them or link them where expected), discards the reuse pretense and relies instead on minimal overhead as well as minimal, on-demand loading (potentially coupled at implementation time with aggressive clear up of unused resources if memory gets clogged otherwise).

While the above is not yet set in stone, it might very well soon become set, so let me know if you see any trouble with it or if there's some better way to go about it that I just don't see yet.


  1. For the curious, *all* this stands currently at 5581 lines of code+comments+tests+png writer + convenience scripts. No, I did *not* forget any 0 at the end and no, it doesn't require external libs, platforms whatever-else, it's standalone, C, gawk and bash code only. 

  2. The .dds format is in principle better but in practice all image files may end up either .dds or .png so the client side will have to make do with what is provided, perhaps run its own conversions if it has to. 

  3. Also known as alpha map, if that helps you any. 

  4. These are the materials that get used/applied depending on the height and on the basemap - while logically speaking I would just say any number of materials should work, in practice the existing terrain plugin wants exactly and precisely 3, not more nor less. This being said, the format from my point of view will be tex_number files and load as many or as few as your client can use. 

  5. Those are normals for the corresponding texture and in principle they are optional though the terrain will likely look worse without them. 

  6. The current implementation does require a bunch of other settings such as reflection coefficient and whatnot but I think that's strictly a client-side concern so entirely locally-set, nothing to do with getting it from the server. 

  7. This is a texture to be reflected by the water and it's optional. Currently this is the sky's image. 

  8. Note that the current implementation does require all sorts of other "options", from picking the geometry of the sky (!) to a whole bunch of shader variables. Nevertheless, I don't see why would any of that be a concern outside of each client - so they'll be set locally, change your client as you want it if you are fed up with the sphere-sky or something. 

  9. XML file in CS "meshfact" format, which can be loaded directly with CS's loader and then instantiated as and when desired. It contains the following information: position of all vertices, normals of the surface at each vertex, texture coordinates at each vertex, triangles making up the surface. These are effectively listed as such, since this is what CS expects. Note that the format forces the mesh to include a fixed texture mapping, but any texture can be used at load time - how well it will fit or not the mapping is a different matter. 

  10. Come to think of it, this does strike me now as very much the typical problem: paying upfront a significant price for.... not missing an opportunity that never materializes though, huh. 

Comments feed: RSS 2.0

14 Responses to “Eulora Client Graphics: Main Types and Formats”

  1. Diana Coman says:

    In addition to the above: while currently the client does not perform any check /doesn't have any expected hashes on any of the files it loads, on one hand those are meant to be files obtained via the smg comms that basically includes checks already and on the other hand I'm not sure what would yet another check add to it otherwise, though it's certainly possible to add such additional check, sure, at the expense of some more calculations and passing around of keccak hashes or whatever is used.

  2. Honestly just the hash should be perfectly fine.

  3. Diana Coman says:

    Ok, adding file hashes and checks to the list of requirements then.

  4. One irksome point is that indeed we might want multi-sized textures -- such as to accommodate better and worse graphics processors it is common practice to give the user the choice whether to run with double, normal or half-sized textures (or 4x, x, 1/4x depending on the GB count of the game directory). I don't particularly want anything done about this right now, but I can't promise a fixed-size-match forever either.

  5. Diana Coman says:

    Noted and in the big scheme of things I doubt it creates any big trouble really since the moment I find a working way to deal properly with all the rest, this sort of thing can be in or out without making a significant difference.

  6. Diana Coman says:

    Meant to add here, since you mentioned accommodating various graphical capabilities - the same thing would normally go for all the graphics assets really i.e. not only textures but also meshes, cal3d models, animations, everything. For example, the Cal3d format even has in principle this "LOD" (level of detail) option that requires a full spec of what vertices get collapsed when working at lower LOD. As it may be quite obvious, so far I entirely sidestepped this issue, mainly because it really is non-essential in my opinion and it can otherwise easily eat up a lot of time. Nevertheless, since the size of the textures came into discussion, I think it's best said that presumably at some point we might indeed want to insert some new layers/levels for other graphical elements too. From what I can currently tell, I think that changes of this sort basically should be ok as long as they *add* to whatever it was and do *not* remove any of the existing things - sure, the old clients will not know what to do with the new things but they should not choke on them either (and I'm currently working with this idea in mind on all parts really, e.g. the data acquisition should not choke on such stuff either, just ignore it and move on).

  7. I don't think "collapsing vertices" is either sane or useful. If we do that, we'll just have whole models for each resolution and that's that.

    Otherwise yes, your outlook is healthy.

  8. Diana Coman says:

    I don't think "collapsing vertices" is either sane or useful.

    Really glad to hear this!

  9. -----BEGIN PGP MESSAGE-----
    Version: GnuPG v1.4.10 (GNU/Linux)

    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
    j/w=
    =4PtD
    -----END PGP MESSAGE-----
  10. Diana Coman says:
    -----BEGIN PGP MESSAGE-----

    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
    3NqdXcamDyB5nSf+mMQB
    =JdSi
    -----END PGP MESSAGE-----
  11. [...] to the previous iteration, the "outdoors" type bundled together water, terrain and sky because in practical terms they always [...]

Leave a Reply