쉐이더 기초 개념

Herring·2021년 3월 16일
0
post-thumbnail
(Thumbnail Image by 849356 from Pixabay)
개인적으로 공부한 내용을 작성한 것으로 틀린 부분이 있을 수 있습니다.
혹 틀린 부분이 있다면 말씀해주시면 감사하겠습니다.🙏

쉐이더란

컴퓨터 그래픽에서 최종적으로 화면에 출력할 픽셀의 위치와 색상을 계산하는 함수이다.

데이터로 이루어진 3D 오브젝트는 GPU에 의해 일련의 그래픽 처리과정(렌더링 파이프라인)을 거침으로써 최종적으로는 2D 모니터에 각각의 픽셀로 표현되게 된다.
이때 이러한 그래픽 처리과정에서 프로그래머블한 단계에 대하여 프로그래머가 프로그래밍함으로써 GPU의 연산에 직접 관여할 수 있게 되는 것이다.

쉽게 말하자면 3차원 오브젝트 표면의 재질적 특성(물, 금속 등)같은 것을 나타내기 위해 필요한 연산을 구현하는 것이라 볼 수 있다.

쉐이더 언어

쉐이더 언어도 여러가지가 존재한다. 대표적으로는 아래의 3가지가 있다.

  • Cg(C for graphics): NVIDIA에서 개발한 상위 레벨 쉐이딩 언어. OpenGL/DirectX 모두 호환된다.
  • HLSL(High Level Shading Language): DirectX에서 지원하는 쉐이더 언어.
  • GLSL(OpenGL Shading Language): OpenGL에서 지원하는 쉐이더 언어.

세 언어 모두 C 기반이기 때문에 문법이 유사하다. 특히 Cg와 HLSL은 거의 똑같다.
자세한 비교글은 https://blog.naver.com/mrnglow/30185125600 참고.

쉐이더 종류

대표적으로 Vertex Shader와 Fragment(Pixel) Shader가 있으나 그래픽스 API(OpenGL, DirectX 등)의 버전이 업데이트 될수록 쉐이더의 종류도 점점 증가하고 있다. 예로 DirectX의 경우 DirectX9 버전에서는 위 두 종류의 쉐이더만 있었으나 DirectX10에서는 Geometry Shader가, DirectX11에서는 Hull Shader, Domain Shader 등이 추가되었다.

  • Vertex Shader: 모든 정점들에 대해 실행되며, 물체를 이루는 각 정점들의 위치를 화면좌표로 변환한다.
  • Fragment(Pixel) Shader: 각각의 픽셀 프래그먼트마다 실행되며, 화면에 출력할 최종 픽셀색상을 계산한다.

렌더링 파이프라인 얘기한 김에 더 자세히 쓰고싶지만 일단 이정도만 적어두기로...

1개의 댓글

comment-user-thumbnail
2022년 5월 21일

제가 정말 그냥 순수하게 궁금해서 물어봅니다.. 저 볼 것 없는 블로그는 제가 알기로 모든 포스트가 검색 비허용으로 되어있는데, 대체 언제 어디서 알게 해당 포스트를 알게 되신 건가요..?

답글 달기