Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by abbsimoga · Oct 26, 2021 at 03:57 PM · loadloadlevelmultithreadingchunkschunk

Multithreaded chunk loading

I am working on a chunk loading system and I am wondering if I can implement multithreading differently as I have it now. As it is set up right now only vertices and triangles of the ground mesh are created by another thread but i would like to be able to work on Unity classes like the mesh itself (since mesh.Optimize(), mesh.RecalculateNormals() etc are compute heavy) and also instantiate game objects which right now is handled by the main thread.

Can i somehow offload a “throwaway” scene or gameObject to a secondary thread and create my chunk there independent of the main thread and when it is done push that object/scene to the main thread so to instantiate it in the main scene?

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by rh_galaxy · Oct 26, 2021 at 05:08 PM

The way I have done it is to load the scene to 90% then begin my map-generation and split things done only allowed to do from the main-unity-thread and the rest in my own low-priority-thread. I communicate from my thread to the main thread with an event when work is needed in the main thread before continue running. It's too much irrelevant code to paste here but you can look at it beginning here: https://github.com/rh-galaxy/galaxyvr/blob/master/Assets/C%23/GameLevel.cs#L281


Here is my scene load code which activates the scene when GameLevel.bMapLoaded becomes true. GameManager.cs:

 //called from the main state machine in Update() like this
 GameLevel.bMapLoaded = false;
 StartCoroutine(LoadAsyncScene());
 
 bool bIsMapScene = false; //else menu
 bool bBeginMapLoading = false;
 string szToLoad = "Scenes/PlayGame";
 IEnumerator LoadAsyncScene()
 {
     asyncLoad = SceneManager.LoadSceneAsync(szToLoad, LoadSceneMode.Single);
     asyncLoad.allowSceneActivation = false;

     //wait until the asynchronous scene fully loads
     while (!asyncLoad.isDone)
     {
         //scene has loaded as much as possible, the last 10% can't be multi-threaded
         if (asyncLoad.progress >= 0.9f)
         {
             bBeginMapLoading = true;
             if (bIsMapScene && GameLevel.bMapLoaded || !bIsMapScene)
                 asyncLoad.allowSceneActivation = true;
         }

         yield return null;
     }
     bLoadDone = asyncLoad.isDone;
 }

I tried to limit the code running in the main thread to 7ms chunks to keep fps at 90. But still ended up fading to black while loading to avoid frame freezes (make them invisible).


But to answer your question, it isn't possible to do some things outside of the main thread. And I don't think it's documented which things that are forbidden. You have to try.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

131 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to load levels with animation GUI 1 Answer

Vector3.lerp doesn't work when level is loaded 1 Answer

Enable/ Activate a script by script 1 Answer

Procedural terrain pausing update with IEnumerator not working. 0 Answers

Load / Stream 3rd Party Scene? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges