CGI Foundation

Week 1

In the Unreal Engine 5 lecture, I delved into the technical aspects of the engine, focusing on its features and capabilities. I learned about the navigation, world building, and playable demonstrations, which revolutionizes detail in virtual environments.

During the hands-on portion, I applied this knowledge to design an obstacle course mini-game. Using Unreal Engine 5’s intuitive interface, I began by creating basic shapes and objects, manipulating textures, and setting up lighting to enhance the visual appeal of the virtual world.

Utilizing the engine’s robust physics system, I implemented interactive elements such as moving platforms and rotating obstacles to challenge players. Through precise placement and fine-tuning, I ensured the gameplay experience was engaging and balanced.

Throughout the process, I experimented with various tools and techniques, iterating on my design to optimize performance and aesthetics.

In summary, I applied my understanding of Unreal Engine 5’s technical capabilities to design and implement an engaging obstacle course mini-game, showcasing both my creative vision and technical proficiency in game development.

This is my second attempt at an obstacle course:

The main method I used to make this level is activating physics simulation for my objects

Note:

What is an actor in Unreal Engine?

Is a fundamental building block used to create interactive elements within a game or application. Actors are objects within the game world that can be placed, manipulated, and interacted with.  characters, objects, lights, cameras, triggers, and more.

Here is an example of  commonly used type of actor:

Static mesh which represent static objects in the game world, such as buildings, rocks, trees, and other environmental elements.

Static meshes

What is a component in Unreal Engine?

Is a modular piece of functionality that can be attached to actors to add specific behaviors, features, or functionality to them. Components are reusable and can be shared across multiple actors, allowing for efficient development and organization of game logic.

Here are two common types of components:

Collision component defines the collision shape and behavior of an actor, allowing it to interact with other actors in the game world.

The first cube will hit the second cube and cause it to move.

The mass of the first cube pushed the 2nd cube when it hit it.

Week 2:

This week’s lecture was all about texturing. I learned how it works in Unreal Engine 5. Knowing how I texture, I can now render significantly more realistic scenes. This is the process of doing so:

The texture maps I used all come from “Poly Haven”.

Poly Haven

This is what the node editor looked like at first glance.

These are the essential node groups for a basic martial.

After the matrial was finsihed and saved, navigate to the matrial folder. Drag the material icon of choice to the desired static mesh in your scene.

This is my first attempt at a texture.

My second attempt. Both the first and second were created using first party texture maps which were limited.

I imported this Denim jeans texture I got from Poly Haven by dragging its file into the material file in Unreal.

I used its image as both color and normal map. And this is what it looked like.

If you right click on the material icon, a menu appears. One option on the menu is to create an instance. This duplicates the material. However, before doing so, in the node editor you should do the same action to any adjustable node of your choice so you can change the material of the duplicate without having to change the material of the original mesh.

This is my first attempt at making an instance material.

This is my node set up for the Denim jeans material.

For my final project, I aim to combine multiple image mapping textures with a multiply node to form unique textures for my scene that can allow me to have control over multiple factors in the texture such as how dirty it is, how light passes through it and which one of the multiple image textures is dominant or co-dominant over the other or others.

Here are some more martials I created in Unreal Engine, I used texture maps from Poly Haven:

Week 3:

In this week I learned how to make a landscape in Unreal Engine 5.

To make such a large model, I used features that go as the following:

-Sculpting tools

-Texture painting

-Geometric brushes for a model within the landscape

-Foliage

I will demonstrate how I used them now:

There are 2 ways to make a landscape, 1-manually by sculpting it from a flat plane or automatically by importing a height map.

 

This is the manual way:

Upon opening Unreal, I switched from select mode to landscape mode.

This is the landscape hud.

These are the sculpting tools.

The basic sculpt extrudes any surface as if it were clay.

The smooth tool softens the harder edge giving a soon to be mountain a more natural look.

The flatten tool helped me create planes on my mountain which was were I planned to position my cabin.

The ramp tool gives you two points to freely move and place. Once placed, they form a bridge in between each other.

