unity CommandBuffer学习
时间:2021-07-01 10:21:17
帮助过:148人阅读
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);
}
}
View Code
脚本很简单,在finalpass之后绘制一个mesh
CommandBuffer支持延迟渲染和正向渲染,但需要注意如果在正向渲染中用了CameraEvent.AfterGBuffer之类的延迟渲染事件,会不起作用。
Unity的FrameDebug可以对CommandBuffer进行调试
有空再完善
unity CommandBuffer学习
标签:ons 简单 ring splay sys ndis style foreach indicator