Technical/Shader

Texture

ParkJinseok 2021. 3. 1. 16:01

텍스처 매핑(Texture Mapping)

  • 3D 메쉬에 입히는 것

  • Texture Mapping을 위해서는 텍스처 좌표(Texture Coordinates) 또는 UV 좌표(UV Coordinates)가 있어야 함.

  • 이들 좌표는 Vertex 단위로 지정된 다음 Mesh의 Face 위에서 보간된다.
    즉, Mesh Fragment 각각의 Texture 좌표는 메쉬를 구성하는 Vertex의 Texture 좌표들이 보간된 값에서 얻는다.

 

텍스처 샘플링(Texture Sampling)

  • 텍스처에서 특정 좌표(위치)의 색상 값을 찾는 과정.

  • GLSL에서 텍스처를 저장하는 변수 타입을 샘플러라고 함.

 

 

쿼드(Quad)

  • 두개의 삼각형으로 이뤄진 사각형 또는 정사각형을 의미함.

  • 대부분의 게임 엔진에서 삼각형 Face만으로 구성된 메쉬를 요구함.

 

UV  좌표

  • UV 좌표라고 부르는 이유는 XY 좌표가 위치 데이터에서 사용되고 있기때문에 구분하기 위해서 UV로 사용.

  • 이미지의 좌측 하단에서 우측 상단 방향으로 진행한다.

 

UV 좌표 스크롤링

  • UV 좌표가 항상 0과 1 사이에 있다는 얘기가 Shader가 사용할 수 있는 좌표 값이 0과 1 사이라는 의미는 아님.
    • 텍스처에서 색상을 가져올 때 0과 1 범위 밖의 좌표를 사용해도 전혀 문제가 되지 않음.

    • 텍스쳐를 어떻게 설정하는가에 따라서 결과가 달라질 뿐임.

  • 0과 1 사이가 아닌 좌표에서 텍스처를 샘플링 할 때 텍스처가 대응하는 방식을 랩 모드(Wrap Mode)라고 함.

Wrap Mode는 고정(Clamp)

 

Wrap Mode는 반복(Repeat)

 

  • 화면에 계속 옆으로 이동하는 듯한 효과를 주는것도 가능함.

 

밝기 조정

  • 사용 예
    • 버튼을 클릭(또는 비활성화)하면 버튼이 어두워지게 함.

    • 상호작용할 대상을 깜박이게 함.

    • 이미지를 밝게 만드는 경우

    • Shader 코드에서 색상을 밝게 하거나 어둡게한다는 것은 RGB 채널 각각을 일률적으로 증가 또는 감소시킨다는 것.
      다르게 표현하면, 채널 각각을 동일한 값으로 곱한다는 의미임.

  • Shader 코드에서 Vector의 컴포넌트에 접근할 때 x, y, z, w 대신 r, g, b, a을 써도 동일한 결과를 얻을 수 있음.

 

색상연산

  • 색상 채널은 어느 하나라도 1.0에 가까워질수록 밝아지고 0에 가까워질수록 어두워짐.

  • 색상 채널은 1 이상의 값과 0 이하의 값을 가질 수 없음.

  • 이미지에 색상을 곱할 때, 어두운 색상을 가진 픽셀은 밝은 픽셀보다 영향을 덜 받음.
    반면, 더하기나 빼기를 할 때는 모든 픽셀을 일률적으로 조정함.|

  • 색상 값에 일괄적으로 스칼라 곱을 하는 것은 밝기 조절에 사용할 수 있다.
    각 컴포넌트에 값을 곱하는 것(채널마다 색상을 다르게 추가하게 됨)으로 색조 조절을 할 수 있다.

  • 나누기 보다는 곱하기를 많이 사용하는 이유는, GPU에서 나누기가 곱하기보다 연산이 약간 느리기도하고 일반적으로 곱하기를 많이 사용함. (나누기를 사용해도 무방함)

  • 곱하기와 더하기를 동시에 할 경우 최적화를 위해서 곱하기를 하고 더하기를 해야 함.

 

Mix()

  • 2개의 텍스처를 혼합할 때 사용하는 함수.

'Technical > Shader' 카테고리의 다른 글

Uniform Variable  (0) 2021.04.15
Fragment Shader  (0) 2021.03.01
Vertex Shader  (0) 2021.03.01
OpenGL  (0) 2021.03.01
Shader  (0) 2021.03.01