The Great Tribes Devblog #33

posted in Zemlaynin
Published January 11, 2019
Advertisement

 

Hello dears! And happy new year's holidays!

It's been over a month since the last development diary. I have to say that I wanted to post a diary before, but faced with a intractable problem, which spent a lot of time. But all in order.

According to the development plan, the first contact with AI was implemented:

screen001.jpg

At the bottom of the screenshot you can see messages about crossing the army control zones with another army and the city. Now we had to develop an interface element that would display the event data:

screen003.jpg

This screenshot in the upper left corner shows the implementation of UILabel with the ability to transfer text by words. An important element of the interface that is useful in the future. In the lower right corner, above the end of the course is now visible various messages, hover the mouse over them POPs up a hint (also a new interface element), with a short description of the event. By pressing the right button, the event can be closed without making any decision, and the left button can open the message.
In this case, when you click on the event button will be the first diplomatic contact in the game:

screen004.jpg

screen005.jpg

It was further implemented the first maneuvers of AI. AI walks on the map and tries to determine the boundaries of its continent. In the video at Dukat https://youtu.be/69G51u_Mq3g?t=693 that is the moment where he runs over the enemy army, which pays no attention to him, because busy with study card :)


And somewhere in this place and at this time, I was faced with a problem, a performance problem. Our Modeler has a powerful modern computer of red Assembly. But it the game is terribly slow shipping a single core processor. The reason is simple-there are a lot of cores in new processors, but in fact they are less productive in single-threaded applications. And that moment I had a render in one stream. But in fact, the reason was not so much in this. And in the process of finding problems, I decided to count how many polygons we have in the scene:

screen006.jpg

On the middle map at the maximum distance and a large cluster of palm trees - it's just scary! 15 824 756 triangles! Almost 16 million!!!

After a bit of map generation, I found a place with 16.75 million. :)

screen007.jpg

Although here is a similar place with trees gave only 8.5 million triangles:

screen008.jpg

And in the middle stage consisted of about 4 million:

screen009.jpg


In General, I was glad that my render copes with such a huge number of triangles, but their number was excessive. It was necessary to optimize the number of polygons in the models.

screen025.jpg

40% decreased Poligona trees! Differences practically are not visible.

Next, we have altered palms - Poligona on the palms was reduced in 10 times. 600 - 700 against six thousand of polygons per pack.

screen026.jpg

While there was parallel work on the models I have been trying to simplify the geometry of terrain. Here's what it looked like before optimization:

screen010.jpg

And after the first steps:

screen011.jpg

screen012.jpg

screen013.jpg

But it was all done by a simple method — all smooth tiles were replaced by two triangles instead of 882.

But there were still flat places that could be optimized, and I began to build polygons from those triangles that had the same height:

screen014.jpg

Build on them convex-concave contour (Concave Hull). With Convex Hull ω was not a problem, I already used the Graham scan (Graham scan). But the construction of Concave Hull has a problem... Information on this topic on the Internet was quite difficult to find. I had to write the implementation of algorithms from scratch. I will not lie if I say that I read a dozen different dissertations on this topic. But all the proposed algorithms gave an approximate result with some error. After a week of torment and pain, I came up with the idea of my algorithm, maybe I'll describe it someday :)
As a result of two weeks of torment, I got the desired result and was able to build Concave Hull of almost any complexity, bypassing the set with holes, just dividing them into 2 halves of the hole. Received contour and triangulated it:

screen015.jpg

screen016.jpg

Getting the output of such a result:

screen017.jpg


The fog of war has also been simplified:
screen018.jpg

And in zones where was present only fog of war it turned out only about 300 polygons:
screen019.jpg

But in the end I was upset with the result and tell you that these two weeks I spent in the shuffle... The algorithm developed by me gave a significant increase in performance when rendering, as the number of polygons on average was reduced by 60 — 70%. But the generation of the map began to occur 10 times slower.... the algorithm was time-consuming and difficult.

3 days I lost in ATOM RPG removing stress:) Even at work did not go. Thank God we have at this time the thermometer went off scale at the border -44 - -46 degrees Celsius. And I gave my melancholy for an excuse not to start the car.

And before the new year holidays, enough to play, but the truth is not passed the game, I gave a new lightweight version of the algorithm, which was suitable only for my conditions of tiles. Data calculations for optimization were not noticeable against the background of map generation and the number of polygons decreased by an average of 40-50%.
But there are artifacts when rendering water, I had to rewrite all the algorithms associated with water.
Here is the result:

screen027.jpg

Anatoly meanwhile made unit of nomads:

screen020.jpg

While he lies resting :)

While working on optimization, I came up with the idea of how to change our mountains.

screen021.jpg


Mountains have become more embossed, it is noticeable without texture, as the texture is now not suitable for them:

screen022.jpg

On the grid, so in General the differences are obvious:

screen023.jpg

It remains the case for small — need a new texture of the mountains.

The next step was to rewrite the resource loader and map generator. Along the way, remaking the start menu for all these things:

screen024.jpg


screen028.jpg

 

Now loading of resources goes in parallel and then map generation begins.

I did a great job in dividing the render into 3 streams. The whole difficulty was in synchronization. Now we have one thread responsible only for drawing, the second thread for recalculation of the visible space when moving the camera and other interactions with the map space, and the third thread is responsible for animation and communication with the server part.

And Yes, we now have a server part responsible for all events in the game and for the AI. In turn, each AI player is a separate process.

Let's summarize the work done:
 - Graphics optimization from the software side.
 - Optimization of graphics models.
 - Server part.
 - Split render into 3 streams.
 - Preload resources (textures and models).
 - Rewrote the fog of war, water and terrane shaders.
 - Reduced RAM consumption by 20-30%
 - Implemented a number of UI elements
 - Redesigned start screen with the new UI.
 - Fixed errors in normal calculations.
 - Fixed the hills.
 - New mountain.
 - Introduced normalmap for terrain.
 - New selection of units.
 - New animation units.
 - Window of diplomacy.
 - Actions AI. Study the map.
 - Actions AI. Diplomatic contact.
 - Actions AI. The conclusion of peace, friendship, or a Declaration of war.
 - Actions AI. Action units in a collision.

 - In General, a lot of work has been done to optimize and not a lot of game mechanics. I hope this month to the CE goes to plan and I'm finally going to finish the city :)


Thank you for your attention!

Next Entry DevBlog #34
3 likes 0 comments

Comments

Awoken

Very cool stuff.  I like these sorts of games and I'm interested to know what the game plays like that's for sure.  I really like the turn icon in the lower right corner.  I like that it represents the four seasons and that it rotates.  Very nice.

January 11, 2019 11:19 PM
Zemlaynin

Thanks for the comment. Soon will be implemented part of the gameplay

Thanks for the comment. Soon will be implemented part of the gameplay

January 12, 2019 03:05 AM
jbadams

Thanks for sharing such a detailed look! :)

January 14, 2019 05:25 AM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement
Advertisement