gpt4 book ai didi

c# - 关于Unity中的OnRenderImage函数

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:11 25 4
gpt4 key购买 nike

您好,我正在尝试在 Unity 中使用 OnRenderImge 函数。打开 3D 项目时我成功了。但是当我使用 HD Renderer Pipeline 项目时,功能不起作用。是功能交付还是其他什么?

最佳答案

它们在使用高清渲染管线时被移除。以下四个函数在使用 HD Render Pipeline 时不会被调用:

  • OnPreCull
  • OnPreRender
  • OnPostRender
  • OnRenderImage

删除它们的原因列在 Unity's forum 上:

就这些回调而言,它们提供了将额外渲染代码注入(inject) Unity 的方法。尝试将这些移植到 SRP 世界时出现的问题是多方面的。

  • 使用这些插件的现有插件是用非常非常深的与 Unity 的隐含契约

    • 假设 Camera.main 已设置
    • 当前的渲染目标设置是调用前“已知”的
    • 您正在使用传统的后处理(C++,小脚本控制)
  • 由高层统一调用

    • 回调(通常)没有参数
      • 正在使用什么相机等
    • 设计为“原始”注入(inject)方法
      • 我们有 SRP,您可以做更多
  • 这些是调用中间相机渲染。这通常很糟糕,因为我们将配置一些渲染状态,然后用户代码将改变这个状态(通过调用嵌套渲染,只是粉碎一些帧缓冲区状态)。这是我们中大量错误的地方积压从何而来。困难的部分是修复这里的任何错误通常会导致对隐含的、未记录的回归行为。

  • 总是被调用,即使你不想要或不需要它们原因

HD Render Pipeline使用什么?

注册到 RenderPipeline.beginCameraRenderingRenderPipeline.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)
{

}

关于c# - 关于Unity中的OnRenderImage函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52660619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com