Shader History
Categories:tech
Shader History
목차
발생
js로 게임 만드려고 하는데 WebGL에서 쉐이더를 적용하려고 생각하다보니 쉐이더는 왜 굳이 언어 형식도 다르게 해서 따로 관리를 하는지 이해가 안되서 쉐이더에 대해서 조금 알아봤다.
Shader의 기원
1. 어원적 의미
Shader는 shade(음영을 주다)에서 파생된 단어이다.
처음에는 빛과 그림자를 표현하는 음영 처리(shading)를 담당하는 알고리즘이나 함수들을 지칭했다고 한다.
2. 초기 형태
초기에는 shading은 지금처럼 자유롭게 프로그래밍하여 적용하는게 아닌 정해진 알고리즘 중 원하는 걸 골라서 특정 값(광원 위치, 색, 세기) 등만 수정해서 쓰는 형태였다고한다.
이 당시 사용되었던 대표적인 shading 알고리즘은 Flat, Gouraud, Phong 등이 있었다고 한다. 고전 3D 게임을 해본 사람이면 익숙할 것이다.
출처 - Crookshanks Academy
3. Programmable Shader
2000년대 초 DirectX와 OpenGL 확장에서 Vertex Shader와 Pixel Shader라는 개념이 도입되었다. 이때부터 Shader는 단순한 기법 이름이 아닌 GPU 상에서 실행되는 작은 프로그램을 의미하게 되었다고한다.
4. 현재
현재는 shader를 GPU가 특정 렌더링 단계에서 실행하는 코드라는 뜻으로 확립되었다고 한다.
종류도 다양해져서. Vertex Shader, Fragment/Pixel Shader, Geometry Shader, Tessellation Shader, Compute Shader, Ray Tracing Shader 등이 있다고 한다.
Vertex Shader
- 물체의 각 정점(Vertex) 위치를 직접 바꿀 수 있다.
- e.g., 오브젝트 크기 조절, 물결 효과, 캐릭터 애니메이션 변형 등
Fragment/Pixel Shader
- 화면의 각 픽셀(조각, fragment)에 대해 색상, 조명, 특수효과 계산 가능
- e.g., 불, 연기, 물 표면 반사, 포스트 프로세싱 효과 등

출처 : ResearchGate
5. 차이
과거에는 GPU의 한계로 인해 GPU는 단순히 빛, 색, 텍스쳐, 음영(shading) 등만 그리는 용도로만 사용되었고 이펙트, 물리 연산, 애니메이션 등은 cpu에서 동작시켰어야 했다고 한다.
현재는 GPU의 성능이 비약적으로 향상되어 이펙트, 일부 물리 연산, 애니메이션 등 예전에는 CPU에서 돌려야 했던 것들을 GPU에서 돌릴 수 있게 되었다. 그리하여 shader 코드를 작성하여 과거와 달리 요즘의 카툰, 네온, 글로우 그래픽 등과 같이 물리 연산, 텍스쳐, 음영, 빛, 색, 크기 등을 모두 조작 해야하는 복잡하고 무거운 작업을 GPU 위에서 훨씬 효율적으로 처리 할 수 있게 된것이다.
결론
2000년대 들어 그래픽스의 발전은 GPU와 쉐이더의 발전이 굉장히 큰 영향을 끼쳤다는 걸 깨달을 수 있었다.
원래 궁금했던 왜 굳이 다른 언어 형식으로 분리를 시켰는지를 알아보진 못했지만 우선은 역사를 알게 되었으니 이후에 이해하기 훨씬 수월 할 것 같다.

출처 - 나무위키 GoldSrc (HALF-LIFE 1)

출처 - 게임어바웃 (HALF-LIFE 2)
Day-23