О функции OnRenderImage в Unity - PullRequest
       0

О функции OnRenderImage в Unity

0 голосов
/ 05 октября 2018

Здравствуйте, я пытаюсь использовать функцию OnRenderImge в Unity.У меня получилось, когда я открыл 3D проект.Но когда я использую проект HD Renderer Pipeline, функция не работает.Функция доставлена ​​или что-то еще?

1 Ответ

0 голосов
/ 05 октября 2018

Они удаляются при использовании HD Render Pipeline.Ниже приведены четыре функции , а не , вызываемые при использовании конвейера рендеринга HD:

  • OnPreCull
  • OnPreRender
  • OnPostRender
  • OnRenderImage

Причины их удаления перечислены на форуме Unity :

Поскольку эти обратные вызовы стоят, они предлагают способы добавить дополнительный код рендеринга в Unity.Проблема, возникающая при попытке перенести их в мир SRP, многогранна.

  • Существующие плагины, использующие их, созданы с очень очень глубоким неявным контрактом с Unity

    • Предполагается, что Camera.main установлен
    • Текущая целевая настройка рендеринга «известна» перед вызовом
    • Вы используете устаревшую постобработку (c ++, немного контроля сценариев)
  • Вызывается единством высокого уровня

    • Обратные вызовы (обычно) не имеют аргументов
      • Какая камера используется и т. Д.
    • Разработан как «примитивный» метод инъекции
      • У нас есть SRP, где вы можете сделать гораздо больше
  • Это быливызывается в середине рендеринга камеры.В целом это было плохо, так как у нас было бы настроено некоторое состояние рендеринга, и пользовательский код затем изменял бы это состояние (вызывая вложенный рендер, просто разрушая некоторое состояние кадрового буфера).Отсюда и большое количество ошибок в нашем заделе.Сложная часть заключается в том, что исправление любой ошибки здесь обычно приводит к регрессам против неявного, недокументированного поведения.

  • Всегда вызывается, даже если вы не хотите или нуждаетесь в них Заголовок без всякой причины

Что использовать при использовании HD Render Pipeline?

Регистрация в событиях RenderPipeline.beginCameraRendering и RenderPipeline.beginFrameRendering.Это новые экспериментальные функции, которые могут быть изменены в любое время.

void OnEnable()
{
    RenderPipeline.beginCameraRendering += BeginCameraRendering;
    RenderPipeline.beginFrameRendering += BeginFrameRendering;
}

void OnDisable()
{
    RenderPipeline.beginCameraRendering -= BeginCameraRendering;
    RenderPipeline.beginFrameRendering -= BeginFrameRendering;
}

void BeginCameraRendering(Camera camera)
{

}

void BeginFrameRendering(Camera[] cameras)
{

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...