Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

IPreprocessComputeShaders.OnProcessComputeShader

Объявление

public void OnProcessComputeShader(ComputeShader shader, string kernelName, IList data);

Параметры

shader Вычислительный шейдер, который собирается скомпилировать Unity.
kernelName Имя ядра, которое собирается скомпилировать Unity.
data Список вариантов шейдеров, которые собирается скомпилировать Unity.

Описание

Реализуйте этот интерфейс для получения обратного вызова до того, как Unity скомпилирует ядро ​​вычислительного шейдера в сборку.

Используйте этот обратный вызов, чтобы проверить варианты вычислительных шейдеров, которые Unity собирается скомпилировать в вашу сборку, и исключить любой вариант, который вам не нужен. Исключение нежелательных вариантов шейдера может уменьшить размер сборки и время сборки.

Варианты представлены структурами ShaderCompilerData. Для каждого варианта вы можете проверить, включены ли данные глобальные или локальные ключевые слова, используя ShaderKeywordSet.IsEnabled.

Чтобы проверить, включено ли для варианта глобальное ключевое слово, создайте экземпляр ShaderKeyword с именем глобального ключевого слова. Чтобы проверить, включено ли для варианта локальное ключевое слово, создайте экземпляр ShaderKeyword с именем локального ключевого слова и дополнительным параметром, указывающим вычислительный шейдер, использующий локальное ключевое слово.

Чтобы исключить вариант шейдера из сборки, удалите элементы непосредственно из data . Обратите внимание, что удаление отдельных элементов в цикле for может быть медленным; если вы удаляете много элементов, попробуйте переместить ненужные элементы в конец списка, а затем удалить их все одной операцией.

Обратите внимание, что этот обратный вызов предоставляет сведения только о вычислительных шейдерах. Обычные шейдеры, которые Unity собирается скомпилировать в сборку, см. в разделе IPreprocessShaders .

Смотрите так же: Shader variants and keywords, Declaring and using shader keywords in HLSL.

using System.Collections.Generic; using UnityEditor.Build; using UnityEditor.Rendering; using UnityEngine; using UnityEngine.Rendering; class MyCustomBuildProcessor : IPreprocessComputeShaders { ShaderKeyword m_GlobalKeywordBlue; public MyCustomBuildProcessor() { // Глобальные ключевые слова не зависят от шейдеров, поэтому их можно инициализировать заранее. m_GlobalKeywordBlue = new ShaderKeyword("_BLUE"); } public int callbackOrder { get { return 0; } } public void OnProcessComputeShader(ComputeShader shader, string kernelName, IList<ShaderCompilerData> data) { // Local keywords are initialized here as their constructor needs to specify the shader ShaderKeyword localKeywordRed = new ShaderKeyword(shader, "_RED"); for (int i = data.Count - 1; i >= 0; --i) { // Варианты с отключенным глобальным ключевым словом _BLUE включены в сборку if (!data[i].shaderKeywordSet.IsEnabled(m_GlobalKeywordBlue)) continue; // Варианты с отключенным локальным ключевым словом _RED включены в сборку if (!data[i].shaderKeywordSet.IsEnabled(localKeywordRed)) continue; // Любые варианты, не соответствующие указанным выше критериям, удаляются из сборки. // В этом примере Unity удаляет варианты, для которых включены ключевые слова _BLUE и _RED. data.RemoveAt(i); } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3