-
Notifications
You must be signed in to change notification settings - Fork 10
/
0021.txt
13 lines (7 loc) · 4.51 KB
/
0021.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
오늘은 '쉐이더란 무엇이죠?'라는 거에 대한 대답을 좀 해보려 해요. 쉐이더 입문 프로그래밍 책을 처음 쓸 때 1장이 쉐이더란 과연 무엇인가요?라는 내용이었어요. 근데 여기에 제가 원래 넣으려고 했던 모든 내용을 집어넣지는 않았어요. 그 이유가 뭐였냐면 지면을 줄이는 게 큰 목적이었기 때문에... 굳이 쓸데없는 내용을 넣으면서까지 책 부수를 늘리지 말자 생각이었거든요.
제가 원래 대학에서 강연을 할 때는 '쉐이더란 무엇이죠?'라는 이야기를 언제나 역사 이야기부터 시작을 했어요. 근데 책에서는 역사 부분은 제외했기 때문에 그 부분을 보충하려고 해요. 그래픽의 역사를 보면 사실 되게 재미있어요. 3차원(3D)을 처음 할 때는 DirectX라든가 OpenGL 이런 거의 도움을 거의 받지 않고 그냥 소프트웨어에서 전부 다 처리해서 그려주는 게 보통이었거든요. 그래서 그때는 3차원을 그릴 때는 모든 연산을... 삼각형을 이제 3차원에서 각 삼각형의 표면에 입히는 색깔들도 다 표현을 해줘야 되거든요. 이제 이걸 프로그램에서 전부 계산을 해서 화면에 뿌려주는 거였어요.
그렇기 때문에 속도가 상당히 늦을 수밖에 없었고, 그러다가 3차원이 점점 커지니까 빠르게 만들 수 있는 방법을 찾아보자 해서 그래픽 카드 만드는 회사들이 3차원 가속칩을 만들기 시작을 해요. 여기에서 또 문제가 생긴 게 뭐냐면 워낙 다양한 하드웨어들이 나오니까 표준화가 안 되는 거예요.
그 이후에 하드웨어에 상관없이 한 번만 짜면 모든 하드웨어에서 돌 수 있는 방법을 만들어 보자 해서 나온 게 Direct 3D나 OpenGL 같은 것들이에요. 어떤 일괄적인 방법을 제시해서 다른 모든 하드웨어에서 동일하게 나온다는 개념으로 앞서 말했던 문제는 해소되었지만 이번에는 모든 게임이 똑같아 보이기 시작했어요. 예전에는 그냥 소프트웨어적으로 처리해줬으니까 정말 다양한 시도를 프로그래머가 할 수 있었는데, 이제는 DirectX 같은 게 게 나옴으로 해서 게임은 정말 많고 다양한데 각 모든 게임에서 거의 손에 꼽을 수 있는 그 정도 테크닉만 쓰다 보니까 거의 모든 게임이 되게 비슷하게 보이는 형상이 나타나기 시작했어요.
이런 이유로 ps2가 나올 때 당시에 출시된 게임들을 보면 다 비슷비슷해요. 그래서 아... '이거는 좀 아니지 않나'라는 생각에서 다시 프로그래머에게 개성 있게 표현할 수 있는 방법을 알려주자 해서 나왔던 게 이제 프로그래머블 쉐이더(programmable shader)라고 하는데 저희는 이걸 보통 '쉐이더'라고 부르는 거예요. 그러니까 최종적으로 표면에 나오는 색상이나 조명을 처리하는 작업을 DirectX 같은 걸로 처리하는 대신 프로그래머가 직접 프로그램을 짜는 게 바로 쉐이더 프로그래밍이에요
제 책에서 쉐이더를 이해하는데 반드시 필요한 내용은 아니라서 역사 부분은 뺏어요. 책에서는 쉐이더에는 '정점 쉐이더'와 '픽셀 쉐이더' 2가지가 있다고 얘기를 했죠. 3차원을 그릴 때는 어떤 물체를 화면에 그리는데 사각형은 표면이 변형될 수 있기 때문에 항상 평면이 나오질 않아요. 삼각형은 언제나 평면이기 때문에 저희는 삼각형을 많이 사용하는데 이 삼각형을 여러 개 모아서 개체(object)를 만든다고 생각하시면 돼요.
이 개체를 화면에 그린다고 하면 개체의 움직임과 보는 시점의 변화에 따라 화면에 보이는 개체가 어떻게 보이는지도 다르잖아요? 그러면 최종 화면에서 그렸던 삼각형이 어디에 나와야 하는지 계산하는 함수가 필요해요. 그 함수를 저희는 정점 쉐이더 또는 버텍스 쉐이더라고 불러요. 그리고 삼각형을 그렸다면 화면에서 보이는 삼각형 표면의 모든 픽셀마다 색상을 계산해서 그려줘야 돼요. 이 색상을 계산하는 함수를 픽셀 쉐이더라고 하고요. 두 쉐이더가 하는 일을 합치면 그게 제가 쓴 책에서 설명하는 거예요. 쉐이더가 나와야 했던 그런 배경들을 아시게 되면 왜 우리가 쉐이더를 이따위로 짜고 있는지 이해가 좀 더 쉬울 것 같아서 이야기를 해봤어요.