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

Шейдеры: изменения в коде физически корректного затенения

Код, связанный с физически корректным затенением, был реорганизован в Unity 5.5 (файлы UnityStandardBRDF.cginc и т. д.). В большинстве случаях это не влияет на ваш шейдерпрограмму, работающую на графическом процессоре. Подробнее
Подробнее Словарь
, если только вы вручную вызываете некоторые функции напрямую. Известный изменения перечислены ниже.

  • Теперь есть функции для преобразования гладкости, шероховатость и перцептивная шероховатость: PerceptualRoughnessToRoughness, RoughnessToPerceptualRoughness, SmoothnessToRoughness, RoughnessToSmoothness.
  • Термин видимости в UnityStandardBRDF.cginc принимает roughness, а не perceptualRoughness .
  • В старых версиях Unity можно было выполнить переназначение с помощью Marmoset roughness. С переходом на GGX он больше не соответствует, а определение UNITY_GLOSS_MATCHES_MARMOSET_TOOLBAG2 и связанный с ним код были удалены.
  • Все операции чтения и записи в Gbuffer должны проходить через новые функции UnityStandardDataToGbuffer / UnityStandardDataFromGbuffer.
  • Код вашего шейдера должен вызывать UnityGlossyEnvironmentSetup() для инициализации структуры Unity_GlossyEnvironmentData, а не делать это вручную.
  • Переменная roughness в Unity_GlossyEnvironmentData на самом деле представляет собой "перцептивную шероховатость", но она не была переименована, чтобы избежать ошибки с существующим кодом шейдера. Примечание. UnityGlossyEnvironmentSetup принимает smoothness в качестве параметра и вычисляет воспринимаемую шероховатость.
  • Значение переменной ndotl в UnityLight теперь вычисляется на лету, и любое значение, записанное в переменную, игнорируется.
  • Макрос UNITY_GI устарел и больше не должен использоваться.

Шейдеры: проблема смещения полупикселя DirectX 9

Unity 5.5 теперь поддерживает полупиксельное смещение DX9 растеризациюпроцесс создания изображения путем вычисления пикселей для каждого многоугольника или треугольника. во всей геометрии. Это альтернатива трассировке лучей.
Посмотреть в Словарь
в фоновом режиме, что означает, что вам больше не нужно исправлять DX9. проблемы с полупикселем либо в шейдерах, либо в коде. Подробнее см. в этой записи блога. Если вы используете какие-либо из этих проверок в своем коде, теперь их можно удалить:

  • Проверяет шейдеры на UNITY_HALF_TEXEL_OFFSET и смещает вершины/UV на основе этого.
  • Проверка D3D9 с помощью SystemInfo.graphicsDeviceType или SystemInfo.graphicsDeviceVersion и смещение вершин/UV на основе этого.

Сейчас Unity решает эту проблему, вставляя код настройки полупикселя во все компилируемые вершинные шейдеры. В результате вершинный шейдерпрограмма, которая запускается для каждой вершины 3D-модели во время рендеринга модели. Подробнее
См. в Словарь
постоянный регистр c255 становится зарезервированным Unity, а также две инструкции добавляется во все шейдеры, и используется еще один временный регистр. Это не должно создавать проблем, если ваши вершинные шейдеры не используют все доступные ресурсы (постоянные/временные регистры и слоты инструкций) до абсолютного максимума.

Шейдеры: значение Z-буфера инвертировано

Направление Z-буфера (буфера глубины) было инвертировано, и это означает, что Z-буфер теперь будет содержать 1,0 в ближней плоскости и 0,0 в дальней плоскости. В сочетании с буфером глубиныс плавающей запятой это хранилище памяти, в котором хранится глубина z-значения каждого пикселя изображения, где z-значение — это глубина каждого отображаемого пикселя от плоскости проекции. Подробнее
См. в Словарь
значительно увеличивает точность буфера глубины, что приводит к уменьшению Z-борьбы и лучшие тени, особенно при использовании маленьких ближних и больших дальних плоскостей.

Изменения графического API:

  • Диапазон интервала клипа: [near, 0] вместо [0, far]
  • Диапазон текстуры _CameraDepthTexture: [1,0] вместо [0,1]
  • Смещение по оси Z сбрасывается перед применением
  • 24-битные буферы глубины переключаются на 32-битный формат с плавающей запятой

Следующие макросы/функции будут обрабатывать ситуации с обратным Z без каких-либо дополнительных действий. Если ваш шейдер уже использовал их, то никаких изменений с вашей стороны не требуется:

  • Linear01Depth(с плавающей запятой по оси z)
  • LinearEyeDepth(с плавающей запятой)
  • UNITY_CALC_FOG_FACTOR(координата)

Однако, если вы извлекаете значение Z-буфера вручную, вам нужно будет написать код, аналогичный следующему:

float z = tex2D(_CameraDepthTexture, uv); #if defined(UNITY_REVERSED_Z) z = 1.0f - z; #endif

Для глубины клипа вы можете использовать следующий макрос. Обратите внимание, что этот макрос не изменит пространство клипа на платформах OpenGL/ES, но останется [-near, far]:

float clipSpaceRange01 = UNITY_Z_0_FAR_FROM_CLIPSPACE(rawClipSpace);

_ZBufferParams теперь содержит эти значения на платформах с обратным буфером глубины. Дополнительную информацию см. в документации по отличиям рендеринга в зависимости от платформы.

x = -1+far/near y = 1 z = x/far w = 1/far

