카테고리 없음

유니티_파이프라인 클리어 및 버퍼

zelkova 2021. 4. 5. 10:30

<목차로 돌아가기>  

 

명령버퍼 만들기

context는 Submit할때까지 실제 랜더링을 지연시킵니다.

스카이 박스와 같은 일부작업은 지정된 특정한 방법으로 그렸지만

장면에서 지형과 같은 것을 그리려면 버퍼가 필요하다고 합니다.

 

CameraRenderer를 아래와 같이 교체하기

 

using UnityEngine;
using UnityEngine.Rendering;

public class CameraRenderer : MonoBehaviour
{
	const string bufferName = "Render Camera";
	CommandBuffer buffer = new CommandBuffer {
		name = bufferName
	};

	ScriptableRenderContext context;
	Camera camera;

    public void Render(ScriptableRenderContext context, Camera camera) {
        this.context = context;
        this.camera = camera;

        Setup();
        DrawVisibleGeometry();
        Submit();
    }

	void Setup() {
		context.SetupCameraProperties(camera);
		//기존에 랜더링한 콘텐츠를 지우고 새로 그려야 깨끗하게 잘 나온다고 함.
		// 첫번째 두번째 인수 깊이 및 색상을 지울 것인지
		// 세번째는 지우기에 사용되는 색상
		buffer.ClearRenderTarget(true, true, Color.clear);
		// 명령버퍼를 통하여 프로파일러 샘플을 주입할 수 있음.
		// 프로파일러와 프레임 디버거 모두 표시됨.
		buffer.BeginSample(bufferName);

		ExecuteBuffer();
	}

	void DrawVisibleGeometry() {
		context.DrawSkybox(camera);
	}

	void Submit() {
		buffer.EndSample(bufferName);
		ExecuteBuffer();
		context.Submit();
	}

	void ExecuteBuffer() {
		//버퍼 적용하고 썻던건 버리기 퉷.
		context.ExecuteCommandBuffer(buffer);
		buffer.Clear();
	}
}

 

 

 

 

참고로 랜더링 파이프라인이 1프레임에 어떤 일을 하는지 보려면 Frame Debugger을 키면된다.

주황색 네모박스처럼 나오면 잘 된것이다.

Claer( Color + Z + stencil)의 뜻은 색상(Color) 및 깊이(Z) 버퍼가 모두 지워짐을 나타낸다.

 

 

 

 

 

 

 

 

 

반응형