DevLog: The making of Giru!

Official news, announcements and development updates.
User avatar
StuartMorgan
Developer
Posts: 135
Location: UK

DevLog: The making of Giru!

Post #1 »

I want there to be a lot of ship hulls to choose from in Galaxial, so they need to be quick to make with my limited art skills.

In this development log I'm going to show how I go about making one using Adobe Illustrator.

Keeping with the Ancient Mesopotamian mythology ship naming theme for Human factions in the game, this ship we are going to make will be called a Giru Light Cruiser.

Giru (also known as Gerra) was the Babylonian and Akkadian god of fire.

Image
I start off by creating the basic shape of the ship. Sometimes using reference images for inspiration. This stage usually only takes a few minutes.

Image
Next I position all of the detail lines and very roughly map out where the player/team colors and ship paneling will go.

This is a Light Cruiser, so it will have two small and medium hard-points for weapons. (the circles)

Image
Ship almost finished! They are all made greyscale but can be customized in-game.

Image
Finally I add shadowing and create the engine glow textures. The turrets are not included when exporting the texture, but I position some Artillery Cannons just to see how it would look.

At this point the main ship texture is finished. Now to create the wreckage...

Image
To create the wreckage, I divide the ship outline shape into segments.

Image
Like so.

Image
When the ship is destroyed, these wreckage parts slowly drift apart to create large debris fields after a battle.

User avatar
ThymineC
Posts: 10
Location: UK

Re: DevLog: The making of Giru!

Post #2 »

Pretty cool!

Do you use multiple wreckage designs for each ship? Is it possible to make the division process stochastic, so that wreckage doesn't always split up across every fault line you define in a given wreckage design?
Ah! quelle immense joie après tant de souffrance!
A travers les débris, par-dessus les charniers,
Pouvoir enfin jeter ce cri de délivrance:
Plus d’hommes sous le ciel, nous sommes les derniers!

User avatar
StuartMorgan
Developer
Posts: 135
Location: UK

Re: DevLog: The making of Giru!

Post #3 »

ThymineC wrote:Pretty cool!

Do you use multiple wreckage designs for each ship? Is it possible to make the division process stochastic, so that wreckage doesn't always split up across every fault line you define in a given wreckage design?
No. Each ship type has only one wreckage design.

It would be difficult to create the wreckage procedurally as the game only renders the exported textures I create and doesn't have knowledge of any outline positions or vector graphics data.

Each segment slowly drifts about and rotates. I don't think its too noticeable in-game that they are identical, and looks fairly random.

This wreckage is all from many destroyed ships of the same design:

Image

User avatar
Thrank
Posts: 16

Re: DevLog: The making of Giru!

Post #4 »

I really want to se a carrier (those ships that can launch fighters), we can gain a more deep strategic view of the battlefield!
I know that you are really busy and I want to let to know ou that I like what have you done till now! :)
I see that you don't use curve line, why?
A question, you tell that that ship has 2 light and 2 medium turret hardpoints; now, all cruiser like that has 2 light and 2 medium turret hardpoints?!

User avatar
ThymineC
Posts: 10
Location: UK

Re: DevLog: The making of Giru!

Post #5 »

StuartMorgan wrote:
ThymineC wrote:Pretty cool!

Do you use multiple wreckage designs for each ship? Is it possible to make the division process stochastic, so that wreckage doesn't always split up across every fault line you define in a given wreckage design?
No. Each ship type has only one wreckage design.

It would be difficult to create the wreckage procedurally as the game only renders the exported textures I create and doesn't have knowledge of any outline positions or vector graphics data.
[...]
Oh, I see. I'm just throwing ideas out: would it be possible to create 'damage designs' for each ship, which are similar to the wreckage designs in that they're divided up into pieces, but represent damaged parts of the vessel rather than completely wrecked parts? I think this can be done using exported graphics in a similar manner to how you do wreckage designs. You could overlay each ship with the damage design chunks that are initially at 0% opacity. As a part of a ship takes damage, the corresponding damage chunk becomes more opaque. Would this be possible given the way the system is built?

I'm not sure how much value this would add, but it may help in increasing the graphical variety of your fleets, and giving the player a relatively easy way to gauge the health of a large number of ships from appearance alone.
Ah! quelle immense joie après tant de souffrance!
A travers les débris, par-dessus les charniers,
Pouvoir enfin jeter ce cri de délivrance:
Plus d’hommes sous le ciel, nous sommes les derniers!

User avatar
StuartMorgan
Developer
Posts: 135
Location: UK

Re: DevLog: The making of Giru!

Post #6 »

