카테고리 없음

유니티 _ 카메라 파이프라인

zelkova 2021. 4. 5. 10:28

<목차로 돌아가기>

 

SRP 작성하고

랜더러 작성하기

현재는 아무것도 그리지 않아서 까만화면일거임.

using UnityEngine;
using UnityEngine.Rendering;

[CreateAssetMenu(menuName = "Rendering/Custom Render Pipeline")]
public class CustomRenderPipelineAsset : RenderPipelineAsset {
    protected override RenderPipeline CreatePipeline() {
        return new CustomRenderPipeline();
    }
}
using UnityEngine;
using UnityEngine.Rendering;

public class CustomRenderPipeline : RenderPipeline {
    protected override void Render(ScriptableRenderContext context, Camera[] cameras) {
        throw new System.NotImplementedException();
    }
}

 

 

 

카메라 랜더링하기

이제 화면에 스카이뷰가 나옴.

using UnityEngine;
using UnityEngine.Rendering;

[CreateAssetMenu(menuName = "Rendering/Custom Render Pipeline")]
public class CustomRenderPipelineAsset : RenderPipelineAsset {
    protected override RenderPipeline CreatePipeline() {
        return new CustomRenderPipeline();
    }
}
-----------------------------------------------
using UnityEngine;
using UnityEngine.Rendering;

public class CustomRenderPipeline : RenderPipeline {

    CameraRenderer renderer = new CameraRenderer();

    protected override void Render(ScriptableRenderContext context, Camera[] cameras) {
        foreach (Camera camera in cameras) {
            renderer.Render(context, camera);
        }
    }
}

-----------------------------------------------
using UnityEngine;
using UnityEngine.Rendering;

public class CameraRenderer : MonoBehaviour
{
	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);
		
	}
	void DrawVisibleGeometry() {
		context.DrawSkybox(camera);
	}
	void Submit() {
		context.Submit();
	}
}



반응형