The erosion tool makes a ramp shaped object more vertically flat.

The hydro tool does the same as the erosion tool but for flat surfaces.

This was the landscape I made using the tools.

This is the height map method:

I selected the import map option.

This is the height map for the normals, I used.

After clicking import, this is what the landscape looked like.

I added a temporary material in the landscape’s own material menu.

I added a lake and an ocean using the “all classes” menu Unreal provides.

When making the matreal I was going to iuse for the landscape, I imported a “Landscape Layer blend node” in my editor which allowed me to create my own outputs which act as layers for my texture.

The texture samples each provided a specific texture.

I applied my texture to the landscape. However, it was plane blank.

I switched to paint mode, and added “weight blended layer” to each material. This would allow me to paint using each material upon selecting it in specific areas.

I painted the island and this is what I came up with.

I added a landscape coordinate node so my tiles would not be repeated on my island.

This is how my texture node map looked like at the end.

Geometry brush mesh adjusts itself when it is scaled to properly fit the UV map without stretching it.

Foliage is a paintbrush that colors any area with a specific static mesh. I can control the density to add multiple trees with distance from each other or add condescended amounts of grass.

After re-applying the techniques I learned, I came up with this scene of a graveyard like cabin which was made using geometry brushes.

This was my second attempt at a cabin in a landscape:

Week 4:

I learned of the different types of lighting in Unreal Engine 5 and how I could use them to my best advantage.

These are the different types of lights and their use:

1-Directional lights: A source that emits light in a specific direction uniformly across the entire scene, simulating the light coming from a distant source such as the sun. It provides consistent lighting across the entire scene without any attenuation over distance, making it suitable for simulating daylight or moonlight.

2-Spot light: A source that emits light in a specific direction within a cone-shaped area, simulating a focused beam of light. Unlike directional lights which emit light uniformly in a particular direction, spot lights have a defined origin point and a cone-shaped beam that extends outwards, with control over parameters such as cone angle, attenuation, intensity, and color.

3-Point light: A source that emits light uniformly in all directions from a specific point in space, creating an omnidirectional lighting effect. Unlike directional lights, which emit light in a specific direction, and spot lights, which emit light within a cone-shaped area, point lights radiate light outward in all directions from a single point.

4-Rect light: A source that emits light from a rectangular-shaped area. This light type is designed to provide a large, uniform distribution of light, similar to fluorescent or LED panels in real life. Rect Lights are particularly useful for illuminating large indoor spaces or architectural scenes where soft, even lighting is desired.

5-Lumin light: A global illumination system introduced in Unreal Engine 5. Lumen is designed to provide dynamic, realistic lighting in real-time without the need for pre-computation or baking.

Note: there are 2 types of illumination in Unreal Engine “Brute force” which offers quality and “Final gather” which offers performance.

Using my newfound knowledge on lighting in Unreal Engine 5, I constructed a scene with the unique different types of lights that I mentioned above. This is my result:

This scene is based on Len Kamenski’s “Dragon Seed Saga” Iron Man run.

Week 5:

In today’s lecture I learned the following and their function: sequencer, cameras and post processing in Unreal Engine 5.

My goal was to set up a short scene of my project. In this case I picked last week’s work. (First images above these texts).

Sequencer: used to make cut scenes and cinematic in Unreal Engine using a timeline like Adobe Premier Pro. It can also animate characters, cameras, properties and many more using key-frames. To start key-framing add a level sequence from the cinematic menu. Then save it on your hard-drive.

Unreal Engine also provides me with different kinds of cameras to create a full cut scene within my sequence.

The process of creating a sequence:

I created a new file “sequence” in my content browser.

In the cinematic window, I added my level sequence which was going to allow me to create my scene using a timeline.

I added the level sequence to my newly created file.

The timeline appeared in my window.

I added a cine camera to my scene for it to be how I track my scene within the sequence.

There are 2 methods to use the camera. Either manually as if it is any other object with the gizmo tool or “Pilot” mode where the view port acts as your camera.

