Окружающая среда и постобработка

Godot 3 предоставляет переработанный ресурс Environment, а также новую систему постобработки с множеством доступных эффектов прямо из коробки.

Окружение

Ресурс Environment хранит всю информацию, необходимую для управления окружением рендеринга. Сюда входит небо, окружающее освещение, тональное отображение, эффекты и настройки. Сам по себе он ничего не делает, но становится включенным, если используется в одном из следующих мест в порядке приоритета:

Узел камеры

Environment (окружение) может быть установлено для камеры. Она будет иметь приоритет перед любыми другими настройками.

../../_images/environment_camera.png

В основном это полезно, когда нужно переопределить существующее окружение, но в целом лучше использовать опцию ниже.

Узел WorldEnvironment

Узел WorldEnvironment может быть добавлен в любую сцену, но только один может существовать в активном дереве сцены. Добавление более одного узла приведет к предупреждению.

../../_images/environment_world.png

Любое добавленное окружение имеет более высокий приоритет, чем окружение по умолчанию (объясняется ниже). Это означает, что его можно переопределять для каждой отдельной сцены, что делает его весьма полезным.

Окружение по умолчанию

Можно установить окружение по умолчанию, которое действует как запасной вариант, если окружение не было установлено для Camera или WorldEnvironment. Просто перейдите в Project Settings -> Rendering -> Environment:

../../_images/environment_default.png

Новые проекты, созданные в Менеджере проектов, поставляются с окружением по умолчанию (default_env.tres). Если необходимо создать такое окружение, сохраните его на диск, прежде чем ссылаться на него здесь.

Параметры окружения

Ниже приводится подробное описание всех опций окружения и того, как их предполагается использовать.

Фон

Раздел "Background" (Фон) содержит настройки заполнения фона (части экрана, где объекты не были нарисованы). В Godot 3.0 фон служит не только для отображения изображения или цвета, он также может изменять воздействие на объекты окружающего и отражённого света.

../../_images/environment_background1.png

Существует множество способов установить фон:

  • Очистить цвет использует прозрачный цвет по умолчанию, определенный в проекте. Фон будет постоянного цвета.

  • Custom Color подобен Clear Color, но с пользовательским значением цвета.

  • Sky позволяет создать панорамное небо (текстура в виде сферы с охватом 360 градусов) или процедурное небо (простое небо с градиентом и дополнительным солнцем). Объекты будут отражать его и поглощать окружающий свет от него.

  • Цвет + Небо позволяет определить небо (как указано выше), но использует постоянное значение цвета для рисования фона. Небо будет использоваться только для отражения и рассеянного света.

Рассеянный свет

Ambient (как определено здесь) - это тип света, который влияет на каждую геометрическую фигуру с одинаковой интенсивностью. Он является глобальным и не зависит от освещения, которое может быть добавлено в сцену.

Существует два типа окружающего света: Ambient Color (это постоянный цвет, умноженный на альбедо материала) и получаемый из Sky (как описано ранее, но для включения этого режима необходимо установить небо в качестве фона).

../../_images/environment_ambient.png

Когда в качестве фона установлено небо Sky, можно смешивать цвета окружающей среды и неба с помощью параметра Sky Contribution (по умолчанию для удобства это значение равно 1.0, поэтому на объекты влияет только небо).

Вот сравнение того, как разный окружающий свет влияет на сцену:

../../_images/environment_ambient2.png

Наконец, есть параметр Energy, который представляет собой множитель. Он полезен при работе с HDR.

В целом, рассеянный свет (ambient) следует использовать только в простых сценах, больших экстерьерах или по соображениям производительности (рассеянный свет дёшев), поскольку он не обеспечивает наилучшего качества освещения. Лучше генерировать окружающий свет с помощью ReflectionProbe или GIProbe, которые более точно имитируют распространение непрямого света. Ниже приведено сравнение по качеству между использованием плоского окружающего цвета и GIProbe:

../../_images/environment_ambient_comparison.png

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

Туман

Туман, как и в реальной жизни, заставляет отдалённые объекты исчезать в однородном цвете. Физический эффект на самом деле довольно сложен, но Godot обеспечивает хорошую аппроксимацию. В Godot есть два вида тумана:

  • Depth Fog: Применяется в зависимости от расстояния до камеры.

  • Height Fog: Применяется к любым объектам ниже (или выше) определённой высоты, независимо от расстояния до камеры.

../../_images/environment_fog_depth_height.png

Оба этих типа тумана можно настроить, сделав их кривую более или менее резким переходом.

