Gonnet's Void

Elevators In Disminal #1

Since publishing Disminal, elevators have been on my mind for quite a long time though not quite since day one of development. In fact, I had been working on an elevator for a concept very similar to the office sim game I'm making now. This was around 2022, and this 'playground' of a concept would eventually turn out to be Executive Incentive 97.

Regarding Disminal specifically, I was originally inspired by The Complex: Found Footage (which I've never played) and its approach to its elevator, looking at it from the outside looked pretty cool to me:

image.png

However, that excitement didn't last long once you actually stepped inside and were welcomed by a loading screen. That aside the game is beautiful.

The idea of adding an elevator kept lurking in my head until It came to me.. It would be sick to have an elevator that was functional and would let me explore or unlock different sections in the game, Not only because it would add to the atmosphere but to the interactivity which is something lacking but what excited me the most was how different it would make the experience feel, the feeling of having this whole world interconnected by elevators seemed very promising.

so a couple months later after release I begun collecting and researching elevator designs for inspo.

Elevators look cool asf tbh image.png

Elevator-TFT-LCD-Indicator-with-Multimedia-Display.webp

54512d26ff94a055c4468a9945dc7370.jpg

I made some replicas, made around 3 or 4 variations but none of them felt right.

2.jpg

I got to remake this one and turned out pretty decent:

image(3).png

But even then, something was off. The proportions worked in isolation (seeing them in a nice render in Blender) but not inside the actual game. Perspective broke, scale felt wrong, and the illusion didn’t hold.

You could not easily appreciate the ceiling, the whole elevator cabin was a bit small, this meant it had to be bigger and the ceiling had to also be bigger to accommodate for the player's field of view, among many other issues that popped up. what about the door placement? too narrow. I wasn't exactly being very creative here I know, I just didn't have the right mindset at the time.

That’s when it hit me.

Integrating elevators wasn’t just a design problem, it was a technical one.

Every wall in Disminal had baked lighting. Adding an elevator meant cutting into that geometry, which meant rebaking entire sections of the game. That meant hours, and if we were talking about installing more than 8 destinations for the Elevator possibly 2 or 3 months of work to get the lighting right again.

I did not have an RTX 3080 to do the lighting. I had integrated graphics, an i3 laptop with 8gb of ram, a failing hard drive, and the letter A on the keyboard worked whenever it wanted.

What I did have was Vast.ai. I was renting remote computers with these GPUs, but having to move the project every time I rented a machine was also a pain in the ass.

All this filled me with so much dread that I gave up on the elevator idea entirely.

About a year and a half passed by.

I was working on Executive Incentive 97 trying to get proper color contrast specially in places where there would be shadows and in order to trick the darker areas to show up darker or lighter i needed a custom shader. For this I went to Chatgpt/Gemini, I knew it was going to be simple since something in my mind told me this was pretty straightforward and most people surely may have needed something similar.

This is what I needed:

Shader "Custom/ClampedSpecular_Cutout"
{
    Properties
    {
        _Color ("Main Color", Color) = (1,1,1,1)
        _SpecColor ("Specular Color", Color) = (0.5,0.5,0.5,1)
        _MainTex ("Base (RGBA)", 2D) = "white" {}
        _Shininess ("Shininess", Range (0.03, 1)) = 0.078125

        _Cutoff ("Alpha Cutoff", Range(0,1)) = 0.5

        _MinBrightness ("Min Brightness", Range(0,1)) = 0.1
        _MaxBrightness ("Max Brightness", Range(0,1)) = 0.8

        _OverlayColor ("Overlay Color", Color) = (1,1,1,1)
        _OverlayStrength ("Overlay Strength", Range(0,1)) = 0
        _EmissionFloor ("Emission Floor", Range(0,1)) = 0.2
    }

    SubShader
    {
        Tags { "RenderType"="TransparentCutout" "Queue"="AlphaTest" }
        LOD 200

        CGPROGRAM
        #pragma surface surf ClampedSpecular alphatest:_Cutoff addshadow fullforwardshadows

        sampler2D _MainTex;

        fixed4 _Color;
        fixed4 _OverlayColor;

        half _Shininess;
        half _MinBrightness;
        half _MaxBrightness;
        half _OverlayStrength;
        half _EmissionFloor;

        struct Input
        {
            float2 uv_MainTex;
        };

        inline fixed4 LightingClampedSpecular(
            SurfaceOutput s,
            fixed3 lightDir,
            half3 viewDir,
            fixed atten)
        {
            half diff = max(0, dot(s.Normal, lightDir));

            half3 h = normalize(lightDir + viewDir);
            float nh = max(0, dot(s.Normal, h));
            float spec = pow(nh, _Shininess * 128.0) * s.Specular;

            fixed3 lightFinal =
                (s.Albedo * _LightColor0.rgb * diff +
                 _LightColor0.rgb * _SpecColor.rgb * spec) * atten;

            lightFinal = clamp(lightFinal, _MinBrightness, _MaxBrightness);

            lightFinal = lerp(lightFinal,
                              lightFinal * _OverlayColor.rgb,
                              _OverlayStrength);

            lightFinal += s.Emission;

            return fixed4(lightFinal, s.Alpha);
        }

        void surf (Input IN, inout SurfaceOutput o)
        {
            fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);

            o.Albedo = tex.rgb * _Color.rgb;
            o.Gloss = tex.a;
            o.Specular = _Shininess;

            // Hard alpha test
            o.Alpha = tex.a * _Color.a;

            o.Emission = o.Albedo * _EmissionFloor;
        }

        ENDCG
    }

    FallBack "Legacy Shaders/Transparent/Cutout/Specular"
}

