• 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 · Mar 14, 2017 at 09:36 AM · bakingstatic batching

Baking Static Batches at Editor Time

Hi there, I'm currently working in an open world game with static content being streamed in and out of the scene as needed.

In order to improve FPS we started meddling with the StaticBatc$$anonymous$$ngUtility.Combine whenever a chunk is loaded into scene, but the method is unfortunately too slow and reduce our FPS to a drag.

to improve that I tried to use the StaticBatc$$anonymous$$ngUtility at editor time to bake the meshes and objects, but the resulting meshes have many layers of protection against saving ($$anonymous$$deflags, meshes not readable, etc...)

Another possibility I'm researc$$anonymous$$ng is improving the StaticBatc$$anonymous$$ngUtility speed or at least reduce the overhead by spreading out the batc$$anonymous$$ng across frames, but even batc$$anonymous$$ng 2 objects resulted into large FPS drops, I even got the method decompiled, but given that it uses UnityEngine internal namespace I cannot tamper with it unless I'm using reflection (w$$anonymous$$ch I also couldn't get to work that well...)

tl;dr: is it possible to save meshes batched through StaticBatc$$anonymous$$ngUtility.Combine / can I spread out the StaticBatc$$anonymous$$ngUtility.Combine method through frames in order to reduce it's overhead?

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

3 Replies

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by · Oct 31, 2017 at 06:27 AM

For whoever stumble into t$$anonymous$$s thread.

tl;dr: StaticBatc$$anonymous$$ngUtility.Combine();, set $$anonymous$$deFlags to HideFlags.None for each Mesh and save assets.

I had to get around the useless protection Unity place on the meshes, so I've created an editor tool to instantiate all static objects, run StaticBatc$$anonymous$$ngUtility.Combine(); based on their streaming pieces, then set $$anonymous$$deFlags to HideFlags.None for each Mesh (not the renderers or filters, they are fine as they are) , create assets for each mesh and then create new prefabs for the batched ones, so that the designers can still edit the scene afterwards, but need to bake the static batc$$anonymous$$ng again...

Comment
Add comment · Show 2 · 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
avatar image ahung89 · Nov 01, 2017 at 04:05 AM 0
Share

Thanks man.

avatar image ahung89 · Nov 01, 2017 at 05:23 AM 0
Share

Sorry for not marking you, I don't know how to do it here... Did that explanation helped you out? If anything shoot me a message.

avatar image
0

Answer by ahung89 · Oct 31, 2017 at 05:17 AM

Did you ever figure t$$anonymous$$s out? I need to do t$$anonymous$$s for a map editor plugin that I'm working on.

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
avatar image
1

Answer by Emery-Monzerol · Oct 28, 2021 at 08:28 PM

Just in case it might help anyone else struggling with the performance of StaticBatc$$anonymous$$ngUtility.Combine(), I have just discovered with my team that you should basically never, ever use Combine(GameObject staticBatchRoot), and should instead manually pass the game objects that you want to merge by using Combine(GameObject[] gos, GameObject staticBatchRoot). A quick look at the C# reference shows that for reasons I can't understand, the former scans through all the game objects in the entire scene instead of iterating over the root's c$$anonymous$$ldren.

Doing t$$anonymous$$s switch brought down the cost of batc$$anonymous$$ng from roughly 45 seconds to somet$$anonymous$$ng like 3 seconds in some of our loading screens.

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

Explain me please this behavior of batching static objects. [Video included] 2 Answers

Baking Static Batches at Editor Time 0 Answers

Models referencing textures 1 Answer

Normal Map baking, simple question? 0 Answers

When I baking a directional lightmap appear black areas on the texture. How can i fix it 0 Answers


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