Categories
3D Computer Animation Fundamentals Immersion

Unreal Engine – Immersion Project – 37 – Storyboard and Extra Stuff

I set up the player character with specific dimensions to reinforce that child’s perspective – kept the camera height low and the collision capsule narrow enough to navigate those tight spaces between furniture. The thin hitbox lets players walk freely instead of being too restricted in where they can go, the room is restrictive, but I still want it to feel like they are free to explore, which adds to that sense of being small in this space. The first-person camera has a subtle head-bob animation which adds a small sense of realism during movement.

I opted against using motion blur because it would detract from the aesthetic I think, maybe I’ll consider it after some further experimentation but for now it’s not a feature in the camera system. I initially had a field of view, set to 60, but I ended up also removing that.

Just some footage of me testing out eye movement

Given this is a videogame, I have a lot of control over how I want the character to move around the scene. I want to showcase all the elements that make up the environment and so had to create a balance between what a player would/ could do in the level and also show everything I’ve been working on.

I wasn’t able to import and apply sound cues in time for submission, so I opted to add audio in post:

The footsteps on wooden floor is self-explanatory, the plastic bag I actually used for the curtain pulling sound effect, I slowed it a little and reduced the pitch somewhat – it turned out great!

Running on grass was used for the outdoor running scare, I added bass to that and pitched it down also. The atmosphere sound effect was really loud and so I reduced the gain, lowered the pitch and had it loop in the back, it really helped break up the emptiness that was there beforehand. “Drone June” I used for the plushes when they look at the camera, and the other sound effects I sprinkled in just for extra effect. These were all sourced from pixabay.

I made the sound effect above by combining a creaky door sound effect from pixabay (that I slowed down) and cracking sound effects I got from the same site.

I actually made this sound effect myself! I then pitched it down, added bass, slowed down the footage. I did the banging noises in the same sample. The monster noise is literally just me making weird noises into my mic and reversing it.

Categories
3D Computer Animation Fundamentals Immersion

Unreal Engine – Immersion Project – 36 – Fog Settings

Looking at the fog settings I implemented for the bedroom scene, I initially wanted to create a thick, dense atmosphere but decided against it and went for a more subtle look. The primary fog density is set quite high at 1.0, with height falloff of 0.127337 – this creates a layered effect where the fog gets denser as it drops closer to the floor.

The volumetric effect is especially noticeable around the lamp’s radius while still allowing you to see details in the wall drawings. The fog’s presence makes the light feel more three-dimensional and indicates its importance as both a game mechanic and basically the only strong source of vision.

I went with this elaborate flower-like design where amber-tinted panels radiate out from the center. The central light fixture gives off this stark white glow that contrasts nicely with the warmer shade colors.

The wooden board add to the room’s directional lines well. I’m planning to age this up though – I want to add some wear patterns and dirt buildup through vertex painting, especially around high-traffic areas.

I experimented with leaving the closet doors slightly ajar – enough to create this sense of curiosity but not enough to actually see what’s inside. The warm lighting from the room catches just the edges of those blinds, creating these vertical shadows that really emphasize the darkness beyond. I wanted players to naturally question what might be hiding in there, using that universal childhood fear of partially open closets.

The alphabet poster I was going to have change dynamically based on what is going on in the scene, with letters being scratched out etc. I want to add functionality that allows the player to click on certain letters in an arrangement that will trigger events on the CRT TV, but this will have to be for later development.

I then worked with Niagara to add these subtle environmental details, and created this particle system that spawns small white specs to simulate dust motes floating in the air. Set the lifetime values between 0.5 and 1.0 seconds to give them a natural fade-in/fade-out, while the random spawn locations within the room volume create a suspended-in-air-illuminated by light peering out of fog look.

Categories
3D Computer Animation Fundamentals Immersion

Unreal Engine – Immersion Project – 35 – Colour Grading and Extra Props

As you can see, the unedited shadows here are quite flat and dull, the deep, dark shadows do create an unsafe feel but also just feels incomplete

Working with these shadow settings in UE5, I made some key adjustments to move away from those default pure black values. The RGB offset settings (0.03 blue, 0.005 red) help simulate more realistic light behaviour—you never really get true black shadows in real spaces because of ambient light bounce. The ShadowsMax at 0.14 keeps everything lifted just enough to maintain detail without compromising the dark atmosphere.

