unity CommandBuffer学习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity CommandBuffer学习相关的知识,希望对你有一定的参考价值。
unity官方的教程:https://blogs.unity3d.com/cn/2015/02/06/extending-unity-5-rendering-pipeline-command-buffers/
文章底部附带了一个demo工程
用官方例子改了改,作为测试脚本
using UnityEngine; using UnityEngine.Rendering; using System.Collections; using System.Collections.Generic; public class Test : MonoBehaviour { public Mesh testMesh; public Material testMaterial; Dictionary<Camera, CommandBuffer> m_Cameras = new Dictionary<Camera, CommandBuffer>(); void OnDisable() { foreach (var cam in m_Cameras) { if (cam.Key) { cam.Key.RemoveCommandBuffer(CameraEvent.BeforeLighting, cam.Value); } } } void LateUpdate() { var act = gameObject.activeInHierarchy && enabled; if (!act) { OnDisable(); return; } var cam = Camera.current; if (!cam) return; CommandBuffer buf = null; if (m_Cameras.ContainsKey(cam)) { buf = m_Cameras[cam]; buf.Clear(); } else { buf = new CommandBuffer(); buf.name = "Test Command Buffer"; m_Cameras[cam] = buf; cam.AddCommandBuffer(CameraEvent.AfterFinalPass, buf); } buf.DrawMesh(testMesh, Matrix4x4.TRS(Camera.main.transform.position + Camera.main.transform.forward * 4f, Quaternion.identity, Vector3.one), testMaterial); } }
脚本很简单,在finalpass之后绘制一个mesh
CommandBuffer支持延迟渲染和正向渲染,但需要注意如果在正向渲染中用了CameraEvent.AfterGBuffer之类的延迟渲染事件,会不起作用。
Unity的FrameDebug可以对CommandBuffer进行调试
有空再完善
以上是关于unity CommandBuffer学习的主要内容,如果未能解决你的问题,请参考以下文章
Unity CommandBuffer渲染MTR到自定义的RenderTexture