I see that you don't use curve line, why?
I'm keeping all the Human faction ships in the same style. I will add some more curved ones later, they are much harder to make.
A question, you tell that that ship has 2 light and 2 medium turret hardpoints; now, all cruiser like that has 2 light and 2 medium turret hardpoints?!
Each ship class (Frigate, Cruiser, Battleship etc.) has roughly the same amount and size of weapon hardpoints, but this does vary slightly depending on how I balance each design.

The number of passive and active module slots varies a lot more and is not so restrictive.

The smallest class (Frigates) will usually only have 1 or 2 small hardpoints.
Cruisers: 2-3 small + 2-3 medium
Battlecruisers: 3-4 medium + 1-2 large
etc...

User avatar
StuartMorgan
Developer
Posts: 135
Location: UK

Re: DevLog: The making of Giru!

Post #7 »

Oh, I see. I'm just throwing ideas out: would it be possible to create 'damage designs' for each ship, which are similar to the wreckage designs in that they're divided up into pieces, but represent damaged parts of the vessel rather than completely wrecked parts? I think this can be done using exported graphics in a similar manner to how you do wreckage designs. You could overlay each ship with the damage design chunks that are initially at 0% opacity. As a part of a ship takes damage, the corresponding damage chunk becomes more opaque. Would this be possible given the way the system is built?

I'm not sure how much value this would add, but it may help in increasing the graphical variety of your fleets, and giving the player a relatively easy way to gauge the health of a large number of ships from appearance alone.
Yes, this would be possible and very easy to implement.

It could impact performance a lot however and would really need to be a single layer, not many segments like the wreckage.

I'm intrigued to try this out, but not sure how I would create the damage textures to match the overall ship graphics style. They would need to be quite abstract.

User avatar
StuartMorgan
Developer
Posts: 135
Location: UK

Re: DevLog: The making of Giru!

Post #8 »

I'm just throwing ideas out: would it be possible to create 'damage designs' for each ship
How about something like this?

Image

It would fade smoothly depending on ship damage, not in steps.

It's not something I've tried in-game yet. Very likely it will be too dark, considering you can customize the base ship colors to be darker as well.

User avatar
TanC
Posts: 9

Re: DevLog: The making of Giru!

Post #9 »

Nice look into the ship creation process. The opacity for damage looks great.
StuartMorgan wrote:
It could impact performance a lot however and would really need to be a single layer, not many segments like the wreckage.
Perhaps make it a function of the Level of Detail settings for the game, with powerful computers able to render these damage simulations and less powerful computers have the option to switch it off.

User avatar
Wrymn
Posts: 20
Location: Slovakia

Re: DevLog: The making of Giru!

Post #10 »

Nice update!

