material
재질(Material)은 게임 오브젝트의 렌더러(Renderer) 컴포넌트에 연결되어 있는 속성으로,
해당 게임 오브젝트의 렌더링에 사용되는 재질을 의미한다.
재질은 색상, 텍스처, 반사율, 광택 등의 시각적 효과를 결정하는 데 사용된다.
각 게임 오브젝트는 자체적으로 재질을 가질 수 있으며, 이 재질은 각각 독립적으로 변경할 수 있다.
- 예제 코드: 여러 오브젝트가 동일한 material을 공유하고 있고, 그 색을 개별적으로 바꾸는 스크립트
using UnityEngine;
public class ChangeColor : MonoBehaviour
{
public Color newColor; // 변경하고자 하는 새로운 색상
void Start()
{
// 개별 객체의 Renderer 컴포넌트를 가져옴
Renderer renderer = GetComponent<Renderer>();
// 색상을 변경하여 개별 객체의 재질에 할당
renderer.material.color = newColor;
}
}
sharedMaterial
여러 게임 오브젝트가 동일한 재질을 공유하는 경우에 사용된다.
예를 들어, 동일한 재질을 사용하는 여러 개의 벽이 있다고 생각해보자.
이때 각 벽은 각자의 재질을 가지고 있지만, 실제로 모두 동일한 재질을 사용한다면,
이 재질을 공유 재질로 설정하여 메모리를 절약할 수 있다.
즉, 공유 재질은 여러 게임 오브젝트가 동일한 재질을 참조할 때 사용되며,
한 곳에서 변경하면 모든 오브젝트에 반영된다.
- 예제 코드: 여러 오브젝트가 동일한 material을 공유하고 있고, 그 색을 일괄적으로 바꾸는 스크립트
using UnityEngine;
public class ColorChanger : MonoBehaviour
{
public Color newColor; // 변경하고자 하는 새로운 색상
void Start()
{
// 공유하는 재질을 가져옴
Material sharedMaterial = GetComponent<Renderer>().sharedMaterial;
// 색상을 변경하여 재질에 할당
sharedMaterial.color = newColor;
}
}
최적화와 관련하여 사용 시 유의점
아래는 유니티 공식 메뉴얼에서 그대로 가져온 문장이다.
드로우콜 배칭을 위해서는 스크립트에서 material을 수정할 때 sharedMaterial을 수정해야겠다.
When you access shared material properties from a C# script, make sure to use Renderer.sharedMaterial and not Renderer.material. Renderer.material creates a copy of the material and assigns the copy back to the Renderer. This stops Unity from batching the draw calls for that Renderer.
'유니티 개발 기술 > 그래픽 & 비주얼' 카테고리의 다른 글
Z-Fight 해결 방법 (0) | 2023.07.31 |
---|---|
선형 공간(Linear Space)과 감마 공간(Gamma Space) (0) | 2023.07.31 |
ParticleSystem의 다양한 속성 (0) | 2023.07.25 |
ParticleSystem의 다양한 함수 (0) | 2023.07.25 |
Light 클래스의 다양한 속성 (0) | 2023.07.24 |