Чтобы сделать эффект тумана более интересным, можно настроить два свойства:

Первый - Sun Amount, который использует свойство Sun Color (цвет солнца) тумана. Если смотреть на направленный свет (обычно солнце), цвет тумана будет меняться, имитируя солнечный свет, проходящий сквозь туман.

Второй - Transmit Enabled имитирует более реалистичное пропускание света. На практике это делает свет более заметным на фоне тумана.

../../_images/environment_fog_transmission.png

Карта тональности

Эта функция доступна только при использовании бэкенда GLES3

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

Опции тонального отображения (Tone Mapping):

  • Mode: Используемый режим отображения тонирования.

    • Linear: Режим тонового картирования по умолчанию. Это самый быстрый и простой оператор тонового отображения, но он приводит к тому, что яркое освещение выглядит передутым, с заметной обрезкой в выходных цветах.

    • Reinhardt: Выполняет изменение цветов рендеринга пикселей по такой формуле: color = color / (1 + color). Это позволяет избежать обрезания ярких бликов, но полученное изображение может выглядеть немного тусклым.

    • Filmic: Это позволяет избежать обрезания ярких бликов, в результате чего изображение обычно выглядит более ярким, чем при использовании Reinhardt.

    • ACES Fitted: тоновый маппер Academy Color Encoding System. ACES Fitted немного дороже, чем другие варианты, но он более реалистично обрабатывает яркое освещение, десатурируя его по мере того, как оно становится ярче. ACES обычно имеет более контрастный выход по сравнению с Reinhardt и Filmic. ACES рекомендуется использовать, если вы стремитесь к фотореалистичному изображению.

    • ACES: Устарел (будет удален в Godot 4.0). Ведёт себя как ACES, но не десатурирует освещение по мере того, как оно становится ярче (что менее реалистично). Рекомендуется использовать ACES Fitted вместо ACES.

  • Exposure: Экспозиция тонального отображения, имитирующая количество света, получаемого с течением времени (по умолчанию: 1.0). Более высокие значения приводят к общему более светлому виду. Если сцена кажется слишком тёмной в результате применения оператора тонового отображения или изменения точки белого, попробуйте немного увеличить это значение.

  • White: Точка белого в тональном отображении, которая моделирует, где в шкале находится белый цвет (по умолчанию: 1.0). Для фотореалистичного освещения рекомендуемые значения находятся между 6.0 и 8.0. Более высокие значения дают менее яркие блики, но в целом сцена выглядит немного темнее.

Auto Exposure (HDR) (автоэкспозиция)

Эта функция доступна только при использовании бэкенда GLES3

Несмотря на то, что в большинстве случаев освещение и текстурирование в значительной степени контролируются художником, Godot поддерживает простую реализацию высокого динамического диапазона с помощью механизма автоматической экспозиции. Обычно это используется для достижения реализма при совмещении внутренних помещений с низким освещением и на открытом воздухе. Автоэкспозиция имитирует работу камеры (или глаза), пытаясь адаптироваться между светлыми и тёмными местами и их различным количеством света.

../../_images/environment_hdr_autoexp.gif

Самый простой способ использовать автоэкспозицию - убедиться, что наружное освещение (или другое сильное освещение) имеет энергию больше 1.0. Это делается путём изменения множителя Energy (на самом светильнике). Для согласованности Sky обычно тоже нужно использовать множитель энергии, чтобы соответствовать направленному свету. Обычно значений от 3.0 до 6.0 достаточно для имитации условий внутри и снаружи помещения.

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

../../_images/environment_hdr_bloom.png

В разделе "Auto Exposure" пользовательские значения имеют разумные значения по умолчанию, но вы всё равно можете их подстроить:

../../_images/environment_hdr.png
  • Scale: Значение для масштабирования освещения. Более яркие значения создают более яркие изображения, меньшие - более тёмные.

  • Min Luma: Минимальная яркость, на которую будет настраиваться автоматическая экспозиция. Яркость - это среднее значение света во всех пикселях экрана.

  • Max Luma: Максимальная яркость, на которую будет настраиваться автоматическая экспозиция.

  • Speed: Скорость, с которой происходит коррекция яркости. Чем выше значение, тем быстрее происходит коррекция.

Эффекты промежуточной и последующей обработки

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

Screen-Space Reflections (SSR) (отражения в экранном пространстве)

Эта функция доступна только при использовании бэкенда GLES3

