首页 > 代码库 > unity CommandBuffer学习
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学习
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。