Dev Blog Half-A-Dozen - Crane Your Neck Over Here, Please

AAaaahhh!!! Who’s there?!

Oh, it’s just you? I’m sorry, but I’ve been just so wound up lately. For some reason, everything around here has been decorated with such spooky affair. Spiders, ghouls, and creepy faces carved right into pumpkins. What’s the meaning behind all of it, I wonder? A mystery we will take to our graves, I’m sure.

I’ll go ahead and move on from these unsettling matters! I’m sure you’d like to know what we’ve been up to the past couple weeks.

As of late, I’ve been working on new stages for the game. Our artist is still working on shipping out all of the physical merch, so they haven’t had time to give me more background designs to bring to life. We’re almost completely through, though!

Here’s some of the new designs:
stage1
stage2
stage3
stage4

Good progress has also been made on another even more important front.

That’s right! Chartreuse the Giraffe has been fully modeled, textured, and rigged. Their animations are still a WIP, but surely, you will be seeing them in-game at some point in the near future!

chartreuse

Moving on, we have a short writeup on a part of the level creation infrastructure that CraftedCart has been working on lately, in lieu of CraftSpider’s somewhat forced absence from their physics work. (college certainly is one to sap your time and energy away, after all)


The new material system

Ah materials, the magical layer of paint that goes on-top of your objects to control the appearance of their surfaces. If you’ve had a chance to create custom stages in the Rolled Out! beta, you may be aware of the current material system we use to handle stage surfaces. It looks a bit like this.

The current stage material

Here we have five textures feeding into six properties of the material, with the material being opaque-only, aaand that’s all you’ve got. Want any transparency? Too bad. Want to make a surface fully metallic? You have to bother creating a white texture. How about animating UVs to emulate a conveyor effect? Nope.

Now while I would love to tell you that our new material system has the same flexibility as Unreal Engine’s own material editor, where you can create all sorts of nodes and connect ‘em together…

A more complex water material

…well, that isn’t all that feasible to do in-game. As part of the packaging process for the game, materials get compiled into platform-specific bits of shader code, and the nice material editor we had is gone. If we take a look at the Rolled Out! install on my Linux box, we can see that we have GLSL and Vulkan shader caches, for the OpenGL and Vulkan renders respectively.

1
2
3
4
5
6
$ pwd
[redacted]/.steam/steam/steamapps/common/rolledout/Engine

$ ls | grep Shader
GlobalShaderCache-GLSL_430.bin
GlobalShaderCache-SF_VULKAN_SM5_NOUB.bin

While technically it would be possible to compile shader code for stages while the game is running (At least one Redditor has done it), we would have to maintain code to generate or convert between HLSL, MSL, GLSL, and SPIR-V code (for Microsoft’s Direct3D, Apple’s Metal, OpenGL, and Vulkan) to keep the game cross-platform. In addition we’d need to figure out to bypass chunks of Unreal’s shader code and still be able to hook into it to be able to apply the shaders to objects, something the Redditor described as “a massive hack”.

Sooo, that’s not exactly something I’m willing to do.

Instead, we’re building on our original material system. For starters, instead of having only one base material (forced to be opaque and have a few texture parameters), we have a variety of base materials to build off of now, including ones for opaque surfaces, translucent surfaces, masked surfaces (a surface that can have bits with either 0% or 100% transparency, but nothing in-between), as well as a few stock materials that can’t be customized (A default grid, the gravity surface material, and an invisible material).

The current base material selection

In addition, all texture parameters that were exposed now have scalar or vector multipliers (with the exception of the normal map), with the default textures of these being white squares now. This means it’s easy to, say, make an object glow blue now without having to create a texture for it. We can also go beyond the 0.0 - 1.0 range for HDR colors with multiplier values too (useful for making stuff look extra-glowy, as Unreal will add a bloom around incredibly bright colors).

The new setup for the rolledout:mat_surface_opaque_lit_generic material base

oooh, glowy

The config for this material would look something like this…

1
2
3
4
5
6
7
8
9
10
{
"name": "mat_glowy",
"base_material": "rolledout:mat_surface_opaque_unlit_generic",
"parameter_overrides": {
"emissive_multiplier": {
"type": "vector3",
"value": {"x": 5.49998, "y": 34.7542572, "z": 50.0}
}
}
}

Something I would also like to look in to in the near future would be letting animations modify material properties. One practical use for this could be to animate the UVs of an object, to emulate a conveyor belt.

Anyways, that’s all I have for this post. Back to the studio Brandon.


And that’s everything for today.
I’m going to continue working on level designs, while listening to Joel from Vinesauce in the background. Whatever it is you want to create, you should work on that, too! It’s Inktober/Devtober/Whatevertober, after all. Let us all imbibe in the joy of what makes us most human, and make shit!
See you next update.