Looking at the before and after shots, you can clearly see how the blue-tinted shadows change the temperature of the scene. The slightly coloured shadows create this natural feeling of a colder space, which makes sense for a night scene. It’s technically more accurate too – nighttime shadows tend to carry blue tones from moonlight and ambient sky illumination.

The contrast and gamma values at 1.05 help maintain detail visibility while letting those subtle shadow colours come through. You can especially see the difference around the desk area – the objects have better definition now that the shadows aren’t crushing to pure black. Keeping that shadow detail helps with spatial readability while still maintaining the nighttime atmosphere I’m aiming for.

I also added a polaroid picture of an old lady, that I generated with AI and layered grunge effects on top of, this will be placed in one of the photo frames alongside a family photo I made too:

I actually used artbreeder a lot in my FMP back when I was studying Graphic and Media Design, it’s funny how far it’s come yet there are still so many issues with its image generation (especially in faces) but it actually strangely adds to the eerie feel I’m creating.

This is more of a proof of concept, I want to recreate the animated painting/ photo thing from Harry Potter in a way that unnerves the player, potentially as the game goes on and more and more unsettling things happen. This won’t make its way into the build of the game I’ll have ready for submission, but I will definitely continue exploring applications and experimenting further in my own time.

Categories
3D Computer Animation Fundamentals Immersion

Unreal Engine – Immersion Project – 34 – Eye Track

This blueprint handles that creepy effect where the eyes suddenly notice and follow the player after a delay.

Starting with Event BeginPlay and Event Tick handling the timing. I’ve got a 10 second delay node here before the tracking kicks in – this is just an arbitrary number for now for testing. Using Get Player Index and Get Actor Location to track player position in the space.

The functionality is in the Find Look at Rotation nodes – they calculate where the eyes should look based on player location, I then feed that through Get World Location and Set World Rotation to actually move the eyes. Then I added a static mesh reference to control just the eye meshes rather than the whole model.

Got some vector math in there with Break Rotator and Make Rotator handling the actual rotational values. The Normalize node with that tiny 0.0001 tolerance keeps movements smooth. Those Add pins at the bottom constrain the rotation angles – set to 25.0, 60.0, and 21.0 to limit how far the eyes can turn. Keeps them from doing impossible rotations that would break immersion.

Pretty happy with how it looks.

Categories
3D Computer Animation Fundamentals Immersion

Unreal Engine – Immersion Project – 33 – Crayon Drawings

I wanted to tell parts of the story through this childlike perspective. The rough, unsteady lines and basic stick figures really sell that kid’s drawing aesthetic. Each one hints at different parts of the narrative without being too obvious.

The first drawing shows two figures with this towering presence behind them – those black masses with white eyes create this ominous feel despite the simple style. I did some research on children’s imaginary friend drawings to help me get a better idea of what an authentic one would look like.

In the second one, I drew crude interpretations of burlap friends floating around the figures. There’s a door in the back which I felt was important to add, since doors play a big role in the mechanics of the game. The red scribbles on the right figure gives off this violent energy that works quite well for what I’m trying to portray, a child’s anger.

The third drawing’s got this interesting dynamic with the giant grinning burlap friend – much bigger than the figures, suggesting this overwhelming presence. The box on the right suggests that this was a gift.

Fourth one brings in this harsh sun element, but the composition still feels threatening – that tall figure on the left has this imposing presence despite being just black lines. I drew a tombstone on the right as I’d imagine a child to have drawn it, but I’m not sure if this comes across properly.

The last drawing with the bed shows that black mass again, but now it’s clearly more defined, more threatening. The way it towers over the small figure really emphasizes the power dynamic I’m trying to suggest through these drawings.

Categories
3D Computer Animation Fundamentals Immersion

Unreal Engine – Immersion Project – 32 – Player Blueprint

Just gonna go over some of my FirstPersonCharacter blueprint functionalities here

Looking at my blueprint setup, I’m using several “Cast To” nodes to handle the interaction widget display. The line trace by channel detects what the player is looking at, feeding into Cast To Curtain, Chair, BP_PlaySocket and BP_Bed nodes to determine which object was hit.

I’m using tag checks through a break hit result node to identify different interactive objects – curtains, chairs, switches. For the curtain, I added a boolean branch that disables the widget prompt once the animation plays. It’s nice when interaction prompts aren’t shown for something that’s already done its job.

