Terrain Splatting
터레인 스플레팅은 지형에 텍스쳐를 입히는 것을 의미 합니다. 게임을 하다보면 지형이 흙이나 풀로 덮혀있는것을 볼 수 있습니다.
그것이 바로 지형에 텍스쳐를 입힌것입니다.
Splatting 사용 영상은 Tool 시범 영상에도 있습니다.
Splatting
Terrain Splatting에서 중요한 것은 터레인의 특정 부분에 어떤 텍스쳐들이 어느정도 가중치로 혼합되어 있는지가 중요합니다.
때문에 이 데이터들을 기록할 것이 필요하며, Terrain 정점 구조와 비슷하면 더 좋습니다.
저는 데이터를 저장하고 리소스로서 보내기 위해 터레인 사이즈의 가중치 MultiTexture를 만들어 사용된 텍스처와 Normal 맵정보를 저장하였습니다.
Texture 는 ARGB 4 바이트의 정보를 저장할 수 있습니다(이 포맷을 사용함). A에는 택스쳐의 가중치를 저장해 놓았고, R 에는 노말맵 Texture의 존재 여부
G에는 노말맵 텍스쳐의 가중치를 저장해 놓았습니다.
Brush
Brush 모양으로 Splatting을 하기위해 , 원하는 Brush 모양을 텍스쳐를 준비합니다.
지금 내가 찍을 좌표를 계산해 줍니다.
Brush의 크기 만큼 비율을 구한 다음, 텍스쳐의 픽셀을 읽어가면서 색상이 존재하면 그곳을 Splatting 해줍니다.
Brush Rendering
Brush 의 좌표와 , 브러쉬의 지름을 상수버퍼로 넘겨 줍니다.
Vertex Shader 에서 브러쉬의 UV를 계산해 줍니다
0.5f - (브러쉬 x위치 - 터레인(*타일 정점*) x 위치 ) / 브러쉬 지름
0.5f + (브러쉬 z위치 - 터레인(*타일정점*) z 위치) / 브러쉬 지름 // (0.5 - 가 아니라 + 인 이유는 UV좌표계가 y축방향이 반대라서)
Pixel Shader 에서 Brush 텍스쳐에서 Brush UV로 샘플해 옵니다.
(저는 Brush의 알파 값으로 브러쉬를 영역을 선택 했습니다.)
알파값이 존재하는 영역에 원하는 Brush 색상으로 Output 색상을 정해줍니다.
'Directx11 > Technic' 카테고리의 다른 글
UV와 카메라의 방향 벡터를 이용한 레이더 쉐이더 (1) | 2018.04.24 |
---|---|
Navigation Mesh (0) | 2018.04.18 |
Color Picking (색상 픽킹) (0) | 2018.02.01 |
DDT Picking (Bresenham's algorithm) (0) | 2018.02.01 |
Billboard Rendering (1) | 2018.02.01 |