Unity 6로 넘어오면서 렌더링 파이프라인 관련 작업을 하다가 예상치 못한 문제에 부딪혔습니다. ScriptableRendererFeature를 구현하는 과정에서 알게 된 간단하지만 중요한 사실을 공유하고자 합니다.
Deprecated 경고의 향연
ScriptableRendererFeature를 작성하기 시작했는데, 코드 곳곳에 노란색 경고가 가득했습니다. 가장 당황스러웠던 것은 메인 실행 함수인 Execute() 메서드마저 deprecated 표시가 되어 있다는 점이었습니다.
// 기존 방식 (Deprecated)
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
// 렌더링 로직
}
C#
복사
대부분의 튜토리얼과 문서에서는 여전히 Execute()를 사용하고 있어서 더욱 혼란스러웠습니다. 그럼 도대체 어떻게 렌더링 로직을 실행하라는 건지 막막했습니다.
Render Graph로의 전환
경고 메시지들을 자세히 읽어보니 공통된 메시지가 있었습니다. Unity 2023 버전 이후로는 Render Graph 시스템으로 전환하라는 안내였습니다. 최대한 권장사항을 따라 코드를 수정했습니다.
// 새로운 방식 (Render Graph)
public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData)
{
// Render Graph를 사용한 렌더링 로직
}
C#
복사
예상치 못한 함정: Compatibility Mode
코드를 수정하고 실행했는데 이상한 현상이 발생했습니다. 프레임 디버거에서 제가 작성한 렌더 패스가 전혀 보이지 않는 것입니다. 브레이크포인트를 설정해도 RecordRenderGraph() 메서드에 아예 걸리지 않았습니다.
한참을 디버깅하다가 Graphics 설정을 확인해보니 Compatibility Mode라는 옵션이 기본적으로 체크되어 있었습니다.
이 옵션은 기존 렌더링 방식과 새로운 Render Graph 방식을 혼용하는 과정에서 호환성을 관리하기 위한 기능인 것 같습니다. 하지만 이 옵션이 활성화되어 있으면 새로운 Render Graph 기반 코드가 제대로 실행되지 않더군요.
해결책
Compatibility Mode를 해제하니 RecordRenderGraph() 메서드가 정상적으로 호출되기 시작했습니다. 프레임 디버거에서도 렌더 패스가 제대로 표시되었고, 모든 기능이 의도한 대로 작동했습니다.
Project Settings > Graphics > Compatibility Mode (기본값: 체크됨) → 해제
Plain Text
복사
마무리
Unity의 렌더링 시스템이 빠르게 진화하고 있는 만큼, 기존 방식에서 새로운 방식으로 전환하는 과정에서 이런 호환성 관련 이슈들이 종종 발생하는 것 같습니다.
특히 온라인 자료들이 아직 기존 방식을 기준으로 작성된 경우가 많아서, 새로운 방식을 적용할 때 주의가 필요합니다. Render Graph를 사용하실 때는 반드시 Compatibility Mode 설정을 확인해보시기 바랍니다.