SDK for Unity에서의 마스크 사용 상한에 대하여
업데이트: 2023/05/25
개요
Cubism SDK for Unity의 디폴트에서는 표시되는 모든 모델이 하나의 마스크용 텍스쳐를 공유합니다.
따라서 각 모델이 마스크의 사용 상한 수를 초과하지 않아도 모델을 여러 개 화면에 배치하면 마스크용 텍스쳐의 사용 상한 수에 도달하여 클리핑 표시가 무너질 가능성이 있습니다.
이것을 피하는 방법은 3가지가 있으며, 각각 특징이 다릅니다.
- 모델별 마스크용 텍스쳐 설정
- 마스크용 텍스쳐에 할당을 등록/삭제하는 타이밍 변경
- 마스크용 텍스쳐 내부의 텍스쳐 수 늘리기
Unity의 마스크용 텍스쳐 특성에 대한 자세한 내용은 「각 Cubism SDK 비교」를 참조하십시오.
모델별 마스크용 텍스쳐 설정
이 방법은 마스크용 텍스쳐를 모델별로 준비함으로써 다른 배치된 모델에 영향을 받지 않고 클리핑을 표시할 수 있습니다.
다만, 마스크용 텍스쳐를 복수 준비하게 되기 때문에 그만큼 성능에 영향을 줄 가능성이 있으므로 주의해 주세요.
모델별로 마스크용 텍스쳐를 설정하려면 다음 절차를 실시하십시오.
- 전용 마스크용 텍스쳐 생성
- 생성한 마스크용 텍스쳐를 모델의 프리팹에 연결된 CubismMaskController의
Mask Texture
에 설정
전용 마스크용 텍스쳐 생성
모델 전용 마스크용 텍스쳐의 인스턴스를 만듭니다.
만드는 방법은 여러 가지가 있습니다.
다음 방법 중 하나로 생성하십시오.
- Cubism SDK for Unity와 함께 제공되는 GlobalMaskTexture를 복제
- CubismMaskTexture 클래스의 인스턴스 생성
- 모델을 가져올 때 생성된 것을 사용
Cubism SDK for Unity와 함께 제공되는 GlobalMaskTexture를 복제
모델이 공유하는 마스크용 텍스쳐는 SDK를 가져온 프로젝트의 다음 위치에 있습니다.
/Assets/Live2D/Cubism/Rendering/Resources/Live2D/Cubism/GlobalMaskTexture
![](https://docs.live2d.com/4.2/cms/wp-content/uploads/2023/05/2023-05-16_16h29_38.png.pagespeed.ce.3100hhS9uF.png)
이것을 선택 상태로 하고 Ctrl+D를 누르는 등의 방법으로 복제해 주십시오.
CubismMaskTexture 클래스의 인스턴스 생성
Cubism SDK for Unity와 함께 제공되는 에디터 확장에는 CubismMaskTexture 클래스의 인스턴스를 만드는 것이 있습니다.
생성하려면 Unity Project 창을 오른쪽 클릭하거나 + 버튼에서 [Create] > [Live2D Cubism] > [Mask Texture]
를 클릭합니다.
![](https://docs.live2d.com/4.2/cms/wp-content/uploads/2023/05/2023-05-16_16h24_40.png.pagespeed.ce.qmcC6w5-zv.png)
모델을 가져올 때 생성된 것을 사용
Cubism 4 SDK for Unity R7 이상에서는 모델을 가져오면 .model3.json과 같은 위치에 전용 마스크용 텍스쳐가 생성됩니다.
![](https://docs.live2d.com/4.2/cms/wp-content/uploads/2023/05/2023-05-16_16h33_52.png.pagespeed.ce.15mjK8pH63.png)
생성된 마스크용 텍스쳐를 모델의 프리팹에 연결된 CubismMaskController의 Mask Texture에 설정
모델의 프리팹을 선택 상태로 만들고 Inspector 창의 Mask Texture로 마스크용 텍스쳐를 드래그 앤 드롭합니다.
![](https://docs.live2d.com/4.2/cms/wp-content/uploads/2023/05/2023-05-16_16h48_39.png.pagespeed.ce.pWNyvD6nXE.png)
마스크용 텍스쳐에 참조를 등록/삭제하는 타이밍 변경
이 방법은 화면에 표시되는 모델이 적고, 총 마스크 수가 사용 상한에 도달하지 않았지만 표시가 무너지는 경우에 실시합니다.
Cubism SDK for Unity에서는 장면에 모델의 프리팹이 생성될 때 마스크용 텍스쳐에 자신의 참조를 등록하고 마스크용 텍스쳐는 등록된 모델에서 얻은 정보로 마스크를 생성합니다.
이 마스크용 텍스쳐에 등록된 참조가 삭제되는 타이밍은 그 모델이 삭제되었을 때입니다.
따라서 모델을 숨기기만 한 상태에서는 마스크용 텍스쳐에 참조가 남아 있습니다.
이로 인해 화면에 표시되는 모델이 적어도 숨겨진 상태의 모델이 복수 존재하면 마스크의 사용 상한을 넘어 버려 표시가 무너질 수 있습니다.
이 방법에서는 모델이 참조를 마스크용 텍스쳐에 등록/삭제하는 타이밍을 표시 시/비표시 시로 변경합니다.
또한 텍스쳐 수를 늘리는 다른 방법과 비교할 때 가장 부하가 걸리지 않습니다.
단, 표시된 모델의 총 마스크 수가 사용 상한에 도달한 경우에는 대응할 수 없습니다.
이 경우 다른 방법을 시도하십시오.
마스크용 텍스쳐에 참조를 등록/삭제하려면 CubismMaskController의 이벤트 함수를 변경합니다.
- 참조를 등록하는 처리의 이벤트 함수 변경
- 참조를 삭제하는 처리의 이벤트 함수 변경
참조를 등록하는 처리의 이벤트 함수 변경
CubismMaskController
클래스의 Start()
를 OnEnable()
로 변경합니다.
private void OnEnable() { // Fail silently. if (MaskTexture == null) { return; } MaskTexture.AddSource(this); // Get cubism update controller. HasUpdateController = (GetComponent<CubismUpdateController>() ! = null); }
참조를 삭제하는 처리의 이벤트 함수 변경
CubismMaskController
클래스의 OnDestroy()
를 OnDisable()
로 변경합니다.
private void OnDisable() { if (MaskTexture == null) { return; } MaskTexture.RemoveSource(this); }
마스크용 텍스쳐 내부의 텍스쳐 수 늘리기
Cubism SDK for Unity R7 이상에서는 마스크용 텍스쳐가 내부에 유지하는 텍스쳐의 수를 임의로 늘릴 수 있습니다.
스펙이 허용하는 한 무제한으로 늘릴 수 있기 때문에, 1개의 모델이 사용 가능한 마스크 수의 상한을 넘은 경우에도 정상적으로 클리핑을 표시하는 것이 가능합니다.
또 이 방법은 위의 다른 두 방법과 병용하는 것도 가능합니다.
마스크용 텍스쳐가 유지하는 텍스쳐를 늘리려면 마스크용 텍스쳐를 선택하고 Inspector에서 RenderTextureCount의 값을 원하는 수로 설정합니다.
이 값에 0이 설정되어 있을 경우 종전과 같이 1개의 마스크용 텍스쳐가 내부에 유지됩니다.
![](https://docs.live2d.com/4.2/cms/wp-content/uploads/2023/05/2023-05-16_18h48_10.png.pagespeed.ce.BDLdXnv6E5.png)