![]()
@yujiang.wang it was just a matter of time How to Get GPU Lightmass Working with HLODs? ![]()
Well, I may add support for WP HLODs in the future. But they are very different from 4.27 HLODs.
Correct, but UE5 still has regular HLODs (at least 5.5.x had them), which is a critical part of assets optimization for lower end platforms.
If we can’t use GPU Lightmass with HLODs in 5.7 whats the process for making open world levels? Because CPU Lightmass doesn’t work with ‘Lightmass Importance Volume’. So Using GPU Lightmass is necessary. It’s like a catch 22.
Right now GPULM has no support for open world.
Edit: I’ve already solved it, my mistake. I think it was because nanite was enabled on the prototyping meshes, I didn’t know they came like that by default.
Everything works like a charm, thank you very much!
Hello everyone, I’m a newbie getting familiar with baked lighting. I’ve realized that the last version in which the GPU Lightmass plugin works correctly for me without using Virtual Shadow Maps is 5.4, so I’m trying to use this alternative in 5.7, but the following problem arises:
When baking static lights, no shadows from static objects are generated in the lightmaps, only lighting.
Could anyone give me some advice on what might be happening?
Thanks!
GPULM does support Nanite, so that’s sort of weird. You may want to check if ‘support ray tracing’ or something else.
Release 5.7.2 2026.02.09
https://downloads.luoshuangfw.io/gpulm-releases/GPULM-5.7.2.7z
Back to release list
No new features added (i.e. no WP/HLOD support). This version just makes sure that GPULM will not crash instantly on larger projects like Titan (by either hitting VT check(Index <= 0xffff); or some D3D12 issues. If the scene is too large it will still crash eventually because of OOM.
Would it be possible to write bounce lighting from Stationary Skylights to the skylight lightmap instead of the main lightmap?
If I recall correctly, stationary skylights store their lighting as a bent normal map and I’m guessing during the lighting build, it’s multiplied by a scalar to get the intensity of the skylight for a given point.
This is fine for direct sky visibility but it doesn’t account for bounced lighting which means that when the stationary skylight’s intensity/color change at runtime, only surfaces directly visible to the sky will update their lighting, all of the bounced lighting from the skylight stays static. In order to work around this problem I have been using a skylight with 0 indirect lighting intensity, which keeps things from glowing at night but it makes interiors very dark.
I can live with that, but I saw that in Unity’s new GI probe setup they have a real solution to this. They give you the option to also bake bounced lighting from the sky: Unity 6's New Global Illumination Lighting Features

There’s an obvious problem here of course: If you’re still only storing a bent normal and a magnitude then you can’t do color bleeding from bounced light. The way Unity deals with this is that they just… don’t… Lighting from skylight and bounces are computed as if all surfaces were flat gray. So it’s not really “bounced lighting” so much as it is “Bounced Sky Visibility”
Obviously, this is not as good as “real” GI, but it’s still miles better than only having updated lighting for points directly visible to the sky.
Maybe I’m wrong but it seems like this does not require storing any additional data in the lightmaps, nor changing the surface shader because and they could be sampled the same way. It would only need to be accounted for during the lighting build.
I totally understand if you don’t want to implement this, I have no idea how much work it is, was just something I have been thinking about ![]()
Release 5.7.2 2026.02.10
https://downloads.luoshuangfw.io/gpulm-releases/GPULM-5.7.2.7z
Back to release list
Important changes
- GPU Lightmass speed mode is no longer tied to viewport realtime. Instead, you manually switch between low and full speed.
- Interactive preview is now opt-in. Before this change, GPULM needed to allocate a big-enough pool (size controlled by GPULM Settings → System → Lightmap Tile Pool Size) so that it can contain all the tiles on your screen needed for interactive preview. The default value resulted in 55^2 tiles allocated which translated to ~1.5GB VRAM.
- Now if interactive preview is turned off, GPULM will only allocate the minimal amount of VRAM which is around ~200MB. GPULM will also switch to full speed automatically.
- If virtual texturing & virtual texture lightmaps are disabled, GPULM will disable interactive preview and switch to full bake as well.
Release 5.7.3 2026.02.12
https://downloads.luoshuangfw.io/gpulm-releases/GPULM-5.7.3.7z
Back to release list
Is there an explanation on how to install this? Sifting through six years of forum replies is a bit much.
I tried adding the files from the download folder to the Engine folder, but my project wouldn’t even open until I repaired Unreal Engine. Maybe I had the wrong release or something. I’ll try the new one tonight.
Also, thank you for your hard work!
As far as I know, you are doing it correctly. I think you need to copy and replace the exact patch version files, for example, GPULM-5.7.3.7z for the latest version that was just updated.
GPULM is working really nicely! Our scenes are looking great.
A feature request if possible:
Is it possible to support spline meshes?
We have some very standard spline mesh actors, that add spline mesh components between points on a spline. Train tracks, railings, etc.
Right now, I believe that the system only bakes the first spline mesh, and then applies that lightmap to every instance (seen below). Is it possible to fully support spline meshes at all?
Edit: If you’re interested we’d love spline meshes to support using Emissive for static lighting as well, as we have a lot of glowy wires, etc ![]()
(the artefact is most obvious at the base, where the roundness of the hill on the left shadows the second spline mesh comp in the same way).
Furthermore, if you ever have interest in getting HLODs working (Classic HLODs, not new WP HLODs, which are still accessible and useable as of UE5.7), we would definitely use them a lot. Our use case is mid-size levels, that don’t need world streaming, but do need HLODs to hit perf targets. Right now, we have to fall back to CPULM, which in 2026, does not look particularly good, even with high settings. I think this workflow has quite a bit of usefulness for the next few years ![]()
Thanks for all the incredible work you’re doing! GPULM is single-handedly keeping baked lighting workflows alive and beautiful for UE at the moment!
If you’re not working on a source build:
-
Download the binaries from the download link. Make sure the sub-version you’re using is matched. (e.g. 5.7.3).
-
Paste the entire zip file in the engine version’s root (next to engine/Features/etc, which I’m recalling from memory).
-
Use a tool like 7 zip to extract the zip file to that folder. It will work its way down the hierarchy of folders, and ask to replace several files. Yes to all. This effectively patches a key number of locations across the entire UE install, rather than just the GPULM plugin. The built-in windows tools might work, but I’m not sure they can work through the file structure.
-
When you launch UE, it will compile a couple of shaders. Not many. But it should work. If not, please paste screenshots, and I’ll have a look at how to help

GPULM relies on the engine’s ray tracing geometry handling code. So if spline meshes work in the path tracer there might be a possibility.
I got it to work last night. I was installing it correctly, but was one version off. Thank you for taking the time to explain in detail!
Minor bug with Stationary Skylight; When I try to build lighting after opening a map with a stationary skylight, the skylight won’t build lighting until I switch it to static, start build, then back to stationary. Once I’ve done that it will continue to work normally until I close the map and open it again.
I don’t need to finish the static bake, I just need to start it then cancel and switch the skylight back to stationary and it works again:
Not sure if it matters but I’m on Linux (Nobara, KDE/Wayland, nvidia 580.126.09) and I built the 5.7.3 gpulm-no-luoshuang branch from source.






