A quick technical post regarding ship skins

After yesterday’s dev-blog about ship skins, most players again discuss the micropayment issues. Others discuss the technical aspects – instead of introducing 8 ship skins, maybe it should be possible to create your own, unique color sets?

Remember the game Homeworld? Even though it’s several years old, it allowed changing the colors of the stripes on all ships in the fleet. Would that be possible to do in EVE Online? Could corporations have their own “stripe colors”?

The answer is YES, technically it’s not very difficult*

* – I know for sure it’s possible to do in CCP WebGL, but I do not have enough knowledge about EVE Online client code

When me and T’Amber talked about CCP WebGL, I remember we’ve discussed ship shaders being text files. What does it mean? Each CCP WebGL ship skin is simply an XML plaintext file that says which files contain the 3d model, what textures to load and all the other parameters (hue, specular, effects etc.) are set there as well, all in plain text.

How does that apply to fully customizable ship skins? Some parameters could be dynamically changed at runtime, for example Diffuse Color (hue). You wouldn’t be freely able to change the entire textures, or shape of the ship, but you would get the Homeworld-like ability to change the colourable parts of the hull to any shade you want. Like Punkturis’ neon pink? Change the hue to pink (#FF00FF) and set saturation to max. Like matte black? Change the saturation to zero and luminosity to low, and you’ll get your black.

As an example, below is the color for Gallente ships from Tristan’s .red file:

<MaterialDiffuseColor>
<name>MaterialDiffuseColor</name>
<value json="true">[0.2901961,0.3764706,0.3843137,1.0,]</value>
</MaterialDiffuseColor>

for those who want to test, here’s the same colour as HTML ( 0.2901961 * 255 -> convert result to hex )

#4A6062

What does it give us? Instanced ships items (i.e. unpacked ships) would have to contain a few more numbers, that are then used by the game client to replace the default Diffuse Color a moment before rendering the ship on screen. Would that put a lot of strain on GPU? A little bit, yes, because client would have to keep many more shaders at runtime, but the amount of actual texture files would be exactly the same.

Here I replaced the default Gallente color with this:

#FF4CFF

 

And this is the result (requires WebGL compatible browser):

Tristan ‘CCP Punkturis’ Edition
tristan-pink

Now that I’m not a CCP developer, I don’t know if EVE Online client works exactly the same way as CCP WebGL. But I bet CCP knows that already 😉

TL;DR: Hull colors are numbers, saved in plain text. You can easily change them a moment before displaying ship on the screen.

5 thoughts on “A quick technical post regarding ship skins

  • March 7, 2014 at 14:07
    Permalink

    Nice article. I think the main question remaining, though, is how well this scales, performance-wise. If the client ends up having to do a lot more render work it could kill large-scale fights.

  • March 7, 2014 at 17:17
    Permalink

    CCP Xhagen yesterday stated that the proper approach to change the looks would be an “item of some sort that can then be applied/fitted/affect to your ship”. This suggests that something like this could happen. When I get it right, that item would hold parameters to change those values like in your WebGL example. Without changing the base typeID of the ship. And when I’m still on the right path here, I think that the instanced ID of the ship itself is neither affected? Can’t tell how a general “change grey to pink” would look like, though and it’s certainly a very limited approach.

    • March 7, 2014 at 17:51
      Permalink

      In my approach neither typeID nor itemID are affected. Item record simply holds more attributes which are later applied as shader parameters. What I’ve done here is a proof-of-concept, but it’s possible to build a full blown web based ship painter. It’s T’Ambers idea, I just didn’t have the time to make it real yet.

  • March 8, 2014 at 04:29
    Permalink

    Personally i really don’t like the CCP idea to use blueprint for the ship skins. Why not just add a new resource to collect (on broken blue/orange… crystal asteroid for exemple) and a station feature for the color change but remove color when you repack ship.

  • March 8, 2014 at 09:55
    Permalink

    The blueprint approach is temporary only. They are aware of the problems this approach has. This is just a pilot project to check whether there’s demand for custom painted ships at all. If and how the final feature of custom ship appearances will be implemented, is not yet decided by CCP (though I assume that some devs already have several ideas).

    Therefore, if you want it, supply yourself with those test balloon blueprints next Tuesday. Loads of them 🙂

Comments are closed.