To exit pilot mode, click on the following eject button shown in the image above.

I clicked on track to add option for my camera which the sequence was going to use.

I selected which camera I wanted. In my case I only had one.

This was my timeline so far.

To add a key-frame-able property, I added a transform track to my camera.

To add any key-frames, with the transform button selected, click enter anywhere desirable on the timeline.

I can also set the camera to fixate on only one object when it is moving.

This was my first test run’s final product:

Blueprints: allows me to render my scene in real time.

I added a new empty blueprint class.

I added a trigger box.

I opened the level blueprints to access the trigger box’s node editor.

This was my final node set up.

A trigger box is an intractable object which allows the player to “trigger” all kinds of things. In my case I set it to real time render.

Post processing volume: an area you can add which acts as a sub world with its own features that does not effect those same features within the actual scene. I can also key-frame its attributes so my scene changes certain features midway through my sequence.

I added the post-processing volume.

I picked what I wanted it to do.

This is the volume’s location.

When the player reaches its perimeter, they are able to see its temporary features.

For this scene’s final result,

-I will have them move into a post processing volume cube.

-I will animate my camera’s movements within the scene.

 

Week 6:

Blueprints:

are a visual scripting system that allows developers to create gameplay elements, interactions, and behaviors without the need for traditional programming. Blueprints use a node-based interface where users can visually connect various nodes representing functions, events, variables, and logic to create game functionality.

Here’s a breakdown of key aspects of blueprints in Unreal Engine 5:

Visual Scripting Interface: Blueprints provide a visual scripting interface where developers can drag and drop nodes onto a canvas and connect them to create scripts. This interface is intuitive and allows for rapid prototyping and iteration.

Nodes: Nodes represent different actions, events, variables, and logic operations. These nodes can be connected to define the flow of execution within the script.

Event-driven: Blueprints are often driven by events such as player input, collision detection, or game state changes. Developers can create event handlers to respond to these events and trigger specific actions.

Customization: Blueprints allow for a high degree of customization. Developers can create custom nodes, functions, and variables to encapsulate complex logic and behavior.

Code Integration: While blueprints are primarily a visual scripting system, they can also integrate with traditional programming code written in C++ within the same project. This allows for flexibility in combining visual scripting with low-level programming for performance-critical tasks.

Debugging and Testing: Unreal Engine provides tools for debugging and testing blueprints, including breakpoints, stepping through execution, and visualizing variable values during runtime.

Overall, blueprints in Unreal Engine 5 offer a powerful and accessible way for developers to create gameplay mechanics, interactions, and systems without the need for extensive programming knowledge. They are widely used in both indie and AAA game development for their efficiency and versatility.

I created a new level blueprint

This opened a node editor tab.

A string is a word that appears when a player is with in the world. I used the following nodes to make a string that appears and stays upon pressing play.

I can add a delay node to make the engine wait for a specific amount of time until it prints my string on the screen.

This node endlessly spams my string upon pressing play.

The following images demonstrates a variable costume node

I wanted to add a trigger box so that when getting close to it, a light would project from it.

I created a new blueprint for my trigger box

The node editor the blueprint opened

An instance edible variable grants the node to control any feature of the trigger box upon getting close to it.

I made the trigger box’s edited instance a yellow light.

This is what it looked like at all times. Now to make it so that it only lights when it is approached.

I added my costume variable nodes.

This is the node set up.

When I am far.

When I get close.

To further test my skills, I applied the same process on a different aspect of an object which was physics.

 

 

What is a Variable in Unreal Engine?

A data container that can store different types of information, such as numbers, text, objects, or custom data structures. Variables are fundamental elements used in programming to hold and manipulate data within the game logic. They are utilized in Blueprints, which is Unreal Engine’s visual scripting system, as well as in C++ programming for more advanced customization and performance optimization.

Variables can be declared with different scopes, such as:

Local Variables: These are declared within a specific function or event and are accessible only within that scope.

Instance Variables: Also known as member variables, these are associated with an instance of a class or blueprint and retain their values as long as the instance exists.

