On-demand part and model textures via unity mipmap streaming - #418
Open
Phantomical wants to merge 6 commits into
Open
On-demand part and model textures via unity mipmap streaming#418Phantomical wants to merge 6 commits into
Phantomical wants to merge 6 commits into
Conversation
Mipmap streaming (safety valve): bake m_StreamingMipmaps into eligible bundle textures, enable QualitySettings.streamingMipmaps* sized to a fraction of VRAM, pin every streaming texture full-res on load, then release mesh/part textures at their bind sites (ModelInstructions plus two PartLoader postfixes) so only renderer-owned textures drop mips under real pressure. Eligibility gates on >=4KB mip chain and mip-level block alignment under the deepest reduction.
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

This PR uses unity's mipmap streaming feature to stream in part and IVA textures on demand. This means that you get to set a memory budget and unity will take care of automatically streaming mipmaps from disk to vram depending on what parts are currently visible.
Here's how it works behind the scenes:
With a few edits to these two we can:
As it turns out, that's basically all you need to get mipmap streaming working. We can set
QualitySettings.streamingMipmapsAddAllCameras, then toggle whether it is enabled usingQualitySettings.streamingMipmapsActive.I don't have a profile in front of me right now, but the overhead for this looks to be about 0.5ms/frame. On the other hand, for an install with many part mods it looks to be able to save up to ~5GB of VRAM.
A testing build is available here for those who want to try it out
KSPCommunityFixes_1.41.1.zip