Хотя Godot поддерживает три источника данных об отражениях (Sky, ReflectionProbe и GIProbe), они могут не обеспечить достаточную детализацию для всех ситуаций. Сценарии, в которых отражения экранного пространства имеют наибольший смысл, - это когда объекты соприкасаются друг с другом (объект над полом, над столом, плавающий на воде и т.д.).

../../_images/environment_ssr.png

Другое преимущество (даже если оно включено минимально) заключается в том, что оно работает в реальном времени (в то время как другие типы отражений предварительно вычисляются). Это можно использовать для того, чтобы персонажи, автомобили и т.д. отражались от окружающих поверхностей при движении.

Для более точной настройки техники имеется несколько параметров, управляемых пользователем:

  • Max Steps (максимум шагов) определяет длину отражения. Чем больше это число, тем дороже вычисление.

  • Исчезание позволяет регулировать кривую нарастания, что полезно для смягчения площади контакта.

  • Fade Out (затухание) позволяет настроить кривую затухания, чтобы предел шага затухал плавно.

  • Depth Tolerance (допуск глубины) можно использовать для допуска экрана к зазорам. Чем больше значение, тем больше зазоров будет проигнорировано.

  • Roughness (шероховатость) - будет применяться размытие в пространстве экрана для аппроксимации шероховатости в объектах с данной характеристикой материала.

Помните, что отражения в пространстве экрана работают только для отражения непрозрачной геометрии. Прозрачные материалы не будут отражаться, так как они не записываются в буфер глубины. Это также относится к шейдерам, использующим SCREEN_TEXTURE или DEPTH_TEXTURE.

Затенение окружающего пространства экрана (SSAO)

Эта функция доступна только при использовании бэкенда GLES3

Как упоминалось в разделе Ambient, области, куда не попадает свет от узлов освещения (либо потому, что они находятся за пределами радиуса, либо затенены), освещаются окружающим светом. Godot может имитировать это с помощью GIProbe, ReflectionProbe, Sky или постоянного цвета окружения. Проблема, однако, заключается в том, что все предложенные ранее методы действуют скорее на больших масштабах (большие регионы), чем на более мелком уровне геометрии.

Постоянный цвет окружающей среды и Sky везде одинаковы, в то время как зонды GI и Reflection имеют больше локальных деталей, но недостаточно для моделирования ситуаций, когда свет не может заполнить внутренние полые или вогнутые элементы.

Это можно смоделировать с помощью Screen Space Ambient Occlusion. Как видно на изображении ниже, его цель - сделать вогнутые области темнее, имитируя более узкий путь для проникновения света:

../../_images/environment_ssao.png

Частой ошибкой является включение этого эффекта, включение света и невозможность оценить его. Это происходит потому, что SSAO действует только на окружающий свет, а не на прямой свет.

Вот почему на изображении выше эффект менее заметен при прямом свете (слева). Если вы хотите заставить SSAO работать и с прямым светом, используйте параметр Light Affect (хотя это и неправильно, некоторым художникам нравится, как это выглядит).

SSAO лучше всего смотрится в сочетании с реальным источником непрямого освещения, например, GIProbe:

../../_images/environment_ssao2.png

Настроить SSAO можно с помощью нескольких параметров:

../../_images/environment_ssao_parameters.png
  • Radius/Intensity: (радиус/интенсивность) Для управления радиусом или интенсивностью окклюзии доступны эти два параметра. Радиус указывается в мировых (метрических) единицах.

  • Radius2/Intensity2: Можно использовать вторичный радиус/интенсивность. Обычно хорошо работает сочетание большого и малого радиуса AO.

  • Bias: Этот параметр можно настроить для решения проблемы самозатемнения, хотя значение по умолчанию обычно работает достаточно хорошо.

  • Light Affect: SSAO воздействует только на окружающий свет, но увеличение этого ползунка может заставить его воздействовать и на прямой свет. Некоторые художники предпочитают этот эффект.

  • Ao Channel Affect: Если используется нулевое значение, для окружающего затенения будет использоваться только текстура AO материала; SSAO не будет применяться. Значения больше 0 умножают текстуру AO на эффект SSAO в различной степени. Это не влияет на материалы без текстуры AO.

  • Quality: В зависимости от качества, SSAO будет делать больше выборок по сфере для каждого пикселя. Высокое качество хорошо работает только на современных графических процессорах.

  • Blur: Тип используемого ядра размытия. Ядро 1x1 - это простое размытие, которое лучше сохраняет локальные детали, но не так эффективно (обычно лучше работает с настройками высокого качества выше), в то время как 3x3 лучше смягчает изображение (с эффектом, похожим на дизеринг), но не так хорошо сохраняет локальные детали.

  • Edge Sharpness: Этот параметр можно использовать для сохранения резкости краёв (избегает областей без AO на складках).

