본문 바로가기
unity

Mesh Filter과 Mesh Renderer이 둘 다 존재해야 하는 이유

by mazayong 2022. 9. 1.

우선 요약하자면, Mesh Filter는 렌더링한 Mesh Reference를 전달하기 때문에 Mesh Filter이 없을 경우 Mesh Renderer가 무엇을 렌더링할 지 인식할 수 없기 때문에 Mesh가 표시되지 않는다.

 

 

 

그렇다면 왜 Mesh Renderer자체에 Mesh data나 Reference를 포함하지 않았을까?

결론부터 말하자면 component based system에서 개념들을 별도의 구성 요소로 분리하는 것이 일반적이기 때문이라고 한다.

Mesh Filter는 참조된 mesh에 Mesh Filter이 붙어 있는 경우, 해당 오브젝트의 Mesh Filter 값을 가져와 참조하는 것이다.

(물론 MeshCollider를 추가하면 이 기능을 자동으로 수행하도록 설계되어있다.)

 

시작 함수에서 최적화를 위해 이것을 지우겠다는 질문에서 메모리만 확보하고 성능적으로는 차이가 없다고 말하기 때문이다.

우선 MeshRenderer는 Mesh Filter이 필요하지만 그 역은 성립하지 않는다. Mesh Filter가 MeshRenderer에게 기능을 요구하기에는 Mesh Filter가 최소한의 기능을 가진 component여서 해당 작업 후 다른 작업을 수행하는 데 한계가 있기 때문이다.

 

물론 Modifier Stack 제공을 위한 의도적인 기능이라고 생각할 수도 있지만 각 객체의 작업 위에 지속적으로 Mesh Filter를 쌓는 일은 일어나지 않는다.

(당연하다. Mesh Filter이 계속 쌓인다는 것을 생각해 보면 하나의 mesh에 쌓일 일은 없을 테고, Mesh Reference에 참조된 mesh에 Mesh filter이 붙는 경우는 자동으로 현재 오브젝트의 Mesh Filter값을 가져오기 때문에 사실상 위와 같은 상황은 일어나지 않는다.)

 

유니티 커뮤니티-16년, 유니티 커뮤니티-17년 글을 참고했다.

고민하면서 봤는데 컴퓨터 시스템적 구조 특성상 분리하는 것이 일반적이었다는 내용이다. 마치 스프링의 마이크로서비스가 생각났다. 서비스들을 기능별로 다 분리하는 것처럼 말이다. 

이유에 대해 고민해볼수록 CS기본지식이 더욱 중요한 것 같다. 기본은 다 이유가 있는 듯하다.

 

 

++ Modifier Stack?

작업들을 각 객체의 geometry 위에 스택처럼 쌓는 비파괴 과정이다. 주로 3D 모델링 프로그램에 많이 내재되어 있다.

 

 

++ component based system