Они удаляются при использовании 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)
{
}