Mobile Reflection Capture Actor Set to Specified Cubemap not working.

I am trying to get good reflections and lighting on movable actors on a mobile device. I want to use a Spherical Reflection Capture Actor set to Use Specified Cubemap to light my actors. Currently I can not get this to work unless I place some proxy geometry in the scene and bake lighting.

-Create a new map and select the Empty Level preset.

-Place a mesh actor in the level and set its Mobility to “Movable”

-Place a Spherical Reflection Capture actor next to the mesh.

-Set the Reflection Source Type to Specified Cubemap and plug in a custom cubemap.

Results: The actor does not receive any lighting from the Reflection Capture Actor.

If you now create some simple geometry around the dynamic actor and bake lighting the Mesh will now be lit by the Spherical Reflection Capture actor.

Here is the Cubemap I am using.

I have a feeling I am not using this feature as intended. Basically I am making a mobile game with limited or no static geometry in my scene. I would like to have a high detail cubemap that makes it appear that there is more geometry there then there really is.

Thanks in advance,

Hi ,

Reflection Captures use the indirect lighting cache samples placed to get their brightness for the cubemap. This is why you’re seeing them working in the one with geometry because there is baked bounce light.

In the example below I have enabled the visualization of the Volume Light Samples (indirect lighting cache) and as I move the sphere away from and bake close to the floor with the samples it is lit and unlit.

102479-cubemap.gif

If you need this you will want to consider setting this up in your material and potentially changing dynamically with material parameter collections via blueprints if you need to change out the reflection as means to fake it.

I hope this helps.

Tim

Hey Tim,

Thank you for getting back to me. I read up on the indirect lighting cache and this makes a lot of sense. My question to you is this. Is there any way I can choose which level the cache is stored in? Right now I believe it is stored in any level that has static geometry in it. This makes complete sense, but in my situation I have one .umap which I am using to generate my cubemaps that is not loaded at run time and a separate map for my dynamic objects that is loaded at run time. I was hoping to use the lighting data from the first .umap, the one not loaded, in my dynamic objects map.

Anywho thank you for getting back to me and thanks for the gif!

Since the placed samples are all precomputed they are stored for the map they were baked in.

You can set the actor in the other level to be hidden in game when you build the lighting that way it’s visible in the editor if needed to get the samples, but not in the game.

With lightmass too, samples are placed only at two spots above any surface. sample 1 at 50 cm above a surface and the next at 250 cm above a surface. This can be edited in the BaseLightmass.ini file in the engine/config.

Look for the section [DevOptions.PrecomputedDynamicObjectLighting] and adjust the values for:

  • FirstSurfaceSampleLayerHeight=50
  • SurfaceSampleLayerHeightSpacing=250
  • NumSurfaceSampleLayers=2

The Surface Sample Layers allows you specify how many samples are placed above a surface. With 2 you only get the ones at the 50 cm and the 250 cm. You may need additional ones depending on the needs here.


On a side note about 4.12, using the option for Actor Hidden in Game will not bake any bounce light. This only affects 4.12 and the 4.13 Preview 1 release. It was fixed yesterday and will be completely fixed in 4.13. So if you need to test this, I would build the lighting first and then on the actor set the Actor Hidden in Game setting so that it gets that bounce light sample first.