We're almost done with the "memory allocation performance optimization". For a little background on what exactly that means, see this forum posting: Mini spheres using max performance in free mode?
There is still one related performance issue that I am aware of and that's in the clubbing level. The audio effects in that level use threads and therefore, memory allocation didn't show up in the Unity Profiler - but in fact, the library we are currently using to get the spectrum data for those effects allocates significant amounts of memory. We could reduce this quite a bit, and also avoid some hiccups on effect activation but the remaining part (which is quite big) requires replacing the underlying library, so this will take a little.
We've had reports of players with a decent play area size that ended right where the orbs arrive (with a solid wall) and we have a fix for this coming up in the next release (I'm sorry it didn't make it into this one, yet). If this is an issue for you, there is a workaround available via OpenVR Advanced Settings Overlay. This is an amazing tool and I strongly encourage everyone to install it - especially if you are a developer.
One thing that can do that is really awesome for VR developers: You can make yourself taller than you really are. It was quite interesting to see what Holodance looks like for someone who is 2,10m (6'11") and this will be taken into account when polishing the UI and song browser (which is coming up next after the "player area limits"-fix).
These release notes are fairly technical - many of those changes should not be obvious, except that certain annoying things (="hiccups") should not happen anymore, or significantly less frequently. This whole thing was a huge change and some things still are a little off (like the orb colors often change without a good reason), and it's something I had been pushing and pushing because I knew how much trouble it was going to be ... but ... I think it is worth it (this is really about this version and the previous two or three).
To make it not a purely technical list of release notes probably only useful to other developers, I have also included the updates of some marketing materials. Let me know how you like the new gameplay teaser ;-)
So, here's the details:
- Updated Steam Graphical Assets including Screenshots
- No longer assigning new parents for ScoreFlash messages based on TextMesh Pro because it allocates 1KB each time.
- Removed remaining foreach-loops from ScoreFlash (replacing Dictionary.Keys was not trivial - and those were actually almost the last that used foreach)
- Replaced object.tag == "Tag" comparisons with object.CompareTag("Tag") ... beginner mistake, ooops.
- Cached references to particle systems in tracer for following emission (this did allocate memory and also took some time while finding components in children).
- Our generic pool used prefab names for look ups which caused significant allocations; changed to cached IDs.
- Keeping color gradient arrays in Flying Note instances instead of creating them new each time we set the color.
- More careful assignment of materials; avoiding allocations here as well.
- Changed Score Display Prefab to use TextMesh Pro instead of Unity UI text, so we can use SetText(...) with a StringBuilder instead of text with string.Format, because this caused 5KB memory allocations on each note hit. As a nice side-effect, this also significantly increases the sharpness / quality of the texts in those scores. This is also part of converting all UI to the new style, so this is really cool: We get to do both at once - optimize performance and finish that long-going task of moving the UI over to the new style. I'm happy.
- Fixed several exceptions that occurred when using the Max Performance theme. This still doesn't work perfectly but it works much better than before. This particular theme should no longer be necessary, so no point in spending too much time with it.
- Created new gameplay teaser based on V0.8.0b8 (still with the label b7)
- Fixed issue that post-session score was no longer displayed correctly (probably introduced in the cycle)
- Replaced more foreach-loops that are executed frequently with for-loops to further reduce memory allocations
- Moved my pooled audio sources over to using More Effective Coroutines (MEC) because those coroutines also caused allocations each time a sound was played (and the point of having that pool was to not have allocations in that case). We're talking 72 bytes here, and that does not happen every frame, so it's getting to the point where I think I'm more or less done with the optimization phase ... for now.
- Re-enabled Graphics Jobs (hopefully, Unity has that bug fixed by now - we'll see in the next test-run) => nope, graphics jobs still cause a crash in the clubbing level, when the lightshow starts. (edited)
- Fixed a few issues that generated issues specifically in the clubbing level.
- Moving from Unity 5.5.2p4 to 5.5.3p1; this might actually fix the crash bug when using Graphics Jobs. => No, it does not.
- Updated IndieDB / VRDB entries. Those were extremely outdated. Even now, they are not perfectly up-to-date ... but much better than before.
- Fixed another orb-scale bug: Track 4 in Level 2, where the orbs are velocity based (so louder notes have bigger orbs) shrinked the orbs.
- Fixed issue that trail particles no longer reacted to the setting "Show Particles".
- Slider particles (those are emitted while you correctly follow the Slider) now also use "Show Particles" setting. Before, that setting was ignored by those particles. Naughty little guys. But I forget to tell them.
- Fixed issue that sometimes, notes would "re-appear" at the end of a song.
- Fixed issue with the success particles in Sliders - those were actually never showing up, and then showed up regardless of whether you touched the Slider or not right at the end.
- Fixed issue where missing an orb would mess up orb colors when there previously was a combo active.
- Fixed Bug that caused spamming of notes in all of Level 3. "i != j". Not so easy to see and it's one of the reasons I prefer foreach loops much over for-loops to iterate over lists. But foreach-loops allocate more memory.