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();
}
}
반응형