假设我使用Unity Native Plugin来获取相机渲染的纹理,我在项目中添加了相同的功能。这两者之间有任何性能差异吗?
对于第二个,我刚刚添加了
RenderTexture currentRT = RenderTexture.active;
RenderTexture.active = cam.targetTexture;
cam.Render();
Texture2D image = new Texture2D(cam.targetTexture.width, cam.targetTexture.height);
image.ReadPixels(new Rect(0, 0, cam.targetTexture.width, cam.targetTexture.height), 0, 0);
image.Apply();
RenderTexture.active = currentRT;
return image;
对于第一个,我有一个像这样的本地插件(https://answers.unity.com/questions/1335556/problem-with-camera-rendering.html?childToView=1488524#answer-1488524)然后我导入插件.dll并从代码中调用该函数。 (N.B. GL.IssuePluginEvent可以通过“相机”脚本的OnPostRender函数调用)
总的来说,我观察到的第二种方法使得我的游戏在线捕获帧时速度变慢但在这种情况下使用插件是否有任何优势?
答案 0 :(得分:0)
非异步ReadPixels()
调用通过调用GPU> CPU内存传输并停止硬件管道而导致帧速率下降。
在这种情况下使用插件有什么好处吗?
如果您使用的是Unity 2017或更低版本,那么插件是异步传输GPU数据的唯一方法。您可以在GitHub/AsyncTextureReader找到一个开源插件。
如果您使用的是Unity 2018(测试版)或更高版本,则可以使用新的 experimental AsyncGPUReadback
类完全避免使用插件。见AsyncGPUReadback。