본문 바로가기
DirectX 12/Terrain

[DirectX12 - Terrain] Chapter 02. Terrain

by song.ift 2023. 7. 7.

GitHub : https://github.com/developeSHG/DirectX12-Terrain/commits/02.Terrain

 

GitHub - developeSHG/DirectX12-Terrain: DirectX12 - Terrain

DirectX12 - Terrain. Contribute to developeSHG/DirectX12-Terrain development by creating an account on GitHub.

github.com

 

결과물

 

 


 

테셀레이션의 적용은 당연히 terrain에 적합하다. (먼 곳에 있는건 삼각형 하나, 가까이 있으면 무수한 삼각형의 개념이)

경우에 따라서, Terrain을 사용하지 않고, 메쉬로 만들어져있는 경우가 있다.

와우는 메쉬로 이루어져있다.

 

배그는 Terrain으로 되어있다.

 

유니티에서 Terrain을 생성해보 무수한 삼각형으로 구성되어 있다.

왜 큰 하나의 삼각형이 아닌 무수한 삼각형으로 하느냐?

당연한 얘기지만, terrain 자체가 평면이 아니라 울퉁불퉁한 모습을 표현해야 하니까 높이의 차이를 표현하기 위해 무수한 삼각형으로 구성된다.

x, z로 까는 건 동일하지만, 각각의 높이가 달라지는게 핵심.

 


 

각각의 높이를 가진 지형을 만들었다고 가정을 하면, 그걸 어떻게 파일에 저장해야될까?

첫번째 방법은 terrain도 각각의 정점으로 이루어져 있으니, 정점 하나하나 버텍스 정보(위치, uv 등)를 파일에 저장하는 것이 될텐데, 그러면 낭비가 있단 생각이 든다. 왜냐하면 아까 말했듯 x축과 z축의 규격이 일정한데 굳이 x와 z축 사이를 어떤 좌표인지 저장하기 보다는 높이값만 딱 저장하면 원하는 모습으로 보간할 수 있기 때문이다.

 

그래서 일방적으로 terrain과 관련된 정보를 저정할 때는 "높이맵" 이란 걸 사용한다. 높이맵은 말 그대로 텍스쳐에 불과하
다. 각 정점마다 위치해야할 높이 자체를 어떤 텍스쳐에 저장한다고 보면 된다. (diffuse, normal 텍스쳐처럼 그것의 연장선)

높이 텍스쳐를 참고해서, 각 부분에 해당 픽셀에 있는 높이값을 적용시킨다.

 

'DirectX 12 > Terrain' 카테고리의 다른 글

[DirectX12 - Terrain] Chapter 03. Picking  (0) 2023.07.07
[DirectX12 - Terrain] Chapter 01. Tessellation  (0) 2023.07.07

댓글