Search Unity

Optimizing the huge ambitious Urban Open World of EmergeNYC

Discussion in 'Editor & General Support' started by rafaelmfernandez, Jan 9, 2019.

  1. rafaelmfernandez

    rafaelmfernandez

    Joined:
    Aug 11, 2013
    Posts:
    62
    Hey everyone!

    My name is Rafael, I am the creative director on my debut (and the only game I plan on making) EmergeNYC. A firefighting, police, and EMS simulator.



    The title is already available on Steam Early Access: https://store.steampowered.com/app/461430/

    The game first released in November 2016 and has done relatively well selling approximately 30,000 copies to date.

    I am a 24 year old independent developer with no team whatsoever other than a freelancer to help me with programming and networking. I have self taught all my skills (3D Art, Animation, Unity its self, and everything else needed to get this far with this game). I have been using Unity for about 5-6 years now learning more and more things every day. My game has a strong unique concept and creative design that I know, if executed right, could lead to a massively successful title.

    However, there has always been 1 problem growing more and more apparent. A rather significant weakness in my creative design process. Optimization.

    The one problem seen throughout all negative reviews go something like "The game won't load on my PC", "My Frame rate is terrible", or "The game crashed".

    This is attributed to the fact that we are trying something enormous. A huge recreation of Manhattan NYC, detailed trucks & vehicles, amazing looking fire & smoke effects, a ton of very enthusiastic but demanding features. The project is a large mash-up of self made content and a mix of a lot of 3D Assets, framework assets, and other outsourced or paid for content.



    My goal for 2019 is to really address this issue of poor performance, memory leaks, loading times and try to improve these issues by at least 50-100%.

    Problem Areas:

    - Large Interior Scenes: within the city (Detailed & Complex Interiors already in the scene when game loads)
    I want to find a way to stream these in or have them load in dynamically without a noticeable lag spike when loading all the textures, materials etc and not have them be loaded or in memory unless you are near the area. At the moment this is restrictive as if I try to add any more interiors to the game, when making a build, many textures are corrupted.

    - Obi Rope system: for fire hose physics (Waiting on Obi 4.0 to see if it helps)



    - Physics processing: (Particle physics, vehicle physics, traffic physics etc.)



    - Draw calls: Can definitely be improved on. Materials, textures, models etc.

    - Lighting: Baked lighting, dynamic lights, interior lighting etc.

    Actions already taken already for optimization:

    - Object pooling for street props and other game objects.
    - Occlusion Culling
    - LODs for trucks & some buildings

    I've made this thread to document and track the optimization process as well as share tips and ideas for others with the same issue.

    HELP WANTED

    If the game concept interest you and you feel that you can help us reach our goal of 50-100% improvement in performance etc, we are looking to invest a portion of our budget into fixing our weakest point and biggest priority. Here is a link to the Unity Connect job thread:

    https://connect.unity.com/jobs/5c35663aedbc2a2ad6903a35

    This is NOT an easy job. The project is massive, you need a powerful PC to be able to work on the project, it will take time to find problem areas, understand certain code, and to optimize models, textures, materials etc.

    TL;DR

    24 year old independent self taught developer creating large open world Fire/Police Sim.

    Looking for help and tips on how to improve performance, memory management, loading times etc.

    Made this thread to document and track the optimization process as well as share tips and ideas for others with the same issue.

    Interested in hiring a team member specifically for Optimization.

    Job Thread here: https://connect.unity.com/jobs/5c35663aedbc2a2ad6903a35
     
    Last edited: Jan 9, 2019
  2. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,770
    Missing link.

    Which Unity version you developed it on?
     
  3. rafaelmfernandez

    rafaelmfernandez

    Joined:
    Aug 11, 2013
    Posts:
    62
  4. rafaelmfernandez

    rafaelmfernandez

    Joined:
    Aug 11, 2013
    Posts:
    62
  5. Otto_Oliveira

    Otto_Oliveira

    Joined:
    Jul 24, 2014
    Posts:
    33
    Hi Rafael,
    really interesting, I can figure out some areas to check it out first...
    Do you have any Profiler or Frame Debugger screenshot to clarify a little bit?
    I'll message you on Unity Connect
     
  6. Gladyon

    Gladyon

    Joined:
    Sep 10, 2015
    Posts:
    389
    If you haven't already did it, you can try deferred rendering, it improves lights drastically.
    It won't be fast if there are shadows, but if you disable shadows then it will render lights very fast (and shadows can be put in options if necessary).
     
    Joe-Censored likes this.
  7. Joe-Censored

    Joe-Censored

    Joined:
    Mar 26, 2013
    Posts:
    11,847
    Looks ambitious.

    As far as your physics processing, Unity 2018.3.x got a significant physics overhaul. You could consider how those improvements would impact your issues (I haven't tried it yet due to issues importing my own project, so I can't quantify the improvements, decided to wait for 2018.4 LTS, but you might want to check it out now).

    It may be too obvious and you've already tried and tossed out this idea, but having building interiors be separate scenes that you async additive load/unload as needed may improve your memory resource usage. You can do the same for entire outdoor sections of the city as well, depending on what the camera perspective is for your game (looks like most of the game is down at the ground level, and if so you don't actually need the rest of the city running right then).

    I'd be looking at what the profiler says is your performance problems. You've given broad topics you want to improve on, but the profiler gets far more specific to narrowing down those issues (and when you know where exactly the problem areas are, you can far more intelligently come up with ideas for resolving them).