Hello,
I am interested if the engine supports displaying different LODs of a skeletal mesh in different views in split screen setup? This is in regards to skeletal mesh on a single actor.
Hello,
I am interested if the engine supports displaying different LODs of a skeletal mesh in different views in split screen setup? This is in regards to skeletal mesh on a single actor.
Hi Marko,
That should be supported, as far as I know. Have you seen any evidence in the engine that would lead you to believe otherwise?
Yes, actually, in our game we have situation when two main characters look at the same skeletal mesh, one is close, other is far, the far one sees same LOD as the close one. I’ll try to setup this in vanilla Unreal Engine to see if it still happens.
Okay, thanks for the heads-up. A repro project would help here, so I appreciate you putting that together.
Here is an example. The big Manny has only 2 LODs, one is super reduced and other one is normal. When you start the level you can use ‘debugCreatePlayer 1’ to add another user with split screen. If you approach the big Manny with first user you will notice change of LODs on both screens.
Hey [mention removed], did you get a chance to take a look at the example?
Hi Marko,
I just got a chance to look at the sample. You are correct that in the splitscreen view, the LOD for the skeletal mesh is shared by both views. If you look at FSkeletalMeshObject::UpdateMinDesiredLODLevel, you can see that some bookkeeping is being done to track the WorkingMinDesiredLODLevel, which does not distinguish between multiple views. To visualize the skeletal mesh LOD data in PIE, you can also set a.VisualizeLODs. So, the behavior you are seeing is currently working as designed. Please let me know if you have any further questions around this topic.
Hey Tim,
thanks for looking into it, that was my feel as well just wanted to check if I am missing something. Now, the hard part. If I would want to modify this so that it uses different LODs for two split screens, how complicated would it be?
That’s a good question. From a rendering perspective, this might not be all that difficult. Some logic inside FSkeletalMeshObject::UpdateMinDesiredLODLevel checks if multiple views are attached to the scene. You would need to track two or more desired LOD values according to each view and then update FSkeletalMeshObjectStatic::GetLOD to fetch the desired LOD based on the view that is passed in. However, what memory and performance implications tracking and loading two different skeletal meshes have on the rest of the engine, I cannot say with absolute certainty. Why do you need to have these changes?
Okay, that’s understandable. If you decide to change the engine code and need more help, please do not hesitate to contact us.
Sorry, was out for a couple of days. We have some very stylized graphics, and LOD switching can be pretty jarring, additionally, we do some outlines and there are a lot of them on highest LODs so it doesn’t look good from distance. We are still discussing internally if we can fix this some other way, since modifying the rendering pipeline seems pretty complicated endeavor.