Decisions, Optimization & More!
Welcome to this new update! It will touch upon varied topics and as always I’ll try to present an interesting insight into what it means to develop Ghost of a Tale. But first, let’s start with a screenshot of Dwindling Height’s war room… 🙂
Switching to 5.4
Well, that didn’t go quite as planned…
In fact, the move (from 5.3.1 to 5.4) I alluded to in the previous update was basically a catastrophic one. The reason is very simple: 5.4 was in beta stage. And it is entirely my fault for thinking “how bad could it be”.
For months it was written on Unity’s road map that 5.4 would be delivered at GDC 2016. And they did indeed release it; but as I was saying it was just a beta. To be more precise it was the 10th beta. And I thought “alright, some new things won’t quite work yet, but that’s ok”. That was naïve.
Turns out the move to the beta took me about week. At which point, after the 20th crash to desktop, I had to face the fact I had made a terrible decision and subsequently spent about a day just to revert to 5.3. With the indispensable help of Cyrille I managed to salvage about 85% of what I had created while using the beta, and had to rebuild the rest.
Bottom line is: the 5.4 beta Unity ended up releasing in place of the “real” 5.4 is still months away from being anywhere near production-ready and it is my fault for not picking up on the obvious beta clue. Lesson learned.
We’re now back to 5.3 and while we won’t get the improvements we were hoping from 5.4 I’m just very happy to be able to work again! 🙂
Since the game doesn’t use baked lighting at all (every light is dynamic) it presents some optimization challenges. Casting shadows is very expensive in Unity. And baking shadows is quite limiting and would really bog down my workflow.
So I had to come up with ways of keeping nice visuals (shadows are a big part of it) and yet not burn the framerate budget on things that wouldn’t be seen.
It took a lot of work but I improved on the system I already mentioned in a previous update. Before, the lights visibility distance were subordinated to a unique value; an absolute distance all the game’s lights followed.
I changed that so each light now has a specific visibility distance, depending on its location and visibility. That level of granularity keeps lights looking the same, but they’re smoothly turned off by the game as soon as they’re not needed anymore.
It makes a very big difference in the framerate. Before, in the jail, I was around 45-50fps. Now I’m mostly around 70fps (oscillating between 65fps and 82fps). The courtyard is another matter though and I still have a lot of work to do there.
On top of this optimization work I also started using a different LOD system (called AutomaticLOD) for some of the game’s assets (models are getting simplified the further away they get from the camera). It allows the poly count to go down without any noticeable visual drawback. I’m still putting the asset through its pace but so far it works brilliantly and the developer is both helpful and reactive, which is extremely important!
We have this game mechanic where the player can hide in a plethora of items (chests, barrels, cupboards, etc…). Basically anything that would accommodate Tilo’s size.
But since the beginning, tables have been a sticking point. Because it looks like Tilo should be able to fit under one, but actually the table colliders did not allow him to simply walk under a table. Yet it wasn’t visually very clear.
A long time ago I had implemented an automatic system that would put Tilo in a “forced sneak mode” when he would get near a table (touching it). And it would allow Tilo to walk under the table. It worked alright for the most part but wasn’t entirely satisfying.
In the game, when you want to hide somewhere, you switch to the “sneak stance” (hold the right gamepad trigger) and the option to hide becomes available. But again, with tables we were in a situation where it was a half-way thing; you weren’t hiding but merely “concealed”. Sometimes.
And it came with a couple of problems: when Tilo sneaks his walking speed decreases (which might be unwanted if you’re being chased) and when under a table it wasn’t clear if the enemies should see you or not. All because Tilo wasn’t officially hidden.
The solution was to simply turn tables into bona fide hiding spots. This was achieved by lowering slightly the tables’ height so that Tilo can’t quite fit under even when sneaking; hiding under a table is now a clear-cut player decision. You enter the hidden state, or you exit it. No more confusion.
Those kind of things become clearer as we play the game and the structure becomes more established; things that are half-baked like that tend to stick out more.
And on this point I think I’ll end this update. I hope it was an interesting enough read! As usual, please leave your questions and comments below. See you in the next update! 🙂
evilkinggumbyMarch 31, 2016 at 2:15 pm
wow this all sounds awesome. i’m sorry for the setback of unity being in a beta stance.. but the hardest lessons learned never are forgotten. 🙂
If you bump into a table and are NOT in a sneak stance, will it auto-drop you to let you hide or do you still HAVE to hold the trigger to enter sneak mode to go under them? My concern is if it auto-drops you, running past tables when moving around a space and getting “sucked” into sneak by the table would be really annoying. kind of like how in some games you auto-cling to walls or subwalls to hide/duck and it gets annoying when you’re just trying to run through an area.
Also if you ever need a hand with optimization i can help test it. I have several setups of varying capabilities i can check the framerate on.
SeithMarch 31, 2016 at 2:47 pm
The answer is: No it won’t. You can run really fast brushing past a table or even jump/climb on it but it will not automatically “suck you in”. Hiding is a conscious choice made by the player and tables are now like other items that double as hiding spots; you have to decide to use it as a hiding place. And if you do, you just press the interact button while sneaking to hide inside/under.
Basically, if you stand in front of a chest in “normal” mode then the chest is just a container you can loot by pressing the interact button. But if you switch to sneak mode (holding the right trigger), then the chest turns into a hiding place and pressing the interact button will make Tilo hide inside. It’s actually pretty intuitive.
DragonheadApril 6, 2016 at 2:48 pm
Glad that hiding is a choice. I too find it annoying when it’s done automatically.
Now, what about looting the chest while hiding inside of it? 🙂
SeithApril 6, 2016 at 7:00 pm
Hehe good question. We elected to not make it possible. You have to stand in front of a container to loot it (which is fairly logical).
Basically some containers double as hiding places (depending on their size) and if you want to loot them, then you walk to them and you loot them. Conversely if you want to hide in them, then you jump inside to hide. The two activities (looting/hiding) do not overlap.
DanieleMarch 31, 2016 at 2:16 pm
Definitely an interesting read, but the part about the table shines through: super interesting.
SeithApril 4, 2016 at 1:47 pm
Thanks Daniele! Glad you like this little insight of “it should have been obvious but it took us a long time to get there”… 🙂
Christoph ZürcherMarch 31, 2016 at 2:17 pm
Thanks for the update. Too bad about Unity, all the other points in the update sound great!
SeithApril 4, 2016 at 1:49 pm
You’re welcome, Christoph. The Unity issue is resolved (in a sense) now, so it’s alright. But I guess it serves as a reminder that what is supposed to work smoothly rarely does…
EvanMarch 31, 2016 at 3:34 pm
Strange how sometimes the most simplest of concepts take the most work in perfecting.
Still looking good.
I’m glad you’re focusing on the feel of the game, both from item interaction to frame rates, as well as the finer points often overlooked by many.
Regarding Unity 5.4, if you’re releasing on 5.3, do you foresee any patches to the new system once it is out of beta, with the assumption that GoaT releases before? At least you have some experience using the 5.4 that would make it slightly better going into it next time around.
SeithApril 4, 2016 at 1:52 pm
The pre-release should happen before 5.4 is production-ready, but we’ll probably end up using it for the game when it reaches stable status. Whether it happens during the pre-release or only for the final release we’ll see. In any case I’ll make sure everything works with it before we do the plunge this time!
UleertelMarch 31, 2016 at 5:17 pm
Ces journaux de production (peut on les appeler comme ça?) sont toujours aussi intéressants et j’attend avec impatience le produit final que j’avais participé à financer il y a bien longtemps 😉
Courage pour la suite!
SeithApril 4, 2016 at 1:55 pm
Merci Uleertel. Nous sommes de nouveau sur les rails et le developpement se poursuit de plus belle! J’ai hate de mettre le jeu dans les mains de “vrais” joueurs pour receuillir leur feedback. 🙂
JimmeyApril 2, 2016 at 3:17 pm
Well, that’s twice upgrading Unity has been a problem… 3rd time lucky perhaps?
Good call on changing the table hiding, had a few games where something like that has gotten quite annoying.
Also more great screenshots, the world looks better with every one!
… & be honest, if 5.4 had gone well, would you still have posted an update on it breaking, but just one day later?
SeithApril 4, 2016 at 1:56 pm
Hey Jimmey, I probably wouldn’t have posted something like that, even on a 1st of April, if it weren’t true! 😉
MundMApril 2, 2016 at 8:51 pm
Holy cheesecake, I think I jinxed it in the last blog update…sorry.
SeithApril 4, 2016 at 1:57 pm
Yes, it’s all your fault! How dare you impede the game’s development like that!!
FonzmanApril 8, 2016 at 7:29 am
Love the screenshots! Especially the cat’s skull above the fireplace. Every screenshot is so full of details!
SeithApril 8, 2016 at 8:27 am
I’m glad you picked up on that! Believe me, the final game will have more details (significant ones linked to the world’s background and history).
And in case you were wondering, the smaller skulls on the sides are ferret skulls (the Rats’ oldest enemies in our story)… 🙂
MichaelApril 11, 2016 at 5:10 pm
It’s funny that I have more hype over this game than I do Dark Souls 3, even if the Dark Souls series was one of my favorite gaming series ever. I just can’t wait for this game to come out, I know it will be amazing….. I die a little inside with every setback ;-; but it’s awesome that you have things back up and progressing.
P.S: How long might it take for this to be implemented on Xbox (if it is) after the full release on Steam? I don’t mean a specific date I mean how long would it take for it to be made compatible on Xbox when it’s finished on Steam.
SeithApril 12, 2016 at 2:06 pm
Hehe. I’m sure Dark Souls 3 will turn out amazing.
Regarding the Xbox One port for GoaT it shouldn’t take *too* long as what we do on PC should scale pretty well on the console. And throughout the development leading to the final release we will check that nothing breaks on Xbox One (Cyrille will make sure of that).
RomanApril 19, 2016 at 11:42 pm
Thanks for the update. It is pleasant to watch the game grow. Keep up the good work and do not forget to take a break from time to time 🙂
JeremyMay 8, 2016 at 2:38 am
It is looking great! You mentioned the XBone version, what about the PS4 version? Or is that hush hush?
Also I’m glad about the stealth in this game. It sounds like you are putting a lot of thought into it! Not a lot of games do stealth right, but it is looking more and more like you’ll nail it on the head!
AnnmarieJune 20, 2018 at 11:27 am
If this not adequate you also have ram room improving games
such as for instance Way reminiscence, Sequence reminiscence,
Tracks storage and Landscape storage.