Portal System

Portal System

Dynamic Lighting Portal System (Performance Booster)

The Dynamic Lighting Portal System provides an easy way to optimize dynamic lighting performance in large levels. Optimization is the key!


Unreal Engine culling is great, but when it comes to dynamic lights, there is still a lot of improvements that can be made.

This tool allows you to get a massive performance boost without any quality loss!

Youtube Demo Here

The portal system toggles lights visibility to "true" only when you can see them, tremendously improving the performance. The performance gain will depend on your level layout and number of dynamic lights.

All you need to do is setup portals and zones (like explained in the tutorial)

All the lights, and this include point lights, spot lights and all the lights attached in blueprints inside a zone will be set to "visible" when:

  1. You are inside the zone

  2. The zone is visible through a portal

The portal visibility check is based on Unreal Engine built in HZB occlusion, so it's extremely fast and efficient performance wise.

To give you a performance idea, we have tested in levels from 4000 to 25 000 actors, with 50 to 500+ dynamic lights, more than half of them casting shadows. Volumetric lighting enabled.

We're getting 30 to 60% performance improvement with this system, making them playable on low end gaming computers (8 years old i7 950 processor and GTX 950 graphic card).

All that in "Epic" settings for everything except shadow (high)!


Obviously performance improvement will vary based on many things. But to compare you should use at least standalone, but shipping configuration is recomanded

Change log:

- Update 1.1 :

new features video :

  1. Added a way to exclude light components from system with "ExcludeFromPortalSystem" tag

  2. Added a way to rebuild system at runtime to support procedural levels

  3. Added a way to notify the system a light has moved

  4. Added a way to add new lights to the system during runtime

  5. Added the possibility to extend portal system from blueprints in order to support custom optimisation

    Can be useful for:
    • - Tick optimisation: You can make some of your blueprints tick only when they are in view
    • - Spawn enemies inside a zone when it's not in the view
    • - Many other things, be creative!

- Update 1.2 :

  1. Fix crash when removing portal/zones while optimisation is enabled in editor

- Update 1.3 :

  1. Fixes for shipping build

  2. Plugin only use isVisible so developpers can use isHiddenInGame

- Update 1.4 :

  1. Renamed some internal structs to avoid conflict with other pluggins

  2. Added a data cleanup on BeginPlay if Dirty State is Detected

- Update 1.5 :

  1. Added Full Support for OpenWorld and Level Streaming

    Exemple : to use
    • Check "ManualRebuildOnly" on the manager before saving and save all your levels
    • In your sub lvl loading logic add the folowing nodes

- Update 1.6 :

  1. Added support for local multiplayer

- Update 1.7 :

  1. Improved code quality ( less struct copy and array realloc )

  2. Improved doc details ( zones colors )

  3. Added logs options to allow easier understanding of current system state

Classes

Portal System Manager
Portal System Occluder Component
Portal System Portal
Portal System Zone