I got a lot more confident with writing shaders and GPU instancing shaders (with help, obviously) until out of nowhere, the muses.. those constant algorithmic processes inside my brain; offered a solution to the abandoned elevator idea:

"Brian. just carve a fucking hole in the wall. Hide those pixels dude!!!"

"No way...

good god..

really?? Hell all this time.."

Had a chat with the AI and yea it was pretty doable. I didn't even attempt the "hole shader" at this point but right away I found myself playing with the elevator idea before sleep.. in the shower.. in my morning workout.

Next day I was working on another project unrelated to Disminal and once I was done with it I opened up blender almost reflexively and tried modelling an Elevator. Opened up my Elevator Inspo folder, checked Pinterest. google images. and I knew i was in a deadly spiral..

IT DOESNT HAVE TO WORK. ITS NOT GOING TO BE PERFECT. IT MAY NOT BE THE ONE. IT DOESNT MATTER.

I JUST GOT TO SEE IT FIT THROUGH A WALL

Oddly enough when you adopt this mentality, beautiful things happen.

Alright. yeah that's right. So I went at it, took the old blender cube, added some baseboards. Kinda placed a panel somewhere, used these security railing from the previous elevator and hey It's not bad. It's good enough.

After a couple of hours fiddling with the design

image.png

Off to a good start, surely better than nothing. the control panel is gonna be a challenge and we'll see about getting those holes in the walls and also baking the elevator lighting so it looks like it's actually part of the scenery. Found a pretty simple solution for that without relying on Unity's skibidi lightmapper. Will show a couple renders in the next one.

Cheers!

Next Entry

Support my work? buy me a coffee maybe

Thoughts? Leave a comment

Comments
  1. Luca — Mar 31, 2026:

    seems like elevators are more liminal than even I realized!

  2. Casey — Apr 6, 2026:

    I am a big fan of liminal space, and Disminal for me is probably what really cracked that door open for me. I like a lot of these games, but Disminal just does it right. Wanted to say too that it inspired me to build my own liminal space game. I hope to read more here, and I hope that there might be more for Disminal in some way in the future. Thank you for Disminal.

  3. gonnetApr 6, 2026:

    @Luca

    seems like elevators are more liminal than even I realized!

    Yes! They are probably the number one medium of transport that is the most liminal to me, that or escalators. They don't get that much appreciation I’m really hoping they become a key element of Disminal this year.


    @Casey

    Wanted to say too that it inspired me to build my own liminal space game.

    That’s great to hear, Casey! You can learn a lot with these kinds of games. I feel like they have the right level of difficulty to be executed by a small team, or even a single person like myself though it can get pretty overwhelming at times. And yes, UE5 is definitely the recommended engine for these kinds of games that mostly rely on accurate visual representations.

  4. thebattybat — Apr 8, 2026:

    i love elevators