SRP를 사용 시 주의사항
업데이트: 2022/01/31
개요
Unity는 2018.1부터 렌더링 설정과 실행을 C# 스크립트로 제어할 수 있는 구조인 「Scriptable Render Pipeline(SRP)」이 추가되었습니다.
SRP 자체에 대한 자세한 내용은 Unity 공식 문서를 참조하십시오.
이 렌더 파이프라인을 사용하면 Unity의 일부 이벤트 함수가 호출되지 않습니다.
이로 인해 Cubism SDK for Unity가 제대로 작동하지 않을 수 있습니다.
이 현상에 대한 Cubism SDK에서의 대응을 검토 중입니다.
[2020/01/31 추가]
Cubism 4 SDK for Unity R1 이상에서 SRP에 대응했습니다.
Cubism 4 SDK for Unity beta2 이전 버전을 사용하는 경우 다음 수정 방법을 사용하십시오.
아래에서는 자세한 내용과 수정 방법을 설명합니다.
원인
Cubism SDK for Unity에서는 각 Cubism의 컴포넌트 업데이트가 LateUpdate()로 수행되며 여기에 설정된 값을 CubismModel.OnRenderObject()로 메쉬 업데이트에 사용합니다.
OnRenderObject()는 Unity의 기존 렌더 파이프라인에서 Scene 중에 배치된 Camera 컴포넌트가 렌더링을 마친 시점에 호출되는 함수입니다.
그러나 Unity의 SRP를 사용하는 경우 Camera가 발행하는 이벤트 함수는 호출되지 않습니다.
따라서 Cubism SDK for Unity 그대로 사용하면 업데이트된 파라미터 등의 값이 메쉬에 반영되지 않으므로 화면의 모델을 애니메이션시킬 수 없습니다.
대응 방법
CubismModel.OnRenderObject()의 처리를 다른 타이밍에 실시함으로써 대응 가능합니다.
LateUpdate()에서 호출하도록 하는 것으로도 대응할 수 있습니다.
그러나 Cubism의 각 컴포넌트에 대한 처리가 CubismModel 이후에 호출되면 해당 컴포넌트에서 조작된 값이 반영되지 않으므로 CubismModel의 실행 순서가 명시적으로 마지막이 되도록 설정해야 합니다.
Unity의 기능으로 실행 순서를 설정하거나 CubismUpdateController를 이용하는 등의 방법으로 CubismModel의 실행 순서를 제어해 주세요.
또 Unity의 PlayerLoop 클래스를 이용하는 것으로도 대응 가능합니다.
PlayerLoop는 Unity에 의한 이벤트 함수의 호출을 조작하는 것이 가능해, 기존의 이벤트 함수가 호출되지 않거나 라이프 사이클의 임의의 타이밍에 유저가 정의한 함수의 호출을 삽입하는 것이 가능합니다.
PlayerLoop 클래스에 대해서는 Unity 공식 문서를 참조하십시오.