This part handles the camera shake that happens when the player moves around, triggered on tick based on their velocity.

Looking at this camera sequence setup for the bed interaction, I’m using a combination of view target blending and post-process effects to create a smooth first-person transition. Working with Set View Target with Blend gives me that nice smooth camera movement – I’ve tuned the blend time and transition to feel like natural head movement as the player “climbs” onto the bed.

The camera setup uses post-process nodes linked together for the fade effect. Make Vector 4 nodes control fade values and timing, with delays making sure the fade finishes before camera movement starts. Pretty standard stuff, but effective for what I need.

For bed interactions, I’m tracking player position with Get Actor Location, then using Set Actor Relative Location with a Make Vector to mirror their original position when they get out. It gives that natural feeling of actually climbing out of bed rather than just leaving it facing in the same direction as when you got in.

Using Toggle Visibility nodes connected through a Cast To BP_Bed, I’m switching between two duvet meshes – one that’s visible when the player’s just looking at the bed, and another that appears to cover them when they’re in it. Added a small 0.1 second delay to ensure the game properly initiates this code since it decides to just misbehave sometimes.

The BP_Duvet reference and Set Control Rotation nodes ensure everything stays properly aligned during the transition. Really happy with how natural this makes getting in and out of bed feel – adds to that immersive atmosphere.

Categories
3D Computer Animation Fundamentals Immersion

Unreal Engine – Immersion Project – 31 – Another Antagonist

I spent a good chunk of time working on this monster mesh for that chair-trigger scare sequence. I wanted something really unsettling, so I went with this burlap texture and these exaggerated features – those wide eyes and that stretched-out grin. The teeth were particularly fun to model, making them slightly uneven and giving them that pinkish gum texture to create this uncanny contrast with the rough burlap material.

I’ve been wrestling with this mesh in Unreal after bringing it over from Cinema 4D where it looked perfect. The burlap texture and modeling work great here in C4D – I love how the material catches the light and creates these deep shadows in the creases. But when I tried implementing it in UE5, I kept running into these degenerate triangle issues that were making the cloth physics completely unusable.

I really got into experimenting with squash and stretch animations on this one. Had this whole sequence planned where it would compress as it burst through the doorway, then stretch out as it lunged toward the player. The deformation looked amazing in Cinema 4D, especially how the burlap texture would warp and ripple with the movement.

But when I tried exporting it as a DAE file, the poly count was just ridiculous. All those detailed wrinkles in the burlap and the individual teeth geometry added up fast. The file size was way too heavy for what should be a quick jumpscare moment. Plus, all those blend shapes I created for the squash and stretch animations were making the file even more bloated.

I took some time to play around with the material setup for this monster mesh after getting it into UE5. The default look from Cinema 4D was fine, but I wanted to push the creepy factor further. I created this layered material where I added these deep black voids for the eyes, then surrounded them with an emissive white ring texture. The contrast between the dark center and that glowing rim creates this really unsettling look.

I then set up a sequencer that animates the monster when the scare is triggered, I haven’t worked on the animation for the game over sequence yet (if the monster comes in and you haven’t turned the light off in time), but the fact that I got this down and learned how to set it up with the blueprints means I shouldn’t have any problems.

I made this sound effect with a combination of droning noises that I distorted and reversed and normal walking sound effects, the door open/ close I just got for free somewhere on the internet.

Categories
3D Computer Animation Fundamentals Immersion

Unreal Engine – Immersion Project – 30 – Wainscoting and Wainscoting Upgrade

Looking at my initial wainscoting design, I knew I needed to make some serious changes. That first version with the basic black bars was really holding the project back – not just visually, but from a technical standpoint too. The geometry was unnecessarily complex and the lighting interactions were a mess, especially with all those individual segments creating harsh shadows.

I went back to the drawing board and developed this new design with the interwoven pattern along the top. The change makes so much better sense for what I’m trying to achieve. Instead of having separate geometry for each panel divider, I’ve consolidated everything into a single mesh with the pattern detail baked into the normal map. This not only looks more period-appropriate for the Victorian-style room I’m creating, but it’s also way more optimized for real-time rendering.

