상세 컨텐츠

본문 제목

Metal. Ch 2. 3D Models

TIL/Metal

by box-jeon 2020. 6. 8. 23:22

본문

store.raywenderlich.com/products/metal-by-tutorials

세상에 내가 대체 뭘 공부하고 있는 거지? 2장인데 벌써 생각도 해본적 없는 신세계가 찾아오네요. 3D Model에 대해 알아보고, 샘플로 주어진 모델들을 MTKView에 그려봅니다. 여긴 어디... 난 누구...

What are 3D models?

3D model은 3차원 공간의 점들로 이루어집니다. MDLMesh의 생성자를 이용하면 box, sphere, cone 등 간단한 도형을 코드로 그리는 게 가능하며, 3D file format으로 작성된 모델을 import해서 MDLMesh를 생성할 수도 있습니다. 여기서는 Wavefront Technologies에서 만든 .obj format을 사용하고, 3D modeling app으로 Blender를 사용합니다. 무료인데다 RayWenderlich에서 튜토리얼도 제공한다고 하네요. www.raywenderlich.com/2622-blender-tutorial-for-beginners-how-to-make-a-mushroom

 

Blender Tutorial for Beginners: How To Make A Mushroom

Learn how to make a 3D mushroom in this Blender tutorial for beginners!

www.raywenderlich.com

모르는 개념이 너무 많이 나와서 책에 나오는 내용들을 도저히 정리하기가 어렵습니다. 깨달은 대로 나열해보면

  • Vertex: X, Y, Z 값을 갖는 점입니다. 좌표 뿐 아니라 texture, surface normal(?) 정보들로 구성됩니다.
  • Edge: Vertex를 연결하는 선입니다. 모델에 명시적으로 표현되지는 않습니다.
  • Face: Vertex와 edge로 구성된 면입니다. diffuse color, ambient color, specular color 정보를 가집니다.
  • Triangle: 3개의 vertex로 이루어진 face입니다. 왜 삼각형일까...싶은데 아무래도 모든 면이 삼각형으로 구성된 게 아닌가 싶습니다. 평평한 사각형도 삼각형 두개를 이어 붙여서 구현하고 있는 것 같아요. 아마도 점 3개로 면 하나의 위치를 정의하는 건 가능하지만, 점 4개는 한 면에 있지 않을 수도 있으니까?
  • Material: MDLMesh의 생성자를 이용해 그린 cone이 하나의 material이라고 말하고 있습니다.
  • Material groups: Blender에서 열어본 train의 경우, 여러 개의 material groups으로 이루어져있다고 합니다. 색깔당 하나라고 하는데, Blender에서 표시되는 material list가 wheel, body, chassis, cabin, hub, chimney로 되어 있는 걸 보면 모델을 만들 때 지정하는 단위 요소가 아닌가 싶습니다. Material 당 한 가지 색 밖에 지정을 못하는지도 모르죠.

Vertex descriptors

객체를 생성할 때 descriptor를 사용하는 것은 Metal에서 아주 일반적으로 사용하는 패턴이라고 합니다. 읽어들일 모델 데이터 포맷을 descriptor에 정의해야 합니다. 데이터 포맷을 동적으로 처리해야하는 이유는 아마도 3D file format이 다양하기 때문...이겠죠?

Metal coordination system

모든 model은 origin을 갖고 있습니다. 다만 Metal NDC(Normalized Device Coordinate) 시스템은 2-unit wide, 2-unit high, 1-unit deep하다고 합니다. 왜죠.

Submeshes

뭔지도 모르면서 일단 튜토리얼을 따라하고 있습니다. 일단 MDLMesh가 있고 그에 1:1로 맵핑되는 MTKMesh가 있습니다. Mesh는 Submesh의 container로 Submesh 배열을 프로퍼티로 갖고 있으며, 각 Submesh는 triangle에 대응합니다.

즉, 3개의 vertex로 표현할 수 있는데, 이 때 vertex의 순서에 따라 Submesh의 방향이 결정됩니다. Winding order가 반시계 방향일 경우 해당 triangle은 우리를 향하고 있는 것이고, 시계 방향일 경우 반대쪽을 향하는 것입니다. 이후에 다시 다뤄진다고 하는데, GPU는 전달받은 triangle 중 우리를 향하지 않는 triangle을 추려냄으로써 프로세싱 타임을 아낄 수 있다고 합니다.

'TIL > Metal' 카테고리의 다른 글

Metal. Ch 1. Hello, Metal!  (0) 2020.06.07

관련글 더보기

댓글 영역