0

在 Unity Engine 上,我正在尝试将图像效果(来自资产存储)从相机事件OnRenderImage(RenderTexture source, RenderTexture destination)转换为相机命令缓冲区(UnityEngine.Rendering.CommandBuffer)(以控制所有效果堆栈的渲染顺序)。

图像效果渲染 C# 方法相当复杂,我宁愿不修改它(从头开始重做效果可能会更快)。

因此,理想的解决方案是通过命令缓冲区触发事件调用效果渲染 C# 方法。

CommandBuffer.IssuePluginCustomBlit看起来像一个解决方案,但我找不到任何如何设置它的示例。

它引用了一个回调方法、一个源渲染纹理和一个目标渲染纹理。有方法调用的例子(尤其是在 VRWorks 插件中):

buffer.IssuePluginCustomBlit(PluginExtGetIssueEventCallback(), (UInt32)command, source, dest, commandParam, commandFlags);
[DllImport("GfxPluginVRWorks32", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
    private static extern IntPtr PluginExtGetIssueEventCallback();

尽管如此,我不知道它PluginExtGetIssueEventCallback是如何构建的,以及它是如何实现源和目标渲染纹理的。

如果有人可以分享如何使用CommandBuffer.IssuePluginCustomBlit和创建回调方法的示例,将不胜感激。

谢谢!

4

1 回答 1

0

我建议CommandBuffer.Blit()改为。您可以轻松地使用自定义着色器。

要创建本机渲染插件,您需要为每个要支持的平台(windows、android、ios)的每个 3d api(d3d11、d3d12、vulkan、metal)编写单独的实现。所有这些都在 c++ 中,除了你宁愿使用目标 c 的苹果。您还必须分别为每个 3d api 编写自己的着色器。

看看这个小例子:

https://github.com/Unity-Technologies/NativeRenderingPlugin

请记住,Unity 原生渲染插件 API 的文档记录非常差。你几乎是靠自己的。

于 2022-02-08T08:54:06.233 回答