Глубина резкости / Дальнее размытие

Этот эффект имитирует фокусное расстояние на камерах высокого класса. Он размывает объекты за заданным диапазоном. Он состоит из Distance с областью Transition (в мировых единицах):

../../_images/environment_dof_far.png

Параметр Amount управляет степенью размытия. Для больших размытий может потребоваться настройка параметра Quality, чтобы избежать артефактов.

Глубина резкости / Близкое размытие

Этот эффект имитирует фокусное расстояние на камерах высокого класса. Он размывает объекты вблизи камеры (действует в противоположном направлении, как размытие вдали). Он состоит из Distance с областью Transition (в мировых единицах):

../../_images/environment_dof_near.png

Параметр Amount управляет степенью размытия. Для больших размытий может потребоваться настройка параметра Quality, чтобы избежать артефактов.

Обычно оба размытия используются вместе, чтобы сфокусировать внимание зрителя на определённом объекте:

../../_images/environment_mixed_blur.png

Свечение

В фотографии и кино, когда количество света превышает максимум, поддерживаемый носителем (будь то аналоговый или цифровой), он обычно вытекает наружу в более тёмные области изображения. Это моделируется в Godot с помощью эффекта Glow (свечение).

../../_images/environment_glow1.png

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

    1. Свет в пикселе превышает значение HDR Threshold (где 0 - весь свет превышает его, а 1.0 - свет превышает значение tonemapper White ). Обычно ожидается, что это значение будет равно 1.0, но оно может быть снижено, чтобы позволить пропустить больше света. Существует также дополнительный параметр, HDR Scale, который позволяет масштабировать (делать ярче или темнее) свет, превышающий порог.

../../_images/environment_glow_threshold.png
    1. Эффект Bloom имеет значение, установленное больше 0. По мере его увеличения он посылает в процессор свечения всего экрана в большем количестве.

../../_images/environment_glow_bloom.png

И то, и другое приведёт к тому, что свет начнет вытекать из более ярких участков.

Когда свечение становится видимым, им можно управлять с помощью нескольких дополнительных параметров:

  • Intensity (интенсивность) - это общая шкала для эффекта, его можно сделать сильнее или слабее (0.0 убирает его).

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

Blend Mode (режим смешивания) эффекта также можно изменить:

  • Additive - самый сильный, поскольку он только добавляет эффект свечения на изображение без смешивания. В целом, он слишком силён для использования, но может хорошо смотреться при низкой интенсивности Bloom (создает эффект, похожий на сон).

  • Screen гарантирует, что свечение никогда не будет ярче самого себя, и отлично работает в качестве универсального средства.

  • Softlight - самый слабый режим по умолчанию, создающий лишь едва заметное нарушение цвета вокруг объектов. Этот режим лучше всего работает в тёмных сценах.

  • Replace (заменить) можно использовать для размытия всего экрана или отладки эффекта. Он показывает только эффект свечения без изображения ниже.

Чтобы изменить размер и форму эффекта свечения, Godot предоставляет Levels. Маленькие уровни - это сильное свечение, которое появляется вокруг объектов, а большие уровни - это туманное свечение, покрывающее весь экран:

../../_images/environment_glow_layers.png

Однако настоящая сила этой системы заключается в возможности комбинировать уровни для создания более интересных узоров свечения:

../../_images/environment_glow_layers2.png

Наконец, поскольку самые верхние слои создаются путём растягивания небольших размытых изображений, возможно, будет заметна некоторая блочность. Включение Bicubic Upscaling позволяет избавиться от неё с минимальными затратами производительности. Обратите внимание, что это эффективно только при использовании бэкенда GLES3.

../../_images/environment_glow_bicubic.png

Adjustments (настройки)

В конце обработки Godot предлагает возможность выполнить некоторые стандартные корректировки изображения.

../../_images/environment_adjustments.png

Первое - это возможность изменять типичные параметры яркости, контрастности и насыщенности:

../../_images/environment_adjustments_bcs.png

Второй способ заключается в использовании градиента для коррекции цвета. Обычный чёрно-белый градиент, как показано ниже, не даст никакого эффекта:

../../_images/environment_adjusments_default_gradient.png

Но создание собственных позволит сопоставить каждый канал с отдельным цветом:

../../_images/environment_adjusments_custom_gradient.png