CS/그래픽스

[홍정모의 그래픽스 새싹코스 Part1] 텍스처링

겜도리도리 2023. 12. 11. 23:34
반응형

앞서

이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다.

강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다.

 

개요

텍스처링이란, 픽셀의 색깔을 정할 때 색깔을 단순히 다른 이미지의 색깔에서 가져오는 방법이다.

정교한 3차원 모델을 쓰는 것 보다, 단순한 vertex에 그냥 이미지를 덧씌운게 더 사실적으로 보일 수가 있기에 텍스처링을 자주 사용한다.

덧씌울 때에는 uv좌표를 interploation하면서 사용하는데, 앞서 포스팅한 무게중심좌표계를 알고 있다면 uv좌표 보간 과정을 더 쉽게 이해할 수 있다.

DirectX에서는 uv좌표의 좌상단이 (0, 0), 우하단이 (1, 1)이 된다.

텍스쳐 좌표에서 어떤 색깔 값을 가져오는 과정을 샘플링(Sampling)이라고 한다.

 

위 이미지의 빨간색 사각형을 텍스처링을 통해 채워볼 것이다.

 

uv좌표의 범위는 u [0.0, 1.0] 에서 v [0.0, 1.0] 이고

xy 이미지 좌표의 범위는 x [-0.5, width -1 + 0.5] 에서 y [-0.5, height - 1 + 0.5]

배열 인덱스의 정수 범위는 i [0, widht -1] 에서 j [0, height - 1] 인 것을 알아두면 좋다.

Point Sampling vs Liner Sampling

Point Sampling은 해당 이미지 좌표에서 가장 가까운 지점의 픽셀에서 색상을 가져온다면

Linear Sampling에서는 하나만 고르는 것이 아니라 주변 색깔의 값을 모두 가져와 선형 보간을 통해 색깔을 결정하게 된다.

 

위 이미지는 4pixel * 4pixel 의 저해상도 이미지이다.

Point Sampling을 하게 된다면 가장 가까운 이미지 픽셀의 색상을 그대로 가져오기 때문에 격자 이미지 그대로 나오고

Linear Sampling을 하게 된다면 선형보간을 통해 색상을 섞어주므로 번지는 듯한 이미지가 나오게 된다.

 

Get Clamped  Get Wrapped

강의에서는 픽셀을 가져올 때 GetClamped()와 GetWrapped()의 두가지 함수를 사용하였는데,

Clamped를 사용하면 픽셀을 가져올 때 0이나 width와 height 범위를 초과하면 각각 0이나 width / height로 맞춰서 가져오고

Wrapped를 사용하면 0 미만일 때는 반대쪽 width나 height에서, width나 height 이상일 때는 0쪽에서 가져오게 된다.

 

앞선 이미지는 GetClamped를 통해 픽셀을 가져온 것이고,

 

위 이미지는 GetWrapped를 통해 픽셀을 가져온 것이다.

 

Point는 보간을 진행하지 않아 어짜피 해당 픽셀에서만 가져오므로 차이가 없고, Linear Sampling에서는 선형 보간을 할 때 이미지의 0...에서 width나 height의 범위를 초과할 수 있으므로 빨간색 부분은 희게, 흰 부분은 하얗게 되고, 윗부분은 조금 밝게, 밑부분은 조금 어둡게 되는 모습을 볼 수 있다.

결과

 

배경 사각형에 4x4 pixel의 텍스쳐를  Point Sampling, Linear Sampling을 적용시킨 모습들이다. 각각의 특성에 맞게 텍스쳐가 입히는 모습을 볼 수 있다.

 

 

실제 이미지를 텍스쳐링을 씌운 모습이다. 해상도가 높은 이미지라 그런지 Point Sampling과 Linear Sampling의 차이가 눈에 띄게 나타나지는 않았다.

반응형