상용 게임에서는 화면 전환 셰이더 효과를 어떻게 표현하는 걸까?
우선 생각나는 방식은 셰이더 그래프를 활용하여 머테리얼 정보들을 변경하여 표현하는 방법이 떠올랐다.
구현 자체는 문제가 없었으나, 사용하는데 있어 사소한 문제점이 발생되었다.
필자의 경우 스크립트에서 머테리얼 내 프로퍼티 값 자체를 변경하였더니, 머테리얼 인스턴스 자체의 프로퍼티 값이 변경되어 값을 다시 리셋해줘야 하는 현상이 발생했다.


열심히 정보들을 찾아본 경과 Unity에서는 Renderer.material과 Renderer.sharedMaterial의 차이를 이해하는 것이 중요하다고 한다.
- Renderer.material: 이 프로퍼티는 Material의 복사본을 생성하여 사용한다. 이렇게 하면 개별 객체의 Material을 독립적으로 변경할 수 있지만, 변경된 내용은 다른 객체에 영향을 미치지 않는다.
- Renderer.sharedMaterial: 이 프로퍼티는 모든 객체가 공유하는 Material을 직접 참조한다. 이렇게 하면 모든 객체에 동일한 변경 사항이 적용된다.
화면 전환 셰이더 효과 후에 Material 값을 원래대로 리셋해야 하는 경우, 일시적으로 Material을 변경하고 나서, 원래 값을 저장해 두었다가 애니메이션이 끝난 후 복원하는 방법도 가능하지만, 처리를 해주지 않는 경우에는 해당 Material의 프로퍼티 값들이 스크립트에서 변경한 값으로 매핑되어 있어 문제가 발생할 수 있다는 점이 있어 매우 난감하였다.
결국 머테리얼 객체 자체를 새롭게 생성해서 1회성으로 사용하는 방식을 채택하게 되었다.

'Unity' 카테고리의 다른 글
| [Unity - Material] Canvas UI 내 배치된 Image에 Emission 효과 적용하기 (0) | 2024.06.16 |
|---|---|
| [Unity - Material] 여러 개의 머테리얼 색상을 일괄적으로 변경하는 방법 (0) | 2024.06.13 |
| [Unity - Shader Graph] UV 텍스처의 U좌표를 -방향으로 반복 출력하게 만들기 (0) | 2024.06.04 |
| 게임 디자인 패턴 - 개요 (0) | 2024.04.02 |
| [Unity] 한글 주석 인코딩 깨짐 해결하기 (1) | 2024.01.31 |