Параметры
source | Объект RenderTexture, содержащий исходное изображение.. |
destination | RenderTexture для обновления с измененным изображением. |
Описание
EventFunctions, которую Unity вызывает после завершения рендеринга Camera. Окончательное изображение с камеры.
Во встроенном конвейере рендеринга Unity вызывает OnRenderImage
для MonoBehaviours, которые подключены к тому же GameObject, что и включенная Camera после того, как камера завершила рендеринг. Вы можете использовать OnRenderImage
для создания полноэкранного эффекта постобработки. Эти эффекты работают путем считывания пикселей из исходного изображения, использования шейдера Unity для изменения внешнего вида пикселей и последующего рендеринга результата в целевое изображение. Обычно для выполнения этих действий используется Graphics.Blit.
Если несколько сценариев на одной и той же камере реализуют OnRenderImage
, Unity вызывает их в том порядке, в котором они отображаются в окне Camera Inspector, начиная сверху. destination
одной операции — это source
следующей; внутренне Unity создает одну или несколько временных RenderTexture для хранения этих промежуточных результатов.
В Android, чтобы избежать полос или использовать альфа-канал в полноэкранных эффектах, установите для PlayerSettings.use32BitDisplayBuffer значение true
.
OnRenderImage
не поддерживается в Scriptable Render Pipeline. Для создания пользовательских полноэкранных эффектов в Universal Render Pipeline (URP) используйте ScriptableRenderPass API. Чтобы создать собственные полноэкранные эффекты в конвейере рендеринга высокого разрешения (HDRP), используйте Пользовательский полноэкранный пропуск.
Информацию об использовании готовых эффектов постобработки Unity см. в разделе Постобработка.
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
// A Material with the Unity shader you want to process the image with
public Material mat;
void OnRenderImage(RenderTexture src, RenderTexture dest)
{
// Read pixels from the source RenderTexture, apply the material, copy the updated results to the destination RenderTextureGraphics.Blit(src, dest, mat);
}
}