From a technical perspective, this new version is just working so much better with my lighting setup. The reduced geometry means cleaner lightmap generation, and having most of the detail in the normal map gives me more control over how worn or damaged different sections appear through vertex painting. Plus, it’s going to be way easier to implement those material transitions I have planned for when things start getting weird in the room.

I’ve been experimenting with breaking up the darkness in my environment by adding these strategic white decal highlights. The wallpaper and wainscoting were reading a bit too muddy and flat, so I started placing these lighter decals along the top edge where it meets the ceiling. I’m really happy with how it’s working to create depth – those brighter areas catch the light in a way that makes the architectural details pop more.

Working with vertex painting here to really nail those wear patterns on the wainscoting. I’m using black paint to mark specific areas where I want the material to show more age and damage. It’s interesting how by painting these regions, I can create this natural-looking lightening effect that mimics decades of wear and tear.

I focused particularly on those decorative sections at the top – painting along the edges and corners where you’d naturally see the most damage. I’m letting the design of the wainscoting guide where I place these wear marks. Those curved patterns in the trim make perfect spots for paint to have chipped or worn away over time.

Categories
3D Computer Animation Fundamentals Immersion

Unreal Engine – Immersion Project – 29 – Hand Rig + Door Open Animation and Trigger

The random float in range between 10.0 and 20.0 actually serves as my initial trigger – it determines when the whole sequence kicks off after the player starts the game and when the sequence is reset. I connected this through a delay node that feeds into both the sound system and movement timeline.

What’s neat about this setup is how I offset the audio and visual elements. The sound effects trigger about 5 seconds before any physical movement occurs – this was deliberate, giving players a heads up that something’s about to happen. I implemented this by splitting the signal after the delay node, with one branch going straight to the sound effect and another running through an additional delay before hitting the timeline controller for the door movement.

Above shows my hand interaction system using the bonyLwrist as the control point. I created a timeline that manages the precise positioning of the monster’s hand during the door interaction. The Get Owner node references its skeleton, feeding into a series of Make Vector node that controls its movements. I spent quite a bit of time fine-tuning those Set Relative Location values to make sure the hand placement looks natural when gripping the door.

A low poly version of what I transformed the mesh into, including UVs so that I could implement the material without it stretching

Looking at this section of my blueprint, I’m really happy with how I implemented the room’s color shift during the door sequence. I set up a post-process system that smoothly transitions the room’s color balance when the door event triggers. The Make Vector 4 nodes at the start define my color values – I’ve got them configured to push the room towards a red tint by adjusting the RGB and intensity values.

The post-process transitions work through two phases – I created one vector for the initial state and another for when everything returns to normal. What’s particularly satisfying about this setup is how I used the Set members in PostProcessSettings nodes to handle the actual color grading. These feed into a timeline that controls the transition timing, making sure the color shift feels smooth rather than jarring.

Categories
3D Computer Animation Fundamentals Immersion

Unreal Engine – Immersion Project – 28 – Texture + Mesh Debug

Looking at these debug tools in UE5, they’ve really helped me isolate some performance issues I’ve been struggling with. The material complexity view (showing those red and green overlays in the screenshot) immediately highlighted where I needed to optimize. Some of my materials were way more complex than they needed to be, especially that bed texture I spent so much time on – it looked like all those extra texture samples and material instances were killing performance. I learned here that opacity uses a lot more processing power than masking actually.

I ran into this weird issue where my bed and door meshes would completely disappear whenever I tried to modify post-processing settings during runtime. After digging through the debug data, I realised the problem was that I’d set them up as StaticMeshActors. These aren’t meant to be modified during gameplay, which explains why they were vanishing when I tried to affect the post-process volume as a reference within the playercharacter blueprint. Had to convert them to regular mesh components to get them working properly with the runtime modifications I wanted to implement.

I methodically went through every single blueprint – the door mechanism, the bed movement script, even the drawing spawners I’d set up. Each time I’d disconnect a tick node, I’d run the game again, hoping to see that frame counter climb back up. But the profiler kept showing these massive performance hits. The whole time I’m thinking it’s got to be some blueprint somewhere just eating up resources.

But nope. After all that time hunting down tick events, turns out the real performance killer was the curtain I duplicated. Looking back at the profiler data now, it’s almost funny how clear it is. Those massive red spikes in the debug view weren’t from blueprint execution at all – they were from the physics engine trying to calculate three identical cloth simulations at once, two of which were scaled down (terrible idea).