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 )
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:
And this is the result (requires WebGL compatible browser):
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.