Unity 6.3
0 онлайн 94 гостей 3 в системе
Вход
Разработка платформы Шаг 312 из 387

Ограничения WebGPU графики API

WebGPU графика API предоставляет полезные графические возможности. Но она также имеет некоторые ограничения, о которых вы должны знать:

Функции, не поддерживаемые в WebGPU

Хотя WebGPU разблокирует полезные графические функции, есть несколько, которые он не поддерживает пока:

Ограниченная поддержка браузеров

WebGPU в настоящее время находится в экспериментальном состоянии и не поддерживается всеми браузерами и устройствами. Дополнительную информацию см. в веб-документации MDN по Доступ к устройству и Совместимость браузеров. Для поддержки браузеров см. Могу ли я использовать: WebGPU.

Ограничения вычисления шейдера

Существует несколько ограничений для вычисления шейдера в Web.

Нет RWBuffer поддержки

Вы можете использовать структурированные буферы, RWStructuredBuffer, но не RWBuffer в вычислительных шейдерах. Ограниченные форматы текстур хранилища с чтением и записью. WebGPU поддерживает лишь ограниченный набор форматов текстур для текстур хранилища с чтением и записью в вычислительных шейдерах. HLSL не указывает тип доступа к текстуре хранилища явно, поэтому он выводится из способа использования.

RWTexture2D<float> tex; // storage texture
tex[uv] = 1.0f; // write only
tex[uv] += 1.0f; // read-write

Тексты хранения только для записи обычно поддерживаются намного лучше. См. Ограничения формата текстуры.

Анализ строгой однородности

В WebGPU вы должны вызывать функции барьера только из единого потока управления. В противном случае WebGPU не сможет компилировать шейдер. Единый поток управления обеспечивает, что все потоки в группе потоков следуют одному и тому же пути выполнения и одновременно достигают барьера.

Функции барьера HLSL:

  • GroupMemoryBarrier
  • GroupMemoryBarrirWithGroupSync
  • DeviceMemoryBarrier
  • DeviceMemoryBarrierWithGroupSync
  • AllMemoryBarrier
  • AllMemoryBarrierWithGroupSync

Асинхронные вычисления

WebGPU не поддерживает асинхронные вычисления.

Нет HLSL расширенных функций

WebGPU не поддерживает следующие функции:

  • Волновые свойства (WaveBasic, WaveVote, WaveBallot, WaveMath, WaveMultiPrefix)

  • QuadShuffle

  • Int64

  • Native16Bit

GPU считывание

WebGPU не поддерживает синхронное считывание данных буфера или текстуры из GPU в CPU. Следующие функции не будут работать:

  • Texture2D.GetPixels

  • ComputeBuffer.GetData

  • ScreenCapture.CaptureScreenshot

  • ScreenCapture.CaptureScreenshotAsTexture

Вместо этого, используйте AsyncGPUReadback API для чтения данных буфера или текстуры из GPU в CPU. Для съемки экрана, используйте ScreenCapture.CaptureScreenshotIntoRenderTexture вместе с AsyncGPUReadback.

Ограничения формата текстуры

Информацию о возможностях формата текстуры WebGPU см. в документации W3 по WebGPU. Некоторые форматы более ограничены, чем другие APIs, особенно для использования текстуры хранения.

Например, WebGPU не поддерживает RGBA8 или RHalf в качестве формата текстуры хранения с чтением-записью. Если вы создаете RenderTexture в этом формате, вы должны установить enableRandomWrite на false, что является значением по умолчанию.

Однако, WebGPU поддержки RFloat как формат текстуры хранения, так что если вы создаете RenderTexture с RFloat формат, enableRandomWrite не нужно быть false.

Вы можете использовать SystemInfo.GetCompatibleFormat, чтобы найти формат, который будет работать для данного использования.

Отображение текстурных каналов

Тип выхода фрагментного шейдера должен иметь большее или равное число каналов, чем формат текстуры целевого рендеринга.

Если RenderTexture является RGBA, то у него 4 канала. Фрагментный шейдер должен вывести float4 или half4. Если он возвращает float или half, WebGPU столкнется с ошибкой, потому что есть каналы текстуры рендеринга, которые не будут инициализированы.

Если RenderTexture является R8, то у него есть 1 канал. Фрагментный шейдер может тогда вывести float или half. Фрагментный шейдер может также возвратить float4 или half4, и дополнительные выходные каналы будут проигнорированы.

Пределы текстуры местности

Количество текстур, доступных из шейдера, ограничено 16 на многих платформах. Это ограничение может быть превышено рендерером местности, особенно с текстурами слоев. Это может сделать рендерирование местности проблематичным для WebGPU. Рекомендуется ограничить количество слоев текстуры местности, которые вы используете.

Рекомендации по использованию шрифтов в вебе

Unity Web поддерживает динамическое отображение шрифтов, подобно другим платформам Unity. Однако Unity Web не имеет доступа к шрифтам, установленным на компьютере пользователя, так что если вы хотите использовать какие-либо шрифты, включите их в папку проекта (включая любые резервные шрифты для международных символов или жирные/курсивные версии шрифтов) и установите в качестве резервных имен шрифтов.

Ограничения на глобальное освещение в Интернете

Unity Web только поддерживает Запеченное глобальное освещение. Realtime Global Illumination в настоящее время не поддерживается в Web. Кроме того, Unity Web поддерживает только ненаправленные lightmaps.

Рекомендации по использованию видео в Интернете

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

  1. Используйте параметр URL в компоненте VideoPlayer.
  2. Поместите ресурс в каталог StreamingAssets, чтобы использовать встроенную сетевую потоковую передачу браузера.

Ограничения на варианты шейдеров в Веб

Из-за ограниченной памяти в Web, не включайте нежелательные варианты шейдеров, так как это может привести к ненужному использованию памяти. Поэтому рекомендуется ознакомиться с варианты шейдеров и шейдер стрипинг. Кроме того, убедитесь, что вы не добавляете шейдеры со слишком большим количеством вариантов (например, Unity’s Стандартный шейдер) к Всегда включённые шейдеры раздел в Настройки графики.

Дополнительные ресурсы