일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 후기
- c#
- 유니티
- 나만의 견해
- ag 내일배움캠프
- 코딩
- LookAt
- 게임용어
- 뭐드라
- 내일배움캠프
- materialpropertyblock
- 게임 회사
- til
- 공부
- 까먹기전에메모
- 프로그래밍
- spritelibrary
- 스파르타내일배움캠프
- 게임분석
- 연습
- 붕괴스타레일
- 스파르타내일배움캠프TIL
- 점프
- 블렌더
- 취업
- 붕괴 스타레일
- 원신
- 컴포넌트
- spritemask2d
- 취미
- Today
- Total
덴바의 노트
[유니티 기능] MaterialPropertyBlock 본문
새로 알게된 단어 또는 깨달음을 얻은 순간 작성하는 글입니다.
MaterialPropertyBlock은 오브젝트의 장착되어 있는 마테리얼의 특정 속성을 변경할 때 사용됩니다.
예를 들어..
유니티에서 3D 게임을 개발하다보면 Interaction을 개발해야하는 경우가 생길 것입니다.
그럴 때 기본적으로 상호작용 가능한 물체는 Canvas에 Text를 띄우거나
오브젝트의 색상을 변경하는 방식을 생각할 것입니다.
이 때 만약 오브젝트 색상을 바꾸는 형식으로 간다면,
이런 방식을 사용하는 분들이 있을 것입니다.
public void ChangeColor()
{
mesh.material.SetColor("_Color", Color.red);
}
MeshRenderer를 통해서 Material을 참조한 후, 해당 프로퍼티를 변경하는 것입니다.
그렇게 되면 마테리얼에 변화가 생깁니다.
Instance가 붙었죠?
마테리얼의 값을 변경하면서 동시에, 기존의 마테리얼에서 값을 변경한다고 보기보다는
새로운 인스턴스를 생성(복제)하여 값을 변경하고 MeshRender에 해당 마테리얼을 넣는 형식입니다.
이렇게 되면 하나의 문제점이 발생합니다.
문제점
가장 큰 문제점은 바로 Batching이 깨진다는 점입니다.
대부분은 배칭을 통해서 프레임을 잡아주겠지만,
만약 이런식으로 모든 상호작용이 가능한 물체에 색 변화를 줄 경우,
배칭이 깨지면서 프레임이 저하됩니다.
그런 것들을 방지하기 위해서 있는 것이 MaterialPropertyBlock입니다.
materialPropertyBlock.SetColor("_Color", Color.red);
mesh.SetPropertyBlock(materialPropertyBlock);
위와 같은 형식으로 마테리얼의 프로퍼티를 변경하게 된다면
마테리얼을 Instance 생성하지 않고 그대로 변경을 해냅니다.
물론 Static된 오브젝트를 값을 변경하는 것은 당연히 안됩니다.
자세한 정보는 아래 유니티 Docs 내용을 참고!
https://docs.unity3d.com/ScriptReference/MaterialPropertyBlock.html
Unity - Scripting API: MaterialPropertyBlock
MaterialPropertyBlock is used by Graphics.RenderMesh and Renderer.SetPropertyBlock. Use it in situations where you want to draw multiple objects with the same material, but slightly different properties. For example, if you want to slightly change the colo
docs.unity3d.com
'프로그래밍 노트 > 용어 정리' 카테고리의 다른 글
[유니티] Sprite Mask 2D (0) | 2024.05.12 |
---|---|
[게임 용어] 컷 인 (Cut in) (0) | 2024.04.29 |