About the ship damage textures. Why don`t you set the entire ship texture to damaged one, depending of ship hull percentage?
So the performance would be the same since only one texture per ship. No layering of texture to show damage.

Also the little shield outline around ships is also separate texture right?
I'm keeping all the Human faction ships in the same style. I will add some more curved ones later, they are much harder to make.
Also hope the curved ones won`t end up like Eve`s Gallente potatoe ships :)

http://imgur.com/j1c3zDr - hehe

User avatar
ThymineC
Posts: 10
Location: UK

Re: DevLog: The making of Giru!

Post #11 »

StuartMorgan wrote:
I'm just throwing ideas out: would it be possible to create 'damage designs' for each ship
How about something like this?

[...]
That looks pretty nice. Last night I was thinking about the potential performance issues you were mentioning. I assume that memory constraints are generally less problematic than time ones. If so, and only if necessary (I'd prefer the gradual fading approach you mention over this), it may be possible to prerender bitmaps that are formed by blending between the regular and damage designs at regularly-spaced linear interpolation intervals e.g. 33%, 66%, 100%. Then for 66-100% health, you use one of these bitmaps, then when the vessel's health drops below 66% you switch over to another of the bitmaps, and then below 33% health you swap to the third. In most other games I've played (particularly ones like Command & Conquer), it seems like units have a discrete number of damage models that they switch between at certain levels of health.

The amortised time complexity for this approach should be the same as what it already is, since each ship is only using one prerendered bitmap and the only additional cost is switching to a different one when a vessel's health drops below a trigger point. An additional possible advantage is that, since ships of the same class appear to be cookie-cutter (not distinguishable from one another by individual detail), there's probably a lot of scope to use the Flyweight pattern to reduce the number of separate bitmaps you actually have to keep in memory, and this would extend to damage states as well - for instance, every Giru vessel between 33-66% health would look identical, and so you could maintain one copy of the bitmap corresponding to a 33-66% integrity Giru vessel and then render it multiple times for each actual instance. At least I'm guessing something like that could work.

On a side note, it might be interesting if the modules you slot into hardpoints also used a damage-design system, and inherited their level of damage appearance from the ship they're slotted into. This could help provide a more consistent look for vessels.
Ah! quelle immense joie après tant de souffrance!
A travers les débris, par-dessus les charniers,
Pouvoir enfin jeter ce cri de délivrance:
Plus d’hommes sous le ciel, nous sommes les derniers!

User avatar
Wrymn
Posts: 20
Location: Slovakia

Re: DevLog: The making of Giru!

Post #12 »

ThymineC wrote:
StuartMorgan wrote:
I'm just throwing ideas out: would it be possible to create 'damage designs' for each ship
How about something like this?

[...]
That looks pretty nice. Last night I was thinking about the potential performance issues you were mentioning. I assume that memory constraints are generally less problematic than time ones. If so, and only if necessary (I'd prefer the gradual fading approach you mention over this), it may be possible to prerender bitmaps that are formed by blending between the regular and damage designs at regularly-spaced linear interpolation intervals e.g. 33%, 66%, 100%. Then for 66-100% health, you use one of these bitmaps, then when the vessel's health drops below 66% you switch over to another of the bitmaps, and then below 33% health you swap to the third. In most other games I've played (particularly ones like Command & Conquer), it seems like units have a discrete number of damage models that they switch between at certain levels of health.

The amortised time complexity for this approach should be the same as what it already is, since each ship is only using one prerendered bitmap and the only additional cost is switching to a different one when a vessel's health drops below a trigger point. An additional possible advantage is that, since ships of the same class appear to be cookie-cutter (not distinguishable from one another by individual detail), there's probably a lot of scope to use the Flyweight pattern to reduce the number of separate bitmaps you actually have to keep in memory, and this would extend to damage states as well - for instance, every Giru vessel between 33-66% health would look identical, and so you could maintain one copy of the bitmap corresponding to a 33-66% integrity Giru vessel and then render it multiple times for each actual instance. At least I'm guessing something like that could work.

On a side note, it might be interesting if the modules you slot into hardpoints also used a damage-design system, and inherited their level of damage appearance from the ship they're slotted into. This could help provide a more consistent look for vessels.
I would avoid as much transparent drawing as possible. Drawing transparent objects is the heaviest on performance. So if there are additional ~3 sprites for ships, they can be changed depending on % of damage to hull.

User avatar
StuartMorgan
Developer
Posts: 135
Location: UK

Re: DevLog: The making of Giru!

Post #13 »

Perhaps make it a function of the Level of Detail settings for the game, with powerful computers able to render these damage simulations and less powerful computers have the option to switch it off
Yes, that would be wise. :)
Why don`t you set the entire ship texture to damaged one, depending of ship hull percentage?
Last night I was thinking about the potential performance issues you were mentioning. I assume that memory constraints are generally less problematic than time ones.
You need a base texture to blend the damage with unless you are going to make a LOT of them. I would prefer it to be gradual.

The ship textures are high resolution and can be quite big. It would use up lots of GPU texture memory (even with compression) having too many separate textures for each damage level.

The solution I think would be to make the damage texture a lower resolution and blend with the base ship texture, like I have done in that animation.
Also the little shield outline around ships is also separate texture right?
Yes. Those are fairly cheap, performance and memory usage wise.

I'll quickly get this up and running in the game to test it out. Should be problem free now.

User avatar
Wrymn
Posts: 20
Location: Slovakia

Re: DevLog: The making of Giru!

Post #14 »

You load texture of ship with 100% hull. You draw the texture as normal. Then when hull gets bellow 60%, you destroy the texture for given ship and free it from memory. Then you allocate new texture to that spot. This texture will be texture with hull a bit damaged.

The same goes for other percentages. Don`t see why it would take GPU memory, you are still drawing one texture. Only this texture is in memory and this texture needs to be send to GPU. Only thing that would get bigger, is entire project or installation of final game since it needs more high quality textures or .pngs.


But ok you are the developer of Galaxial this is just an suggestion how it could be done with almost no performance decrease xD

User avatar
StuartMorgan
Developer
Posts: 135
Location: UK

Re: DevLog: The making of Giru!

Post #15 »

Wrymn wrote:You load texture of ship with 100% hull. You draw the texture as normal. Then when hull gets bellow 60%, you destroy the texture for given ship and free it from memory. Then you allocate new texture to that spot. This texture will be texture with hull a bit damaged.

The same goes for other percentages. Don`t see why it would take GPU memory, you are still drawing one texture. Only this texture is in memory and this texture needs to be send to GPU. Only thing that would get bigger, is entire project or installation of final game since it needs more high quality textures or .pngs.


But ok you are the developer of Galaxial this is just an suggestion how it could be done with almost no performance decrease xD
What you are suggesting is wrong and is not how rendering works. ;)

Textures are loaded (uploaded to the GPU and sit in texture memory) when the game starts. If you want to render 100 identical ships, they all use the same texture.

Constantly allocating and freeing texture data for each ship would be extremely slow.