Devlog Week 26 + 27

I took a few days off to visit family last week, and I didn’t feel like I had enough to share, so I compiled the notes for two weeks instead.

Most of the time was spent making props and graphics for the train station. Here’s a list:

Decals and fake ads

I started with some decals and fake ads and posters to populate the environment with. Each texture is an atlas containing variations of the same decal. I coupled that with a shader that only picks one of them (you need to set X and Y subdivisions), and then an actor that gets a liist of all those decals when the level is loaded, and swaps them when you’re not looking. I tested it for performance, and it doesn’t seem like there is any measurable impact on FPS or CPU usage.

I worked on making more decals too, which can be directly used in Unreal Engine, or most likely during the texturing process in Substance Painter. This was a very good opportunity to learn Affinity Designer; I was always putting it aside and never took time to actually do it.

And finally some fake ads. These are 90% reused assets and scenes, except for the perfume bottle, which was made from scratch.

I made a shader that scrolls through these ads and also randomizes based on world position, and then combined it with stationary lights into a a reusable blueprint to make life easier.

The following video shows the effects. I made the decals switch really fast and also in front of your eyes just for demonstration. The effect will be toned down significantly, to be mostly unnoticeable, unless you’re actually looking.

Scrolling Posters + Decals

Environment and props

I made a new shiny floor tiles material to satisfy the crow part of my brain, and also added an accent color, which helped improve the look of the scene significantly. As usual, the material is very dynamic, I can control the colors from the material properties, and also pick which mask I want (checker, larger checker, diagonal lines…etc)

Here is the before and after

Some performance tests were in order, to make sure the scene is optimized enough for the target hardware, which is the SteamDeck.

Overall, the performance is really good, I am getting 65+ FPS at the native resolution without any form of upscaling, overclocking, frame reconstruction…etc. I could get the framerate up to 80-90 with some minor visual differences (mainly no volumetric fog), and I’m sure I’ll be able to optimize further if I spend more time on it, so I don’t think performance will be an issue here or in similar environments.

One issue I had with baked lighting was stationary light shadows, because they were too sharp and not at all soft, and that was not the art direction I wanted to take. I found that switching to Virtual Shadow Maps can fix the issue and get better looking shadows, but when I tried that it practically cut my FPS in half, so that was certainly unacceptable. I looked further and I found an option called “Use Area Shadows for Stationary Lights” in the light properties, and it made baked stationary shadows act the way I wanted them to. It was a bit misleading, because I thought that option was limited to just rect/area lights, but it also works with point lights. That fixed both the visual and performance issue, and I’m glad I didn’t have to make a compromise.

Overall, A lot of time was “wasted” trying to understand the issues produced by GPU Lightmass. One of them was the sharp shadows I explained above, but also crashes, which I eventually realized only happen when the FPS counter is enabled, and seams between objects, which were solved by increasing the lightmap size, increasing the sample count and GI bounce quality, sometimes even disabling denoising.

Props

Finally, I made a couple bathroom props and put them in a random corridor just to make sure everything reads ok. The entire station is a mess right now, because it’s just an asset zoo and test environment, but I’ll make sure to tidy things up and make sure everything makes sense.

Here are some more screenshots of the train station

Dream Effect (high intensity)

That’s all for this week. I’ll work more on finishing a (rudimentary) demo soon, I have already written the interaction script and character details. Thanks for reading, and I hope to see you again next week!

Leave a Reply

Your email address will not be published. Required fields are marked *