Class Variables: These are shared among all instances of a class and are declared as static variables in C++.

Variables can also have different access modifiers, such as public, private, or protected, which determine their visibility and accessibility from other parts of the code.

In Unreal Engine 5’s Blueprint system, variables can be easily created and manipulated using nodes and connectors to represent data flow and logic. They are essential for implementing game mechanics, storing player data, managing object properties, and much more.

Week 6 bonus activity:
Random order of rotation for 3 different cubes:
Week 7

The objective: Create a simple single layer water material as shown in the
next slide.

The objective: attempt to customize it further, with parameters to

-create 2 other unique water materials.

– A parameter to change the color of the water.

– A parameter to change the speed of the waves.

– Explore Scattering Coefficient

This is my process:

I created a new material for my water and set the shading model to single layer water.

This was my node set up with the function of the nodes that I was not native to. (speed refers to wave speed)

This is how my water martial looked like.

I wanted to make another water matral that was diffrent to the one I just made. Repeating the steps would have wasted time. Hence I used paramters to change the color of my water so later on I can create a material instance e and be able to adjust these values individually.

Creating the martial instance for my second water…

This was my new water texture. It is meant to be swamp water.

This is the instance I made for my water with the adjustable color parameters.

This is how my material instance looked like.

I also added parameters to my wave speed (so I can adjust them if I were to make a material instance) and deduced that darker colors slow down the waves where as lighter ones make them go faster.

What is a “Scattering Coefficient” in water materials?
When the scattering coefficient is high, light will scatter within the inside of the object it is emitting to and hence making it brighter. This is how light works normally.
When the scattering coefficient is low, light will not scatter but will go through the object within its emission. The same way light passes effortlessly through leaves and flowers. This would make the object remain unlit however, would bend the direction of light in the object’s orientation.
Note: if you were to only select 1 color in your scaler parameter such as blue, the light in your scene would only pass through any blue object and avoid reds and greens.
The process continues!

I picked blue to be the color that light passes through since it is the color it takes from the sky’s reflection.

This is how my water looked like now. It was brighter because light was being scattered in it. For comparison, the image below is how it looked like at first.

This is how my water martial initially looked like.

Week 7 bonus work:

Create a simple toon shader post processing material.

-Refer to the next slide on how to achieve this!

– Remember to set the material domain and blendable
location in the details panel of your material!

-Remember to set your post processing volume to infinite
extend unbound to apply to the entire scene!

I created a new martial and changed its blending mode to translucent to obtain the emmisive color node attribute. I also, changed its martial domain to “Post Process” so that way it would be compatible with post processing volumes.

This node’s attributes could be accessed in its native details panel.

I added my post processing volume and enabled “Infinite Extend (Unbound) so the volume would affect the whole scene with he material I was going to assign to it.

I assigned my toon material to my post processing volume.

This was my toon material’s node set up.

This is how my toon material looked and was lit like on a sphere, native dirt material and my recently created water material.

Week 8:

Particle systems

The Niagara Particle System: is a powerful visual effects system within Unreal Engine that allows developers to create complex and dynamic particle effects. It offers a node-based interface for designing particle behavior and interactions, enabling developers to create a wide range of effects such as fire, smoke, explosions, weather, and more.

Key features of the Niagara Particle System include:

Node-based Workflow: Niagara provides a flexible and intuitive node-based interface for designing particle systems. This allows developers to visually create and manipulate particle behavior without needing to write complex code.

Real-time Interactivity: Niagara enables real-time interactivity and responsiveness in particle effects, allowing them to react dynamically to changes in the game environment, user input, or other factors.

Scalability: Niagara is designed to scale efficiently across different platforms and hardware configurations, allowing developers to create high-quality particle effects that perform well on a wide range of devices.

Performance Optimization: Niagara includes tools and features for optimizing the performance of particle effects, such as LOD (Level of Detail) settings, culling options, and efficient memory management.

Extensibility: Niagara is highly extensible, allowing developers to create custom modules, effects, and behaviors to suit their specific needs. It also supports integration with other Unreal Engine systems and features.

