Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
12 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 · 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 StaticBatchingUtility.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 StaticBatchingUtility at editor time to bake the meshes and objects, but the resulting meshes have many layers of protection against saving (hideflags, meshes not readable, etc...)

Another possibility I'm researching is improving the StaticBatchingUtility speed or at least reduce the overhead by spreading out the batching across frames, but even batching 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 (which I also couldn't get to work that well...)

tl;dr: is it possible to save meshes batched through StaticBatchingUtility.Combine / can I spread out the StaticBatchingUtility.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 this thread.

tl;dr: StaticBatchingUtility.Combine();, set hideFlags 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 StaticBatchingUtility.Combine(); based on their streaming pieces, then set hideFlags 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 batching 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
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 StaticBatchingUtility.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 children.

Doing this switch brought down the cost of batching from roughly 45 seconds to something 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
avatar image
0

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

Did you ever figure this out? I need to do this 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

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

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