首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之获取FrameDebugger每帧颜色数据(一百一十七)
2020
07-18

Unity3D研究院之获取FrameDebugger每帧颜色数据(一百一十七)

最近一直在思考如何能更好的做优化渲染,本篇文章只是另一种实现的思路,其实我也没完全想好怎么应用到实际游戏中来统计,希望各位看官多多提宝贵意见。

1.本例Unity的版本是Unity2019.3.1.4

2.采用URP渲染管线,老的渲染管线没有试过,大家可以试试看。

3.FrameDebugger会将每一这数据存入RT中,名字对应如下。

Unity3D研究院之获取FrameDebugger每帧颜色数据(一百一十七) - 雨松MOMO程序研究院 - 1
实际代码中就可以这样取到它的Texture了

并非所有都能取,比如shadowmap的RT,这名字是没有意义的,如果真想取,那就用C#反射吧。 但其实有上面两个基本已经够用了。

Unity3D研究院之获取FrameDebugger每帧颜色数据(一百一十七) - 雨松MOMO程序研究院 - 2

4.为了让代码更快的比较两帧图片的颜色,我采用了Burst编译比暴力的for循环快的可不是一点点。

5.为了让工具更加方便,不得不在代码中做了很多反射FrameDebugger的代码。

工具使用之前,大家可以先用FrameDebugger看一下自己需要截那些帧的数据。接着运行Unity,填入开始和结束帧的索引后,点击开始截取按钮即可。

Unity3D研究院之获取FrameDebugger每帧颜色数据(一百一十七) - 雨松MOMO程序研究院 - 3

截取完毕后,左边会保存每帧截取的图片,最后还会生成一张第1张和最后一张的中像素变化的图片(红色的区域就表示变化)还会输出最终像素数,重复像素数,总渲染顶点数。

Unity3D研究院之获取FrameDebugger每帧颜色数据(一百一十七) - 雨松MOMO程序研究院 - 4
在回到优化上来

1.重复像素数越多,其实就是半透明overdraw比较多。

2.最终像素数表示,光栅化后mesh最终呈现的颜色数。

3.总渲染顶点数,这个数值就很重要的。比如模型参与渲染了好几万个顶点,然而结果最终只贡献给屏幕20个像素,那这显然就不太合理了。

一些问题

1.如果摄像机会移动,那么就会造成有时候离模型近,有时候离的远,这样统计就不准确的。

2.如果使用RenderDoc能看到的信息会更多,我也比较推荐用Renderdoc,这篇文章只是开放一下思路。

上代码

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之获取FrameDebugger每帧颜色数据(一百一十七)》有 1 条评论

  1. 阿瑟东 说:

    66666666666,支持

留下一个回复

你的email不会被公开。