Overall, the Niagara Particle System in Unreal Engine 5 likely builds upon these features while also introducing new capabilities and improvements to enhance the creation of immersive and visually stunning particle effects in games and interactive experiences. For the most up-to-date information and details on the Niagara Particle System in Unreal Engine 5, I recommend consulting the official Unreal Engine documentation or community resources.

Practicing the Niagara particle system:

I added the Niagara system from my content browser

I started off without a template

This was the node editor where I added an emitter by right clicking

I picked the fountain preset from my emiter

This was the emitter node which allowed me to control all kinds of aspects of my emitter such as its scale, spawn rate, color, texture and etc…

I created a new translucent material for my emitter to seem more natural rather than spawn solid matter

This was my material’s node set up

I assigned my material to the particle system

I disabled gravity so my particles could float

I had my particles scale at random based on a max value I set.

In the previous video, my material was running in an invite loop, so I disabled “auto activate” to stop that

I added a trigger box which was going to act as the spawner for my particle system

I opened my level blueprint

I had my particle system selected

I set up my particle system’s blueprints as shown

I had my trigger box selected

This is how I set up my level blueprint so my particle system would play when approaching the trigger box

Week 9:
How to add a working health system to the player in unreal engine:

I opened my third person blueprint

I created a new blueprint which was going to contribute to the damage my player was going to take.

This was the node set up I made for the damage factor.

This is the node set up I made in my third person blueprint so only my character and not any other object would receive damage from my desired source.

To make my visual health bar I added a widget blueprint.

This is what I set my health bar to look like.

The health bar’s node set up so it knows when to decrease in value.

I added a trigger box which was going to be the area my player would take damage in.

I added these nodes to my third person blueprint so the health bar appears in my viewport.

This was my node set up for the trigger box to cause damage to my player.

I set the amount of damage my player was going to receive when entering the trigger box once.

Week 10:

Blueprint Animation:

In Unreal Engine 5, a skeletal mesh is a type of asset used for character animation. It consists of two main components: the mesh itself, which defines the physical shape of the character, and a skeleton, which defines the hierarchical structure of bones within the character.

Here’s a breakdown:

Mesh: This is the visible representation of the character or object in the game world. It includes the 3D geometry that defines the shape and appearance of the character.

Skeleton: The skeleton is a hierarchical structure made up of bones. Each bone represents a specific part of the character’s body, such as arms, legs, spine, etc. The bones are connected in a hierarchy, allowing for complex animations where movement of one bone affects the movement of connected bones.

Animations: Skeletal meshes are often used in conjunction with animation data. Animations define how the bones of the skeleton move over time, allowing for realistic movement and actions such as walking, running, jumping, etc.

In Unreal Engine 5, skeletal meshes are commonly used for characters, but they can also be used for any object that requires complex animations or deformation, such as creatures, vehicles, or even objects like doors or machinery.

Skeletal meshes are an essential part of character animation in Unreal Engine games, providing the foundation for lifelike movement and interaction within the game world.

I can download animation presets with their own skeletal mesh from the website “Mixamo”. It is important that the character is in an intial postion of a T, this helps the software apply animations more easily to my mesh. Link:
https://www.mixamo.com/#/

I opened a third person project in Unreal Engine 5.

I downloaded my animation presets.

In my content browser I created a new file where I was going to store all things to do with my animations.

Upon dragging my skeletal mesh “block man” it is crucial to actually tell the software to treat it as a skeletal mesh.

I replaced Unreal’s default third person player with my own block man.

I dragged and imported my animations.

I created a blend sequence which helps me visualize how my animations would look like when applied to my skeletal mesh. I can also adjust their velocity of which they are performed.

In the blend sequence I can drag to add any of my animation presets into the timeline.

Hold down control to move the “X” mark under where you would like to view each animation.

To apply these animations to my scene I created an Animation blueprint.

Blend space

I promoted the velocity to a variable.

I set up these nodes in my animation blueprint’s event graph.

