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

Это примечания, о которых следует помнить при обновлении проектов с Unity 4 до Unity 5, если в вашем проекте используется собственный шейдерA программа, работающая на графическом процессоре. Подробнее
См. в коде Словарь
.

Шейдеры больше не применяют двукратное увеличение интенсивности света

Шейдеры больше не применяют двукратное увеличение интенсивности света. Вместо этого свет автоматически улучшается, чтобы быть в два раза ярче. Это создает большую согласованность и простоту в легких установках. Например, направленный свет, падающий на белую диффузную поверхность, получит точный цвет света. Обновление не влияет на анимацию, поэтому, если у вас есть анимированное значение интенсивности света, вы должны изменить свои кривые анимацииПозволяет добавлять данные к импортированному клипу, чтобы вы могли анимировать синхронизацию других элементов в зависимости от состояния аниматора. Например, для игры в ледяных условиях вы можете использовать дополнительную анимационную кривую для управления скоростью излучения системы частиц, чтобы показать сгущающееся дыхание игрока в холодном воздухе. Подробнее
Посмотрите в Словарь
или в коде скрипта и увеличьте их вдвое, чтобы получить то же самое смотри.

В случае пользовательских шейдеров, в которых вы определяете свои собственные функции освещения, вам необходимо удалить * 2 самостоятельно.

// A common pattern in shader code that has this problem will look like this c.rgb = s.Albedo * _LightColor0.rgb * (diff * atten * 2); // You need to fix the code so it looks more like this c.rgb = s.Albedo * _LightColor0.rgb * (diff * atten);

Увеличено количество интерполяторов и инструкций для некоторых поверхностных шейдеров

Встроенный конвейер освещения в Unity 5 может в некоторых случаях использовать больше интерполяторов текстурных координат или счетчика математических инструкций (чтобы заставить работать такие вещи, как неравномерный масштаб сетки, динамическое GI и т. д.). Некоторые из ваших существующих поверхностных шейдеровУпрощенный способ написания шейдеров для встроенного конвейера рендеринга. Подробнее
См. Словарь
может привести к ограничению координат текстуры или инструкций ALU, особенно если они были нацелены на шейдерную модель 2.0 (по умолчанию). Добавление «#pragma target 3.0» может обойти эту проблему. Для справки см. http://docs.unity3d.com/Manual/SL-ShaderPrograms. .

Неравномерный масштаб сетки должен учитываться в шейдерах

В Unity 5.0 неравномерные сетки больше не «предварительно масштабируются» на ЦП. Это означает, что нормальные и касательные векторы могут быть ненормализованы в вершинном шейдерепрограмме, которая работает с каждой вершиной 3D-модели. когда модель визуализируется. Подробнее
См. в Словарь
. Если вы выполняете расчеты освещения вручную, вам придется их нормализовать. Если вы используете поверхностные шейдеры Unity, весь необходимый код будет сгенерирован за вас.

Обработка тумана была изменена

