command buffer

هي طريقة لاضافة مزيد من العمليات في ال rendering pipeline هذه العمليات كلها موجودة في الكلاسس CommandBuffer ثم بعد ذلك بامكانك اضافتها لل camera او ال light او حتى تنفيذها مباشرة عن طريق Graphics

Camera.AddCommandBuffer
Light.AddCommandBuffer
Graphics.ExecuteCommandBuffer

يمكن اضافة ال command buffer في اي مكان داخل ال rendering pipeline كما موضح في الصورة

مثال بسيط وسريع

CommandBuffer buf = new CommandBuffer();
buf.name = "Grab screen and blur";

// copy screen into temporary RT
int screenCopyID = Shader.PropertyToID("_ScreenCopyTexture");
buf.GetTemporaryRT (screenCopyID, -1, -1, 0, FilterMode.Bilinear);
buf.Blit (BuiltinRenderTextureType.CameraTarget, screenCopyID);
buf.SetGlobalTexture("_tex", screenCopyID);
buf.DrawMesh (gameobject.GetComponent<MeshFilter> ().mesh, Matrix4x4.identity, material);
buf.ReleaseTemporaryRT(screenCopyID);
Camera.main.AddCommandBuffer (CameraEvent.AfterEverything, buf);

GetTemporaryRT الحصول على temporary render trarget texture
Blit نسخ texture الى render target  او render target الى آخر مع امكانية عمل تعديل عليه باضافة  material .
SetGlobalTexture اضفنا ال texture الى uniform موجود في ال shader  الذي سوف نستخدمه في الرسم في السطر التالي
DrawMesh قمنا برسم كائن
AddCommandBuffer اضفنا ال command buffer  الى ال كاميرات ويتم تنفيذها بعد الانتهاء من رندرة المشهد بالكامل .
ReleaseTemporaryRT لتحرير الذاكرة التي انشأتها في GetTemporaryRT