в чем разница между urp и hdrp unity
Графика высокого разрешения воплотит ваши творческие планы
High Definition Render Pipeline (HDRP) обеспечивает непревзойденную производительность графического процессора. Вам доступен любой стиль, от фотореализма до стилизованной графики.
Unity предлагает два готовых процесса: High-Definition Render Pipeline (HDRP) и Universal Render Pipeline. Каждый из них имеет свою область применения и системные требования.
С помощью SRP можно управлять и настраивать рендеринг посредством скриптов на C#. Это позволяет не только вносить небольшие изменения, но и полностью перерабатывать и настраивать процесс рендеринга в соответствии с вашими требованиями.
Имея в арсенале универсальные средства физического рендеринга и бескомпромиссную эффективность использования графического процессора, HDRP создан специально для амбициозных проектов с графикой высокого разрешения.
HDRP предназначен для высокопроизводительных платформ, включая ПК, Xbox и PlayStation. Он позволяет обеспечить реалистичную графику в сложных сценариях. В HDRP используются технология Compute Shader и возможности современных графических процессоров.
HDRP можно использовать в разработке игр высокого разрешения, автомобильных демонстраций, архитектурных и других приложений, где приоритет отдается качеству графики. HDRP поддерживает как упреждающий, так и отложенный рендеринг, и использует физическое освещение и материалы.
HDRP — это огромный технологический скачок в области реализма графики, а также повышенное удобство использования.
Процесс создан специально для игр на современных консолях и ПК.
Настраиваемый стек постобработки позволяет создавать эффекты, автоматически интегрируемые в систему объема. Custom Render Pass позволяет добавлять шейдеры и код на C# в определенные моменты цикла рендеринга для отрисовки объектов, выполнения полноэкранных проходов и считывания данных из буфера камеры, включая глубину, цвет и нормали.
Look Dev представляет собой инструмент освещения, который позволяет проверять и сравнивать ассеты с помощью их визуализации, а также проверять правильность их работы при разных настройках освещения. Проверить ассет можно мгновенно, ведь он отображается в инструменте именно так, как будет отображаться в приложении.
Благодаря параметрам масштабирования вы можете создавать массивы HDRP-ассетов для проекта, каждый из которых будет иметь разные настройки качества графики. Это значит, что пользователи вашего приложения смогут выбрать уровень качества графики, соответствующий параметрам их оборудования.
Unity 2019.3 содержит улучшения алгоритмов Depth of Field, Screen Space Ambient Occlusion, системы теней (упрощенной), системы программирования освещения, а также интерфейса работы с освещением. Мы добавили поддержку DiscLight (только для запекания), оттенков полутеней, а также документацию к функциям API и графики.
Студия использовала стек постобработки, чтобы добиться кинематографического качества графики и физически корректного поведения камер, и все это — с рендерингом в реальном времени.
В демофильме также показаны цифровые модели людей с отрисовкой в реальном времени. В проекте использовались данные, полученные с помощью 3D- и 4D-сканирования для захвата текстур и движений. Создатели разработали полностью готовый процесс, от сбора данных до рендеринга в реальном времени в Unity, используя услуги различных поставщиков. Для отрисовки использовались все шейдеры, необходимые для достижения желаемого качества графики с применением HDRP.
Приключенческая игра с сильным сюжетом и множеством возможностей исследовать игровой мир. Инновационные технологии покадровой анимации воплощены с помощью различных инструментов Unity, в том числе фотограмметрии и HDRP, а сочетание Timeline и Cinemachine открыло для студии возможности нелинейного монтажа
Разработчики из Multiverse создали игру с богатой графикой и инопланетными, но не менее живыми окружениями. Такое качество было достигнуто благодаря использованию множества эффектов HDRP, например, настройки экспозиции, тонокоррекции, подповерхностного рассеивания, объемного освещения, цветокоррекции и искажения линз. В результате получился впечатляюще красивый мир, который демонстрирует стабильную производительность на уровне 60 кадров в секунду даже во время напряженных схваток с толпами врагов.
Шейдеры в Unity: введение в тему от Cyanilux
Привет! Это небольшое введение в тему шейдеров, что это такое и как они используются при рендере графики в Unity.
Что такое меш?
Прежде чем перейти конкретно к шейдерам, важно сначала получить базовое представление о том, что такое меш.
Меш содержит данные для 3D-модели, состоящие из вершин и того, как те соединяются в треугольники. Каждый треугольник состоит из 3 вершин, но каждая вершина может быть общей для нескольких треугольников (поэтому количество вершин не всегда будет втрое больше, чем треугольников).
Пример кубического меша, состоящего из 12 треугольников. В Blender (ПО для 3D-моделирования) это 8 вершин, однако при импорте в Unity цифра может измениться в зависимости от того, являются ли данные для каждой вершины одинаковыми у общих вершин.
Термины «меш» и «модель» обычно используются как взаимозаменяемые. Но если углубиться в детали, «меш» всегда относится к геометрии (вершины/треугольники), а «модель» может относиться к импортированному файлу, в котором иногда содержатся несколько объектов меша, сабмеши, а также материалы, анимация и т.д.
Когда мы говорим «вершина», мы обычно имеем в виду ее положение в трехмерном пространстве, но каждая вершина в меше может содержать множество фрагментов данных. Сюда входят такие данные, как:
Две вершины могут занимать одинаковое положение в 3D пространстве, но если не совпадают другие относящиеся к ним данные, в вершинных данных для них будет две отдельных записи.
Пример кубических мешей. Оба имеют по 12 треугольников, но у левого 24 вершины, а у правого 8.
Достаточно распространено, когда модель имеет равномерное затенение (flat shading), а не плавное (smooth shading) как на изображении выше. Равномерное затенение увеличит количество вершин, потому что нормали вершин у разных граней должны указывать в разных направлениях. (Этого может не случиться в самой программе моделирования, но произойдет при экспорте в Unity). Для плавного затенения используется среднее значение направлений, поэтому вершины можно использовать как общие, при условии, что остальные данные также совпадают!
Что такое шейдер?
Шейдер — это код, который выполняется на GPU (графическом процессоре), аналогично тому, как сценарий C # выполняется на центральном процессоре. В Unity отдельный файл «.shader» содержит программу шейдера, в которой обычно есть несколько «проходов» для рендеринга меша. Каждый проход содержит вершинный шейдер и фрагментный шейдер (иногда также называемый пиксельным шейдером). (Возможно, это немного сбивает с толку, но термин «шейдер» используется как для обозначения конкретных этапов, так и для программы / файла шейдера в целом).
Вершинный шейдер запускается для каждой вершины в меше и отвечает за преобразование трехмерных положений вершин (в пространстве объектов) в положения пространства отсечения (Геометрия отсекает невидимые камерой части объектов. Есть несколько дополнительных шагов, чтобы превратить это в положение на 2D экране. Надеюсь, я восполню пробелы в одном из следующих постов). Также он должен передавать из меша данные, которые потребуются для вычислений на этапе фрагментного шейдера (UV, нормали и т.д.).
В таких инструментах, как Shader Graph, все это обычно делается за нас, но важно понимать, что здесь происходит два отдельных этапа. В новых версиях есть Master Stack, чтобы четче разделить эти этапы. Он предоставляет нам порт Vertex Position, чтобы переопределить положение в пространстве объектов, прежде чем оно будет преобразовано в пространство отсечения, например, для Vertex Displacement. Мы также можем переопределить нормали и касательные, которые передаются на этап фрагментного шейдера, но Shader Graph обработает порты автоматически, если оставить поля пустыми.
Для каждого треугольника и вершины в этом треугольнике положения пространства отсечения, переданные из стадии вершин, используются для создания фрагментов — потенциальных пикселей на 2D-экране. Все данные для каждой вершины, переданные во фрагментный шейдер, также интерполируются по треугольнику. Вот почему у каждой вершины может быть указан один цвет, но треугольник получится градиентно окрашенным. (То же самое происходит с UV, что позволяет правильно наложить текстуру, а не просто брать цвет как один пиксель для каждой вершины)
Далее для этих фрагментов (потенциальных пикселей) запускается фрагментный шейдер. Он определяет цвет, который будет нарисован на экране (и в некоторых случаях выводит значение глубины). В результате может выводиться сплошной цвет с использованием цветов вершин, сэмплирование текстур и/или более сложный шейдинг с вычислениями освещения (название «шейдер» пошло от слова shade – тень).
В некоторых случаях бывает нужно отменить/отбросить пиксель из рендера (например, по alpha).
Код шейдера
Шейдеры в Unity написаны на HLSL (High Level Shading Language), хотя обычно вы увидите, что его называют CG. Особенно, если имеете дело со встроенным конвейером (Built-in Render Pipeline).
Вы всегда увидите этот шейдерный код между тегами CGPROGRAM / HLSLPROGRAM и ENDCG / ENDHLSL. (А еще можете увидеть CGINCLUDE / HLSLINCLUDE, который включает код в каждый проход шейдера).
Шейдеры для URP / HDRP всегда должны использовать HLSL-версии этих тегов, так как CG-теги включают некоторые дополнительные файлы, которые не нужны этим конвейерам. В противном случае это приведет к ошибке из-за переопределения в библиотеках шейдеров.
Технически Shaderlab имеет несколько устаревших способов создания шейдеров с фиксированными функциями, что означает отсутствие в надобности CG/HLSL PROGRAM, но я бы не стал беспокоиться об их изучении, поскольку программирование шейдеров намного полезнее.
В качестве альтернативы существуют редакторы шейдеров на основе нодов, такие как Shader Graph (официальный, доступен для URP или HDRP), Amplify Shader Editor (работает во всех конвейерах, но не бесплатный) и Shader Forge (больше не поддерживается, работает только в старых версиях Unity).
Проходы шейдера
Обычно шейдеры включают основной этап, который либо не имеет тега LightMode, либо использует один из таких тегов как UniversalForward (URP), ForwardBase (Built-in Pipeline) или Forward (HDRP), если шейдер предназначен для использования в прямом, а не в отложенном рендеринге (я немного объясню это в следующем разделе).