В Unity 5.0 встроенный туман работает на Windows Phone и консолях, но для этого мы немного изменили принцип работы тумана. Для поверхностных шейдеров и шейдеров с фиксированными функциями ничего дополнительно делать не нужно — туман будет добавлен автоматически (вы можете добавить «nofog» в строку #pragma поверхностного шейдера, чтобы явно запретить туман).

Для вершинных/фрагментных шейдеров, написанных вручную, туман теперь не возникает автоматически. Вам нужно добавить #pragma multi_compile_fog и макросы обработки тумана в код шейдера. Ознакомьтесь со встроенным исходным кодом шейдера, например Unlit-Normal, как это сделать.

Изменение альфа-канала шейдеров поверхности

По умолчанию все шейдеры непрозрачных поверхностей теперь выводят 1.0 («белый») в альфа-канал. Если вы хотите остановить это, используйте опцию «keepalpha» в строке #pragma.

Все шейдеры поверхностей с альфа-смешением теперь используют альфа-компонент, вычисленный функцией освещения, в качестве коэффициента наложения (вместо s.Alpha). Если вы используете пользовательские функции освещения, вы, вероятно, захотите добавить что-то вроде «c.a = s.Alpha» ближе к концу.

Удалена сортировка по индексу материала

Unity больше не выполняет сортировку по индексу материала в прямом цикле рендеринга. Это повышает производительность, поскольку можно отобразить больше объектов без изменения состояния между ними. Это нарушает совместимость контента, который использует индекс материала как способ сортировки. В версии 4.x meshосновной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
See in Словарь
с двумя материалами всегда будет отображать первый первый материал, а второй материал второй. В Unity 5 это не так, порядок зависит от того, что уменьшает большинство изменений состояния для рендеринга сценыСцена содержит среды и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
.

Исправлена ​​функция TexGen, матрицы текстур и некоторые режимы комбайнера SetTexture удалены

В Unity 5.0 удалена поддержка этой фиксированной функции шейдера:

  • Генерация UV-координат (команда TexGen).
  • Матрицы UV-преобразования (команда Matrix для свойства текстуры или внутри SetTexture).
  • Редко используемые режимы комбайнера SetTexture: сложение со знаком (a+-b), сложение со знаком умножения (ab+-c), вычитание умножения (abc), скалярное произведение (dot3, dot3rgba).

Все вышеперечисленное теперь ничего не сделает, и шейдер инспекторокно Unity, отображающее информацию о текущем выбранном игровом объекте, настройки актива или проекта, что позволяет просматривать и редактировать значения. Дополнительная информация
See in Словарь
покажет предупреждения об их использовании. Вы должны переписать затронутые шейдеры, используя вместо этого программируемые вершинные + фрагментные шейдеры. В настоящее время все платформы поддерживают их, и использование шейдеров с фиксированными функциями не дает никаких преимуществ.

Если в вашем проекте есть довольно старые версии пакетов шейдеров Projector или Water, шейдеры могут использовать эту функцию. Обновите пакеты до версии 5.0.

Совмещение частей шейдера программируемых и фиксированных функций больше не допускается

Совмещение частично фиксированных функций и частично программируемых шейдеров (например, вершинное освещение с фиксированной функцией и пиксельный шейдер или вершинный шейдер и объединители текстур) больше не поддерживается. В любом случае, он никогда не работал на мобильных устройствах, консолях или DirectX 11. Это потребовало изменения поведения шейдера Legacy/Reflective/VertexLit, чтобы этого не делать — он потерял поддержку отражения для каждой вершины; с положительной стороны, теперь он ведет себя согласованно между платформами.

Шейдерный компилятор D3D9 был переключен с Cg 2.2 на HLSL

В основном это должно быть прозрачным (просто приведет к меньшему количеству ошибок codegen и немного более быстрым шейдерам). Однако компилятор HLSL может быть немного более требовательным к синтаксису. Некоторые примеры:

  • Необходимо полностью инициализировать выходные переменные. Используйте вспомогательный макрос UNITY_INITIALIZE_OUTPUT, как в D3D11.
  • Конструкторы float3(a_4_component_value) не работают. Вместо этого используйте «a_4_component_value.xyz».

Переменная шейдера «unity_Scale» удалена

Свойство шейдера «unity_Scale» удалено. В 4.x unity_Scale.w был масштабом преобразования 1/uniform, Unity 4.x отображал только модели без масштабирования или с однородным масштабированием. Другие масштабы выполнялись на ЦП, который был очень дорогим и имел непредвиденные накладные расходы памяти.

В Unity 5.0 все это делается на GPU путем простой передачи шейдерам матриц с неравномерным масштабом. Таким образом, unity_Scale был удален, поскольку он не может отображать полную шкалу. В большинстве случаев, когда использовалось «unity_Scale», мы рекомендуем вместо этого сначала преобразовать в мировое пространство. В случае преобразования нормалей вам всегда нужно использовать нормализацию преобразованной нормали. В некоторых случаях это приводит к немного более дорогому коду в вершинном шейдере.

// Unity 4.x float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal * unity_Scale.w); // Becomes this in Unity 5.0 float3 norm = normalize(mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal)); // Unity 4.x temp.xyzw = v.vertex.xzxz * unity_Scale.xzxz * _WaveScale4 + _WaveOffset; // Becomes this in Unity 5.0 float4 wpos = mul (_Object2World, v.vertex); temp.xyzw = wpos.xzxz * _WaveScale4 + _WaveOffset;

Тени, текстуры глубины и проходы ShadowCollector

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

Это означает, что проходы LightMode=ShadowCollector в шейдерах ни для чего не используются; вы можете просто удалить их из своих шейдеров.

Сама текстура глубины больше не генерируется с помощью замены шейдера; он визуализируется с помощью проходов шейдера ShadowCaster. Это означает, что пока ваши объекты могут отбрасывать правильные тени, они также будут правильно отображаться в текстуре глубины камеры (раньше это было очень сложно сделать, если вы хотели пользовательскую анимацию вершин или необычное альфа-тестирование). Это также означает, что Camera-DepthTexture.shader сейчас ни для чего не используется. Кроме того, все встроенные шейдеры теней не использовали отсечение задней поверхности; который был изменен, чтобы соответствовать режиму отбраковки обычного рендерингапроцесса рисования графики на экране (или текстуры рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в Словарь
.

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