I'm currently trying to implement shader variant stripping into our project - and the most obvious approach seemed to be using ShaderVariantCollections for that purpose. This would be a very simply workflow: Create all the ShaderVariantCollections for the project by playing the game in the editor, using Settings / Graphics / Save to Asset (after clearing / tracking the shaders and shader variants). Relevant documentation. Write an implementation of IPreprocessShaders.OnPreprocessShader() that uses those ShaderVariantCollections to strip out any shader keywords that are not used. This could probably also be really useful to completely remove shaders from the project that are not used in any of the ShaderVariantCollections. Unfortunately, it turns out that the Unity APIs that are available to Unity users don't cover that use case. ShaderVariantCollections has shaderCount and variantCount, methods to add, remove or clear all variants, or test if a given variant is already in there - but no way to access the actual shaders or shader variants. The ShaderVariantCollectionInspector accesses this information but I don't see a way to access this from our own scripts, e.g. a custom implementation of IPreprocessShaders.OnPreprocessShader().