x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

Problem with cull distance volumes and level streaming

Hi! I have a couple levels that are combined in one level and with level streaming i load that level i want to play. In every level i use one big cull distance volume. Within the editor all works perfect but in the packaged game the cull distance volumes doesn't work with level streaming. So when i open a level direct without streaming the cull distance volume work proberly but when i stream this level all actors in this level are visable. So what can i do to fix this in the packaged game? Any hints? I would appreciate any help.

Thanks!

Product Version: UE 4.19
Tags:
more ▼

asked Jul 06 '18 at 05:15 PM in Packaging & Deployment

avatar image

Mike Morrison
8 2 4

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

2 answers: sort voted first

Hey Mike,

Do you have the culling volumes located in your persistent level or in the sub-levels? In my research of your issue I found this post from Reddit that may help you:

https://www.reddit.com/r/unrealengine/comments/6ogklw/level_streaming_disables_precomputed_visibility/

You may just need to move your volumes to the persistent level. If that doesn't work, let me know and we can try something else!

more ▼

answered Jul 06 '18 at 06:31 PM

avatar image

Zilphy
216 3 6 15

avatar image Mike Morrison Jul 06 '18 at 07:06 PM

Hey Zilphy, I tried that already and it doesn't work. Any other idea? Thx for your help!

avatar image Zilphy Jul 06 '18 at 09:02 PM

Okay, I was able to replicate the issue you were having. I'm not actually sure why this is happening. I'm going to say that this is a bug. I would recommend submitting a bug report for this. A workaround I found worked in my testing was to set distance culling (desired max draw distance) per object and not with a volume. You can find this in the rendering options for the object in the world. I took a screenshot of the setting as well.alt text

capture.png (68.3 kB)
avatar image 2visual Oct 11 '18 at 11:42 PM

What you show above is for lods

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

After checking the source code, the problem is Cull Distance Volume being triggered only once to iterate all the actor which is visible when persistent level is loaded, this time streaming level may not loaded and being visible(in editor, the streaming level is already loaded and visible if you tick on the Initially Loaded and Initially visible, so it works fine)

the solution is add some tricks in source code

in the LevelTick.cpp, line 1654, customize the code below, and compile the engine

 #if WITH_EDITOR
     if(GIsEditor && bDoDelayedUpdateCullDistanceVolumes)
     {
         bDoDelayedUpdateCullDistanceVolumes = false;
         UpdateCullDistanceVolumes();
     }
 
     //My Custom Code Begin////////////////////////////////////////////////////////
 #else
 
     if (GWorld->HasBegunPlay() && !bDoDelayedUpdateCullDistanceVolumes)
     {
         bDoDelayedUpdateCullDistanceVolumes = true;
         const TArray<ULevelStreaming*>& StreamedLevels = GetWorld()->StreamingLevels;
 
         for (int32 LevelIndex = 0; LevelIndex < StreamedLevels.Num(); LevelIndex++)
         {
             // Update the level only if it is visible (or not a streamed level)
 
             if (!StreamedLevels[LevelIndex]->IsLevelVisible())
             {
                 //GEngine->AddOnScreenDebugMessage(-1, 60.0f, FColor::Yellow, StreamedLevels[LevelIndex]->GetName());
                 bDoDelayedUpdateCullDistanceVolumes = false;
             }
         }
 
         if (bDoDelayedUpdateCullDistanceVolumes == true)
         {
             UpdateCullDistanceVolumes();
         }
 
     }
 
     //My Custom Code End////////////////////////////////////////////////////
 #endif // WITH_EDITOR

One last note is about the Cull Distance value setup, the unreal unit is cm, but you may encounter the culling distance not match between PIE and play in packaged game, the problem is the CVar: r.ViewDistanceScale, when you are in Scalability 4, the r.ViewDistanceScale will automatic set to 10. This makes confusing at first if you don't know what is being control at background.

more ▼

answered Oct 16 '18 at 09:17 AM

avatar image

surferHalo
46 1 4 5

(comments are locked)
10|2000 characters needed characters left
Viewable by all users
Your answer
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question