Download

Procedural Generation on Mobile - How to deal with lighting?

I’m working on a game simultaneously for PC and Mobile (which may not be practical but it’s working OK for now). Rooms are generated and the player must navigate them. Within these rooms are point lights to illuminate them. Looks great on PC but I get no light on mobile.

From the research I’ve done, I see that this type of lighting is not supported. I can only use static point lights where they can be baked. So this lighting won’t work at all for what I’m doing.

If this is out of the question (is it?), my only option seems to be not using lighting at all, simply have everything with a flat lighting. I have no idea how to do this and my searches haven’t been useful. Is this possible and is this the only solution?

Are the objects in your room set to be ‘Static’ or are they ‘Moveable’ ?

This will affect the lighting bake presets.

I believe they are static. But I’m creating the room using a number of “Spawn actor from class” nodes, piecing together the walls. Does using this method prevent baked lighting?

Yes, since the lighting would need to be applied after procedurally generating the level. Spawn actor from class generates an actor, but if lighting is as you say on mobile, then it would not bake it at that point.

Use dynamically loaded and placed level instances for your rooms. This way you can bake lighting on them separately.

I’m not sure what you mean by this - I don’t think I’ve ever done anything like that. It might be worth mentioning that the player can see up to 10 rooms at a time so if this is an intensive process it might not work too well.

He means that, at least for the mobile version, you should create a number of level “chunks” ahead of time and bake lighting for them then randomly choose these level chunks to stream into your game. On PC you can do completely procedural levels, but on mobile you have to make some compromises. Either pre-bake the levels or dumb down the lighting. You might even consider going unlit and/or cel-shaded depending on the art direction and tone of the game.

Unfortunately, due to the nature of the game, pre-building the level will not work. Well, I could make it work but it would take too much away from the gameplay.

I am fine with the compromise of using unlit and/or cel-shaded styles, at the moment I am simply using flat “sample” textures with plain walls/floors while I work out the gameplay elements. I didn’t see any way to accomplish this though.

Like others said, on mobiles, either dumb down proceduraly generated randomness or lighting. Also keep in mind that pushing poor mobiles to the limits may just boil the device, and you do not want to be accused of destroying phones/tablets of users.
So do not push mobiles to the limit. I was developing game where i pushed mobiles to the limit (physics and dynamic lights), on NVidia Shield everything was fine, but my friend almost lost some samsung galaxy phone due to overheating, so keep that in mind.

I would suggest dumbing down lighting, or baking it all into textures/skin at production phase, ie. skin texture with baked lights in 3d app, then used as unlit material.

If I wanted to simply have flat lighting across the board, how might I accomplish that?

https://answers.unrealengine.com/questions/88144/how-to-make-the-world-fully-unlit.html

You’re going to want to make a master material that’s unlit as seen there, make the base color texture a texture parameter, add any other maps you may need like normals or emissives then make every mesh in your game use an instance of this material, changing the maps around as needed. Then just exempt the lights when building a procedural level on mobile.