명령버퍼 만들기 |
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) 버퍼가 모두 지워짐을 나타낸다.
반응형