У меня очень большой шейдер с большим количеством вариантов (у нас более 30 ключевых слов). Это приложение среды выполнения, в котором конечный пользователь имеет полный контроль над шейдером. Это означает, что все ключевые слова/варианты должны быть доступны конечному пользователю. Таким образом, удаление вариантов становится очень трудным, поскольку мы на самом деле не знаем, какие варианты понадобятся конечному пользователю. И да, все 30 ключевых слов необходимы во время выполнения. Мы будем рассматривать миллиарды вариантов.
Лучшим решением будет возможность скомпилировать вариант на лету только тогда, когда это необходимо во время выполнения. Аналогично тому, как редактор Unity обрабатывает варианты. Небольшая задержка во время компиляции — это нормально. Есть ли способ добиться этого?
Мы пытались сделать это с помощью ShaderVariantCollection, но безуспешно. Вот код
var keywords = material.shaderKeywords;
ShaderVariantCollection variants = new ShaderVariantCollection();
ShaderVariant variant = new ShaderVariant
{
shader = material.shader,
passType = PassType.Normal, // Adjust this as needed
keywords = keywords
};
// Add the variant to the collection
variants.Add(variant);
variants.WarmUp();
Подробнее здесь: https://stackoverflow.com/questions/790 ... at-runtime