Unity Material과 SharedMaterial의 차이가 무엇일까?

박승우·2024년 6월 23일
0

자 쉰 네 번째 키워드인 'Unity Material과 SharedMaterial의 차이'를 알아 보았다.

내가 지금 사용하고 있는 엔진이므로 자주 사용하는 부분에 대해서 알아보았다.

Unity Material과 SharedMaterial의 차이가 뭐에요?

Material

Material 프로퍼티는 렌더러의 인스턴스에 고유한 머티리얼을 반환한다. 이는 사용자가 해당 렌더러에 대한 머티리얼의 변경을 독립적으로 처리할 수 있게 한다. 중요한 점은 이 프로퍼티에 접근할 때마다 새 머티리얼 인스턴스를 생성한다는 것이다.

  1. 고유한 인스턴스 생성: Material 프로퍼티에 접근할 때마다 새 머티리얼 인스턴스가 생성된다. 이는 메모리 사용량을 증가시킬 수 있으며, 특히 많은 수의 오브젝트에 접근할 때 성능에 영향을 미칠 수 있다.

  2. 독립적인 변경: 한 렌더러의 Material을 변경해도 다른 렌더러에 영향을 미치지 않는다. 이는 오브젝트별로 다른 머티리얼 특성을 적용해야 할 때 유용하다.

코드

Renderer renderer = GetComponent<Renderer>();
renderer.material.color = Color.red; // 이 렌더러의 고유한 머티리얼의 색상을 변경

위 코드에서 renderer.material을 통해 고유한 머티리얼을 가져와 색상을 변경한다. 이 변경은 해당 렌더러에만 적용된다.

SharedMaterial

SharedMaterial 프로퍼티는 모든 렌더러가 공유하는 동일한 머티리얼 인스턴스를 반환한다. 이는 메모리 사용을 효율적으로 하고, 여러 오브젝트에 일관된 머티리얼을 적용할 수 있게 한다.

공유된 인스턴스 사용: 여러 렌더러가 동일한 머티리얼 인스턴스를 공유한다. 따라서 메모리 사용량이 절약되고, 많은 오브젝트에 동일한 머티리얼을 적용할 때 유용하다.
전역 변경: SharedMaterial을 변경하면 이 머티리얼을 사용하는 모든 렌더러에 변경이 적용된다. 이는 게임 내에서 일괄적으로 머티리얼 속성을 변경해야 할 때 유용하다.

코드

Renderer renderer = GetComponent<Renderer>();
renderer.sharedMaterial.color = Color.blue; // 이 머티리얼을 공유하는 모든 렌더러의 색상을 변경

위 코드에서 renderer.sharedMaterial을 통해 공유된 머티리얼의 색상을 변경하면 이 머티리얼을 사용하는 모든 렌더러에 변경이 반영 된다.

코드 예시

Material 예시

public class MaterialExample : MonoBehaviour
{
    private Renderer renderer;

    void Start()
    {
        renderer = GetComponent<Renderer>();

        // 새로운 인스턴스를 생성하여 해당 렌더러의 머티리얼을 변경
        renderer.material.color = Color.red;
    }
}

이 예시에서는 각 렌더러가 고유한 머티리얼 인스턴스를 가지므로, renderer.material을 통해 변경된 색상은 해당 렌더러에만 적용된다.

SharedMaterial 예시

public class SharedMaterialExample : MonoBehaviour
{
    private Renderer renderer;

    void Start()
    {
        renderer = GetComponent<Renderer>();

        // 모든 렌더러가 공유하는 머티리얼을 변경
        renderer.sharedMaterial.color = Color.blue;
    }
}

이 예시에서는 renderer.sharedMaterial을 통해 변경된 색상이 이 머티리얼을 공유하는 모든 렌더러에 적용된다.

성능과 메모리 고려사항

Material: 많은 오브젝트에 대해 개별 머티리얼을 사용하면 메모리 사용량이 크게 증가할 수 있다. 이는 특히 리소스가 제한된 환경에서 문제가 될 수 있다.
SharedMaterial: 메모리 사용을 절약할 수 있지만, 변경이 모든 오브젝트에 적용되기 때문에 의도하지 않은 영향을 미칠 수 있다.

결론 - 느낀 점

와 이렇게도 사용을 할 수 있구나 하고 지식이 늘었음을 느낀다.

profile
게임을 좋아하는 사람 입니다!

0개의 댓글