본문 바로가기

Unity/Articles

Unity: ShaderLab 패키지 요구사항 정의 (PackageRequirements)

2021.2 알파버전이 한창 개발되고있습니다.

 

SRP 역시 버전을 바꿔가며 거듭 진화하고 있는데, API 이름이라 지원하는 키워드 등 버전별로 사용가능한 부분이 상이해 섣불리 기존 프로젝트에 적용하기엔 부담스럽습니다. 에셋 개발자들 역시 SRP 버전업에 따라 키워드를 바꿔주거나 추가해주어야하고 유지보수가 쉽지 않습니다.

 

2021. 05. 12 2021.2 Alpha 포럼에 올라온 공지 스레드

 

Shader "MyShader" {
  SubShader {
    Pass {
      PackageRequirements {
        "com.unity.render-pipelines.universal":"[10.0,10.5.3]"
      }
      ...
    }
    Pass {
      PackageRequirements {
        "com.unity.render-pipelines.universal":"[11.0,11.2.4]"
        "com.my.other.package"
      }
      ...
    }
  }
}

 

기존에는 조건을 지정해 여러 Pass로 나누어 종속적으로 컴파일하는 방식은 플랫폼 별 대응이나 기능별 대응을 위해 사용되곤 했는데, 이제 패키지 버전까지 지정해 Pass를 따로 컴파일하도록 지정할 수 있도록 지원합니다. 해당 패키지가 존재하면 그 패스를 컴파일 하는 방식이 됩니다.

 

스크립터블 렌더 파이프라인에서는 버전이 바뀜에 따라 너무나 많은 변경사항들이 생기고, 기능이 추가 및 삭제됩니다. 특히 중간에 껴 있는 에셋 개발자들은 이에 매우 혼란스러워했고, 모든 SRP를 대응하기 위해서는 비슷한 리소스를 여러 버전으로 나누어 .unitypackage 파일을 포함시켜 배포하는 방식으로 작업해왔습니다. 필요한 버전 대응을 위해 매우 번거롭던 작업을 동반했던 것입니다.

 

이 기능 추가는 직접 게임을 개발하는 엔진의 엔드 커스터머에게는 큰 의미를 주지 못할 수도 있습니다. 직접 셰이더를 개발한다면 사용하는 SRP 버전에 맞춰 코드를 작성하면 그만이기 때문입니다. 이 변경사항은 셰이더를 판매하는 에셋 개발자들과 모듈화된 패키지 개발의 용이성을 위해 추가된 것으로 보입니다. 그러나 앞으로는 일반 개발자들도 알아두는 것이 나쁘진 않겠죠. 셰이더를 파악할 때 확인해야 할 사항이 하나 더 늘어났습니다. 이것은 유니티 개발팀에서도 확실히 SRP의 변경사항들이 감당이 안 되며, 이 방식보다 더 나은 솔루션을 제시할 수 없음을 의미합니다. 

 

 

참고링크 : Unity - Package requirements in ShaderLab - Unity Forum