使用Xcode查看unity的每帧情况

https://developer.apple.com/documentation/metal/frame_capture_debugging_tools/enabling_frame_capture
https://docs.unity3d.com/Manual/XcodeFrameDebuggerIntegration.html

启发于:https://forum.unity.com/threads/metal-can-i-edit-unitys-screen-backbuffer-color-depthbuffer-load-storeaction.554449/

  1. build好项目之后,选择meta模式或者其他

在这里插入图片描述

在这里插入图片描述

选择meta模式,或者其他,然后运行到某个手机。

  1. 测试代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;

public class RTTest : MonoBehaviour
{
    public MeshFilter m1;
    public MeshFilter m2;
    public MeshFilter m3;
    private RenderTexture m_rt1;
    public Material m_mat1;
    public Material m_mat2;
    public Camera m_camera;
    private int m_texID = Shader.PropertyToID("_MainTex");


    private void Start()
    {
        m_rt1 = RenderTexture.GetTemporary(Screen.width, Screen.height, 32);
        CommandBuffer cb = new CommandBuffer();
        cb.name = "draw";
        cb.SetRenderTarget(m_rt1, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.Store);
        cb.ClearRenderTarget(true, true, Color.red);
        m_camera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, cb);
        cb.DrawMesh(m1.mesh, Matrix4x4.identity, m_mat1);
        Matrix4x4 m = Matrix4x4.identity;
        m.SetTRS(m3.transform.position, Quaternion.identity, Vector3.one);
        cb.DrawMesh(m3.mesh, m, m_mat1);
    }

    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        Graphics.Blit(m_rt1, destination);
    }
}

  1. 抓帧

在这里插入图片描述
两个commandbuffer,一个是我们自己定义的,一个是OnRenderImage函数自己创建的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
OnRenderImage所对应的commandbuffer:
此时其load和store都是27.7MB
在这里插入图片描述

而如果把我们自定义的commandbuffer改为:
cb.SetRenderTarget(m_rt1, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.DontCare);
那么在绘制之后,是不会有store的,所以rt1上也就没有任何的东西。
在这里插入图片描述
而OnRenderImage不会有任何的影响,还是load和store各自27.7MB。
在这里插入图片描述

总结:
1、在手机上进行测试,才能看到Load和Store的区别,pc上看不到。
2、手机上的RenderBufferLoadAction.DontCare和RenderBufferLoadAction.Load,经过测试没有区别,不知道为啥,可能是因为自己测试有问题。
3、RenderBufferStoreAction.DontCare不会写会rt,造成rt为空;
RenderBufferStoreAction.Store和RenderBufferStoreAction.Resolve以及RenderBufferStoreAction.StoreAndResolve都会写回。
但是Resolve和StoreAndResolve在pc上可能会报错。

所以,在一般情况下,我们的load选择为DontCare,而store选择Store即可。

Resolve模式在rt开启了msaa才会使用,resolve单词为解析的意思,就是从msaa到非msaa有一个解析的过程的意思。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值