c# - 关于Unity中的OnRenderImage函数

标签 c# unity-game-engine

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

最佳答案

使用高清渲染管道时它们会被删除。使用高清渲染管道时不会调用以下四个函数:

  • 预剔除
  • 预渲染
  • OnPostRender
  • OnRenderImage

Unity's forum 列出了它们被删除的原因:

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

  • 使用这些的现有插件是通过非常非常深入的构建的 与 Unity 的隐含合约

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

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

  • 始终被调用,即使您不想要或不需要它们也不会产生任何开销 原因

使用高清渲染管道时要使用什么?

注册 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)
{

}

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

相关文章:

c# - 完整的 Entity Framework 存储库接口(interface)

c# - 从 .Net 连接到 Informix 数据库

c# - 在代码隐藏中设置其 url 时无法呈现图像

c#在一个目录下使用不同版本的dll

unity-game-engine - 用于在区域中查找空白空间的函数,如果没有找到,如何返回错误?

unity-game-engine - 统一组合 2 个着色器

android - 如何在 FirebaseAnalytics for Unity3D 中设置 userId?

c# - 在调试器中唯一标识引用类型

c# - Parse.com 查询的主线程问题

unity-game-engine - 从外部源读取电影或更新 Assets