5.x에서 Unity용 6.x로 HDRP 업그레이드
고해상도 렌더 파이프라인(HDRP)에서 몇몇 기능은 주요 버전에서 다르게 작동합니다. 이 문서는 Unity용 5.x에서 6.x로 HDRP를 업그레이드하는 데 도움이 됩니다.
커스텀 셰이더
6.x에서 HDRP 머티리얼 프레임워크에 대한 셰이더 코드의 개선 사항으로 더 자유롭게 셰이더를 저작할 수 있습니다. 커스텀 셰이더를 생성했고 HDRP 프로젝트를 Unity 6.x로 업그레이드하려는 경우 새로운 프레임워크를 준수하려면 반드시 셰이더를 업데이트해야 합니다.
- 6.x에서 HDRP의 조명 모델은
EvaluateBSDF()
를 사용하지만 5.x는BSDF()
를 사용합니다.EvaluateBSDF()
는 반사되어 전달된 산란광과 스페큘러 광원에 대한 조명 정보를 포함하는CBSDF
구조체를 반환합니다. 6.x 이전에 HDRP는 람베르트 코사인을 자동으로 적용했습니다. 6.x부터는EvaluateBSDF()
안에 반드시 수동으로 적용해야 합니다.IsNonZeroBSDF
를 사용하여 BSDF를 평가하는 데 필요한지 여부를 확인합니다. - 6.x에서
GetBSDFAngles
함수는 이전과 다른 파라미터 세트를 허용합니다. 또한 더 이상NdotV
와NdotV
를 반환하지 않으므로 현재는 반드시 함수 밖에서 수동으로 고정해야 합니다. - 6.x에서 LightEvaluation과 SurfaceShading 파일에는 Unity 프로젝트에 포함하거나 제외하는 데 고를 수 있는 헬퍼 함수가 포함됩니다. 헬퍼 함수는 모든 HDRP 머티리얼이 호출하는(스택릿과 릿 포함) 일반 머티리얼과 광원 평가 코드를 처리합니다.
#define
을 사용하여 각 헬퍼 함수를 포함하거나 제거합니다. - 6.x에서
GetAmbientOcclusionForMicroShadowing()
메서드는ComputeMicroShadowing()
을 교체합니다.GetAmbientOcclusionForMicroShadowing()
은 마이크로 그림자에 대한 앰비언트 오클루전 프로퍼티를 사용하며 반면에 ComputeMicroShadowing()은 마이크로 그림자 값을 사용했습니다. - WorldToTangent는 이름이 잘못 지정되어 있었기 때문에 현재 TangentToWorld입니다.
셰이더 그래프
6.x에서 HDRP는 셰이더 그래프가 아닌 머티리얼 내에 SurfaceType, BlendMode, DoubleSided와 같은 프로퍼티를 저장합니다. 이러한 프로퍼티를 사용하는 모든 머티리얼은 해당 값이 마스터 노드 설정 값과 일치하지 않을 수 있기 때문에 현재 씬에 잘못 표시되어 있을 수 있습니다. 이러한 변경 사항은 PBR과 언릿 크로스 파이프라인 마스터 노드를 제외한 모든 셰이더 그래프 마스터 노드와 관련이 있습니다.
머티리얼에서 이러한 프로퍼티를 변경하면 HDRP는 생성된 셰이더에서 로컬 셰이더 키워드를 토글합니다. 마스터 노드는 계속 Settings View에 프로퍼티를 표시합니다. 마스터 노드는 이러한 프로퍼티 값을 계속 저장하지만 현재는 셰이더와 머티리얼에 대한 기본값으로 제공합니다. 머티리얼의 프로퍼티 값은 이러한 기본값을 오버라이드합니다.
이 변경 사항은 HDRP가 현재 렌더 상태 컨트롤에 대한 셰이더 키워드에 의존하기 때문에 셰이더 배리언트를 더 적게 생성해야 한다는 의미입니다. 또한 이 변경 사항을 사용하여 HDRP는 셰이더 스트리핑을 더욱 효율적으로 처리할 수 있습니다.
업그레이드
프로젝트에서 모든 셰이더 그래프를 업그레이드하려면 **Edit > Render Pipelines > Reset All Shader Graphs Scene Material Properties (Project)**를 선택합니다. 이는 자동으로 다음을 수행합니다.
- 프로젝트에서 모든 머티리얼 반복
- 머티리얼 프로퍼티를 해당 마스터 노드 값에 동기화하는 데 필요한 모든 키워드를 복사
- HDRP 머티리얼 키워드 초기화 함수 호출
- 셰이더 그래프에 일치시키기 위해 머티리얼의 렌더 대기열 설정
씬에서 셰이더 그래프만 업그레이드하려면 **Edit > Render Pipelines > Reset All Shader Graphs Scene Material Properties (Scene)**을 대신 선택합니다.