I went back to the blend space and set up the animations I wanted to apply to my scene and in which order I wanted them to occur.

I added the following nodes to my event graph so I can later on add some variables for my animations.

These are transitions I can access to tell the software when I want the falling preset to be true or false. For example: logically when one is changing between falling and walking, the fall has to be true.

Some animation transitions are basic such as jumping to falling will always give you the same result of having the fall to be true. Hence I set it to automatic.

When I have 2 transitions I can which one would take priority. In this case walking to falling takes priority for a more logical result.

I set up these nodes in my 3rd person blueprint.

I set up these nodes in my animation’s blueprint’s event graph.

The interactive version of my animation blueprint’s event graph:

I applied my animation blueprint to my block man character.

The final result:

Final project:

Interior and exterior post-apocalypse construction site:

My process:

I opened a new empty level in Unreal Engine 5.

To add a realistic sky:

The volumetric sky is another element a real world sky would have that would contribute to its authenticity.

The sky

I pictured mt scene with a plane landscape since most construction sites would be found in a flat ground city.

My landscape:

I began by adding wall meshes to create the basic outline of my site. additionally, I added a character mesh for reference to see how big I wanted my scene to be.

My site’s ceiling was placed like this to allow rays of sunlight to shine through certain areas in my site.

For my site’s interior I added some pilers.

I added external rooms and gave them a door from within.

I downloaded some assets from the Epic Games Unreal market place.
These uncompleted/broken ceiling panels looked good on the edges of my site.

I decided to cover the second area of my site with the panels and texture the pilers with a concrete material since concrete is a reoccurring element in a construction site.

I imported some textures from the marketplace and scaled them so they would be placed evenly on my walls.

Next, I plan to add stencils found in the marketplace.

This is how I envisioned the sun rays shinning through my ceiling gaps earlier.

I began importing 3D assets in bulk in the form of 3D packs.

I wanted to give my site a “nature reclaiming” look so I added some plant assets which were going to be spread out through my scene using Unreal’s foliage system.

The foliage system’s hud and paint tool.

Since my interior scene was now set up, to film my site, I added a “Cine camera actor”.

To put my camera where my perspective in the viewport is:

To check my camera’s view:

To add a timeline where I can keyframe my camera’s movements:

Red: timeline
Purple: Keyframe tools and settings
The timeline is added an invisible physical object to my scene as everything else is in Unreal Engine.

I dragged my camera to the settings area of my timeline to add it, in order to keyframe its properties.

My camera’s settings:

My camera’s settings:

My camera’s settings:

My camera’s settings:

My camera’s settings:

My camera’s settings:

I repositioned my light to shine through my ceiling and cast shadows in certain areas to make the interior lighting seem more realistic due to the various irregular hallow objects acting as stencils for my light rays.

My camera’s settings:

To add a keyframe for my camera in the timeline:

An alternative method I wanted to use to record my scene is a “take recorder” which I can link to an actor for example my player’s perspective and have the scene filmed from their eyes.

To make my player’s first person camera:

Linking my first person camera to the take recorder:

Where my recorded scenes being out-putted to:

Adding the take recorder first person scene to my level sequence to render:

To give my first person player a flashlight effect using its blueprints:

To make the flashlight effect more visible I dimmed the lighting which made it night time.

I added more assets

I placed an area light in front of my light pole meshes to make it seem as if they were still operational and lighting the site. Although I did leave some with no light so that it would seem broken from the apocalypse.

I turned my scene into daytime again.

My interior so far:

To add a dust particle effect, I used the “Niagara” particle system Unreal provided me with.

My particle system’s settings:

To make my exterior, I added assets such as buildings, cars and roads. The outside was simpler than the inside because it was comparably larger. Thus smaller details would not be noticed as much.

My final products:
Credits:
Assets from Unreal marketplace:
-Mega scan abandoned apartments
-Construction Vol.1
-Construction Vol.2
-Industry pack 6
-MS crumbled WA
-Soul City
-Vehicle variety pack
The audio being used in the video: