top of page

Niagara System - Rain
 

The rain system was created to reinforce the atmosphere and environmental storytelling of the swamp environment.

Continuous rainfall enhances the sense of dampness, decay, and isolation commonly associated with swamp settings, while also helping to unify lighting, materials, and surface reflections within the scene.

image.png
image.png

Rain - Emitter 
 

The rain system uses a minimal emitter named rain. Particle generation is controlled through a Spawn Rate module initially set to emit 5000 particles per second, producing a dense and continuous rainfall effect. This value was later reduced to 2000 particles per second to improve overall performance.

image.png

A Shape Location module is added using a box shape. The size of the box is configured to be dependent on the system requirements, allowing flexible coverage of the scene.

Using the Initialise Particle module set Sprite size - random non-uniform.

The
minimum X between 0.1 and 10, while the maximum Y range between 1 and 50.

Shapelocation.jpg
initialis part.jpg
issue fix.jpg
velocity.jpg

Add Velocity module.

Fix issue - Add Dependency module Solve Forces and Velocity dependency Velocity.

Velocity - Random Range Vector 

Y axis ranging 400 to 900 

Z axis ranging -900 to -1200

Producing downward motion with variation.

Sprite Render - Alignment - Velocity Aligned

saprite renbder.jpg

Initialise Particle - Lifetime - 2.0 - Rain disappears naturally 

Life time.jpg
collsionRadiusscale.jpg
Kill Part.jpg

Particle Update - add Collision so the rain collides with the floor.

Set particle radius scale to 0.1.

Add Kill Particles

select Has Collided from the drop-down search.

Col event.jpg
Persist ID.jpg

Particle Update - add Generate Collision Event.

Properties - Persistent IDs - TRUE

Splash Collision - Emitter 
 

Niagara System - Rain


Splashes

Minimal emitter: splashes. Use an Event Handler with the source emitter set to rain and the event set to Collision Event.

Set Execution Mode to Spawned Particles and the spawn number to 10.

Receive Collision Event with values set from 0.2 to 1, and Y from 2 to 3.

Fix the issue on spawn.

Set Particle Spawn sprite mode to Random Non-Uniform.

Set velocity speed to 155.

Add Gravity in Particle Update using a Gravity Force and set Z to -380.

Set Sprite Renderer alignment to Velocity Aligned.

Set lifetime to 0.25.

image.png
shack_punch.png

Environment Creation

For this assessment, I was required to create a digital world in Unreal Engine, bringing my initial plans from Term 3 Assessment 2 to life while documenting the creative process applied. This included explaining how I incorporated peer and mentor feedback into the development of my environment design.

1. Select suitable reference imagery of the real world.

2. -.

3. Explain my production processes...

Landscape Blending

MSBlendMat.png
image.png
image.png
runtime vol.png

Enabling Tessellation 

Config.png
DefaultEngine.png

Config > DefaultEngine.ini

Create and set - 
r.Nanite.AllowTessellation=1
r.Nanite.Tessellation=1

 

Use Cases for Nanite Tessellation

  • Photorealistic Landscapes – Improve terrain detail dynamically

  • Organic Surfaces - Add fine surface bumps without baked models

  • Close-up Cinematic Assets – Enhance characters and props.

  • Virtual Production & LOD Walls – Adjust detail dynamically based on camera distance
     

Limitations 

  • Performance Impact – Increases compute load.

  • LOD Adjustments – Nanite dynamically adjusts tessellated areas.

  • No Full Tessellation Support Yet.

Displacemnet graph.png
image.png
image.png
image.png

Material Output Node - Enable Tessellation - TRUE

Nanitelandscape.png

Nanite - TRUE through landscape 

Nanite will also need to
TRUE through any desired Mesh

image.png
image.png

Nanite Displacement 

HighresScreenshot00007.png
HighresScreenshot00008.png

Before

After

Start-up Commands 

Certain location on the level were causing crashes when approached. the issue didn't turn out to be asset, lighting, or post-processing related, as removal; of these things didn't resolve the crashes. 

When using Profile GPU (Ctrl + Shift + , Comma), the issue was reported as "insufficient GPU memory reserved for ray-tracing geometry". 

The memory pool for ray-traced geometry was too small, causing the GPU to run out of available memory when streaming assets in the area.

The solution was applied through a console command: “r.RayTracing.ResidentGeometryMemoryPoolSizeInMB”.

Manually executing this command at the start of each session was not reasonable; therefore, start-up commands were required.

Creation of a “DefaultEditorPerProjectUserSettings.ini” was required in Config.

Editor Utility Blueprints were added to initiate the required start-up command.

Once implemented, the issue was fully resolved.

Ideally, the preferred course of action is comprehensive optimisation rather than repeatedly increasing the memory pool size, as continually addressing each occurrence in this manner would compound overall performance costs.


 

Screenshot 2025-12-06 160759.png
Screenshot 2025-12-06 160826.png
image.png
Screenshot 2025-12-04 162952.png

Asset building 

Manually creating Blueprint-driven vegetation assets to dress tree meshes, which are subsequently converted into Foliage Static Mesh instances.

This method of creating foliage assets was extraordinarily taxing on performance, as each dressed foliage asset contained thousands of additional polygons

 

HighresScreenshot00002.png
Screenshot 2026-01-20 203817.png

Shack Replacement  

In a separate level, I constructed the shack using multiple FAB assets. These were manually placed to create a deliberately gapped structure, allowing light leakage and giving the only warm-toned asset a clear visual presence within the scene.

This was later brought into the main level as a Level Instance, ensuring it introduced no performance issues while remaining easily adjustable.

shack.png
image.png
HighresScreenshot00021.png

Replacing placeholder assets



 

lumen enable.png
Hardware ray tarce.png
Lumen.png
softwareray trace.png
directx.png

Post-Processing

Enables access to all Lumen-related settings.
 

Infinite Extent (Unbound) - TRUE ensures the entire scene is affected by the post-process changes, regardless of camera position.
 

Exposure - Metering Mode set to Manual prevents auto exposure. This avoids the scene brightening or darkening in response to camera movement and improves accuracy when evaluating true light intensity.
 

Lumen Scene Quality - 2.0 controls overall Lumen quality. Lower values can introduce noise and fireflies, while higher values produce cleaner global illumination and sharper reflections at increased performance cost.
 

Lumen Scene Detail - 4.0 adjusts how Lumen affects small and distant meshes. Reducing this value can provide meaningful GPU savings with minimal noticeable visual loss.

Final Gather Quality - Higher values to decrease noise within camera view, highly costly for GPU performance.


Reflections and Occlusion

Default - Lumen 

Any increase in Quality will also increase GPU costs


Ray Lighting Mode - TRUE - Hit Lighting for Reflection, Evaluates the actual ray hit point, responding more accurately ensuring reflections to match better in main view. Costly for GPU.

Screen Space Ambient Occlusion (SSAO) control - console command 
"r.Lumen.ScreenProbeGather.ShortRangeAO 0" or "1" for Lumen
    and 
"r.Lumen.diffuseindirect.ssao 1" or "0"

SSAO better for GPU -
but doesn't generate Photorealistic output.

Individual light set Cast Ray Traced Shadows - Enabled 


 

Lumen Project Settings

Lumen Unreal Engine's default lighting system,  best suited to dynamic lighting workflows, delivering high-quality real-time global illumination and reflections.
 

MegaLights are not required to use Lumen effectively. Instead, they are designed to simplify lighting workflows by allowing extensive use of dynamic lights without constant concern for performance budgets.

Hardware ray tracing does increase quaklity if needed but at the cost of performace 


 

image.png
Unbound.png
Unbound.png
Metering mode.png
Lumen detail.png
Hit lumen refelcvtions.png
HIgh qual Hit lumen refelcvtions.png
light-raytraced.png
bottom of page