Unity 6.3
0 онлайн 76 гостей 3 в системе
Вход

IPreprocessComputeShaders.OnProcessComputeShader

Declaration

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

Параметры

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

Описание

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

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

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

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

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

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

Этот callback вызывается как для сборок Player, так и для сборок AssetBundle.

Дополнительные ресурсы: Варианты шейдеров и ключевые слова, Объявление и использование ключевых слов шейдеров в HLSL, BuildPipeline.BuildPlayer, BuildPipeline.BuildAssetBundles.

using System.Collections.Generic;
using UnityEditor.Build;
using UnityEditor.Rendering;
using UnityEngine;
using UnityEngine.Rendering;

class MyCustomBuildProcessor : IPreprocessComputeShaders { ShaderKeyword m_GlobalKeywordBlue;

public MyCustomBuildProcessor() { // Global keywords are shader agnostic so they can be initialized early 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) { // Variants with global keyword _BLUE disabled are included in the build if (!data[i].shaderKeywordSet.IsEnabled(m_GlobalKeywordBlue)) continue;

// Variants with local keyword _RED disabled are included in the build if (!data[i].shaderKeywordSet.IsEnabled(localKeywordRed)) continue;

// Any variants that do not meet the criteria above are stripped from the build. // In this example, Unity strips variants that have both _BLUE and _RED keywords enabled. data.RemoveAt(i); } } }