超详细介绍Unity中的Command Buffers

Command Buffer简介

首先附加官方文档介绍:Command Buffer简介
Command Buffer 是一个保存渲染命令的缓冲区(内存块),我们可以使用它对渲染管线进行扩展,在渲染管线指定的某几个阶段插入这个渲染命令,以达到想要的效果。Command Buffer可以实现多种后效及特效,常用于对某个模型做二次渲染。
Command Buffer可以插入到渲染管线的以下节点位置:
在这里插入图片描述
以上节点可从Camera Event和Light Event获取:

CameraEvent和LightEvent

CameraEvent和LightEvent用于指定Command Buffer 插入的位置,分别对应camera和light:

CameraEvent

Properties

BeforeDepthTexture Before camera's depth texture is generated.
AfterDepthTexture After camera's depth texture is generated.
BeforeDepthNormalsTexture Before camera's depth+normals texture is generated.
AfterDepthNormalsTexture After camera's depth+normals texture is generated.
BeforeGBuffer Before deferred rendering G-buffer is rendered.
AfterGBuffer After deferred rendering G-buffer is rendered.
BeforeLighting Before lighting pass in deferred rendering.
AfterLighting After lighting pass in deferred rendering.
BeforeFinalPass Before final geometry pass in deferred lighting.
AfterFinalPass After final geometry pass in deferred lighting.
BeforeForwardOpaque Before opaque objects in forward rendering.
AfterForwardOpaque After opaque objects in forward rendering.
BeforeImageEffectsOpaque Before image effects that happen between opaque & transparent objects.
AfterImageEffectsOpaque After image effects that happen between opaque & transparent objects.
BeforeSkybox Before skybox is drawn.
AfterSkybox After skybox is drawn.
BeforeForwardAlpha Before transparent objects in forward rendering.
AfterForwardAlpha After transparent objects in forward rendering.
BeforeImageEffects Before image effects.
AfterImageEffects After image effects.
AfterEverything After camera has done rendering everything.
BeforeReflections Before reflections pass in deferred rendering.
AfterReflections After reflections pass in deferred rendering.
BeforeHaloAndLensFlares Before halo and lens flares.
AfterHaloAndLensFlares After halo and lens flares.

LightEvent

BeforeShadowMap Before shadowmap is rendered.
AfterShadowMap After shadowmap is rendered.
BeforeScreenspaceMask Before directional light screenspace shadow mask is computed.
AfterScreenspaceMask After directional light screenspace shadow mask is computed.
BeforeShadowMapPass Before shadowmap pass is rendered.
AfterShadowMapPass After shadowmap pass is rendered.

测试程序

       public Camera  m_camera;
		public void AddCommandBuffer(CommandBuffer commandBuffer)
		{
			//m_camera.RemoveCommandBuffer(CameraEvent.BeforeImageEffectsOpaque, commandBuffer); // 以防万一
			m_camera.AddCommandBuffer(CameraEvent.AfterForwardOpaque,commandBuffer);
		}
		public Shader shader;
		void start()
		{
		CommandBuffer buffer = new CommandBuffer();
        //设置自己的渲染,使用该shader在渲染不透明物体之前,再渲染一次物体本身
        buffer.DrawRenderer(GetComponent<Renderer>(), new Material(shader));
        AddCommandBuffer(buffer);
		}

发布了66 篇原创文章 · 获赞 231 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_36696486/article/details/104553672