Z-смещение обрабатывается Unity автоматически, но если вы используете собственный код, рендерингпроцесс отрисовки графики в экран (или в текстуру рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в плагине Словарь
, который вам понадобится, чтобы отменить его в коде C/C++. на соответствующих платформах.

Специальная папка: подпапка редактора Unity под названием «Resources»

Все вложенные папки папки с именем Editor будут исключены из сборки и не будут загружаться в режиме воспроизведения в редакторе Unity. Раньше ресурсы подпапки Resources включались в сборку. Эти ресурсы по-прежнему можно загрузить, вызвав Resource.Load() в вашем редакторе скриптыфрагмент кода, который позволяет вам создавать свои Компоненты, запускайте игровые события, изменяйте свойства Компонентов с течением времени и реагируйте на ввод данных пользователем любым удобным для вас способом. Подробнее
См. в Словарь
.

Например, эти файлы исключены из сборки и не загружаются в режиме воспроизведения в редакторе, но будут загружаться при вызове из скриптов:

  • Editor/Foo/Resources/Bar.png (загружается из кода редактора как «Bar.png»)
  • Редактор/Ресурсы/Foo.png
  • Editor/Resources/Editor/Resources/Foo.png (это загружается из кода редактора как «Foo.png», но не как «Editor/Resources/Foo.png»)

Эти объекты будут загружаться в любых ситуациях:

  • Editor/Resources/Foo.png
  • Resources/Foo/Editor/Bar.png (загружается как «Foo/Editor/Bar.png»)
  • Resources/Editor/Resources/Foo.png (это загружается как «Foo.png», а не как «Editor/Resources/Foo.png»)

Допуск на обратную сторону и окончательная сборка

Ранее параметр Backface Tolerance в LightmapParameters не применялся при использовании окончательной сборки для запеченного GI. Теперь применяется правильно. Параметр теперь влияет как на этапы GI в реальном времени, так и на стадии запекания GI (включая финальную сборку).

Затронутые сценыСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
, в основном имеют одностороннюю геометрию ( например рекламные щиты), где важно иметь возможность настроить «Допуск обратной стороны», чтобы избежать аннулирования текселей, которые видят обратную сторону односторонней геометрии. В сценах, использующих рекламные щитытекстурированный 2D-объект, который вращается таким образом, что он всегда обращен к камере. Подробнее
Посмотрите в Словарь
и окончательно соберите карты освещенияПредварительно визуализированная текстура, содержащая эффекты источников света на статических объектах сцены. Карты освещения накладываются поверх геометрии сцены для создания эффекта освещения. Подробнее
See in Словарь
теперь можно улучшить, отрегулировав «Допуск обратной стороны», однако другие сцены также могут быть затронуты, если применяется «Допуск на обратную сторону» не по умолчанию, поскольку теперь он правильно учитывается на заключительном этапе сбора.

Стандартный шейдер BRDF2 теперь использует аппроксимацию GGX

BRDF2, стандартный тип шейдера, установленный на мобильных платформах по умолчанию, теперь использует аппроксимацию GGX вместо Блинна-Фонга. Это приближает его к BRDF1 (используется на настольных компьютерах по умолчанию) и улучшает визуальное качество.

Если вам нужно сохранить устаревшую аппроксимацию, вам следует изменить код BRDF2 в UnityStandardBRDF.cginc, который имеет новую реализацию внутри оператора #if UNITY_BRDF_GGX (это также используется BRDF1 для выбора GGX). Измените определение в UnityStandardConfig.cginc или измените #if UNITY_BRDF_GGX на #if 0 в функции BRDF2_Unity_PBS.

Gradle для Android

Теперь вы можете использовать Gradleсистему сборки Android, которая автоматизирует несколько процессов сборки. Эта автоматизация означает, что вероятность возникновения многих распространенных ошибок сборки снижается. Подробнее
См. Словарь
для сборки Android.

Gradle не так строго относится к ошибкам по сравнению с существующей системой сборки Unity для Android, а это означает, что некоторые существующие проекты может быть сложно преобразовать в Gradle. См. документацию по устранению неполадок Gradle, чтобы определить и устранить эти ошибки сборки.

Перегрузка экземпляра объекта изменилась

Специальная перегрузка функции Instantiate, которая по умолчанию принимает параметр для исходного GameObjectфундаментального объекта в сценах Unity. , который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
, и один для родительского преобразования был изменен, чтобы работать по-другому. Он больше не интерпретирует положение и вращение исходного GameObject как положение и вращение в мировом пространстве, таким образом игнорируя положение и вращение указанного родительского Transform.

Теперь по умолчанию он интерпретирует положение и поворот как локальное положение и поворот в пространстве указанного родительского преобразования. Это согласуется с поведением в редакторе. Ваши скрипты не будут автоматически обновляться. Это означает, что при запуске скриптов, содержащих вызовы этой перегрузки Instantiate, которые не были обновлены для учета этого изменения, вы можете столкнуться с непредвиденным поведением.

Визуализаторы и поведение компонентов LOD Group

Отключение LODМетод Level Of Detail (LOD) — это оптимизация, которая снижает количество треугольников, которые Unity должна отображать для GameObject, когда его расстояние от камеры увеличивается. Подробнее
См. в Словарь
Компонент "Группа" больше не отключает подключенные визуализаторы. к этому. Группа LODКомпонент для управления уровнем детализации (LOD) для игровых объектов. Подробнее
Настройки See in Словарь
применяются к средствам визуализации только при включенном компоненте LOD Group. . Unity автоматически применяет это изменение при обновлении проекта, и это изменение нельзя отменить.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3