어떻게 쉐이더를 공부했냐고요?

이것 또한 많이 받는 질문 ㅋㅋ
아 맥주 한 잔 걸치고 쓴김에 또 씁니다. 요샌 트위터만 쓰다 보니 아주 낯설군요 ㅎㅎ
솔직히 저도 한창 공부하고 있는 수준이라 이런 글 쓰는게 아주 창피해서 그동안 안쓰고 있었습니다만
굳이 그렇게 질문해 주시니… 그냥 참고만 해주세요. 저따위는 상대도 안되는 분들이 넘칩니다. 
eyoung80 같은 굇수분들이 진짜 분들이죠… 혼자서 게임 하나를 다 만드실 수 있으신 분… 저같은거야..

쉐이더를 어떻게 공부하냐. 뭐 글쎄요.저같이 어깨너머로 대충 배운 사람한테 질문 하시는 것 자체가 무리입니다 ㅎㅎ
진짜로 제대로 공부하려면, 물리나 수학과를 졸업해야 합니다!!! 어깨너머로 대충 배운 것은 한계가 반드시 와서 , 조금만 어려운 공식이 필요하면 프로그래머에게 찾아가 사정하면서 배워야 합니다!! 저처럼 !!! ㅋㅋㅋㅋㅋ

그치만 그렇다고 대학을 다시 갈 수도 없고 ㅋㅋ 뭐 어쩔 수 없이 뽀록으로라도 배우셔야 한다면, 알려드릴 수 밖에 없지요.
미리 경고 드렸습니다. 이거 상당히 근본없는 방법입니다 ㅎㅎ

우선 맨 먼저 필요한 것은 C 가 맞습니다. 이건 뭐 클래스 정도까지는 필요가 없는 관계로, C++ 까지는 필요 없는 거지요.
이것을 공부하는 이유는, 아주 기초적인 프로그래밍 문법을 익히기 위해서 입니다. 뭐 맥스 스크립트를 짜시는 분은 필요 없을 수도 있습니다. 프로그래밍을 하면서 띄어쓰기는 무슨 의미인가, 줄바꿈은 무슨 의미인가, ; 이나 && || 을 비롯한 각종 용어들이 기본적으로 무엇을 의미하는지 알아야 하기 때문입니다. (대부분 여기서 포기합니다)

그 후 프로그래머 분들은 API를 주로 추천하십니다만, 저는 별로 추천하지 않습니다. 굳이 배울 필요까지 없어요… 몰라도 할 수 있습니다. 그것보다는 다이렉트 X 를 그 다음으로 꼭 공부해야 합니다. 주로 ‘용책’ 이라고 불리는 책으로 공부하시죠. 그 책 수준 정도면 일단 무리 없습니다. API를 공부하셨다면 조금 더 쉽게 하실 수 있겠지만, 어차피 쉐이더만 배울거라면 그 부분은 대충 넘어가도 되거든요.

대신 다이렉트 X 에서 배우는 것은 다이렉트 X 를 실제로 다루는 코딩 능력보다, 이론이 중요합니다. 어떻게 렌더러가 가동되고, 어떤 순서대로 그려지고, 알파는 어떤 문제가 있으며, 포그나 후처리, 각종 메트릭스, 깊이 버퍼 등의 중요한 이론들을 잔뜩 배우게 됩니다. 이건 정말로 중요합니다. 아참, 기초 수학도 배우셔야 합니다. 벡터의 합과 뺄셈하는 법이라던가… 메트릭스 연산, 쿼터니언, 싸인 공식 등…

그러면서 동시에 (그 후에 해도 상관없습니다만 질리겠죠) hlsl 언어를 공부하시는게 좋습니다. 그래픽 디자이너라면, 맥스의 쉐이더 기능을 이용해서 fx 쉐이더를 짜보시는게 좋습니다. 이 부분의 책은 거의 없기 때문에 처음에 시작하시기 힘드실 수 있기 때문에, 처음에는 김용준님의 해골책이나, 게임아카데미에서 나온 쉐이더 이론 책을 보시는게 쉽습니다. (혹은 제 블로그를 참고하셔도 됩니다 ㅎㅎ)

이제부터는 좋은 쉐이더를 보면서 계속 공부하시는 수 밖에 없습니다. 슬슬 GPG 같은 책도 눈에 들어오시겠지요. 그걸 공부하실 수준이면 이제 실무에 들어오셔도 충분할 수준입니다. (저도 아직 잘 못봐요. 참고만 좀 하지) 이론은 ‘리얼타임 렌더링’ 이라는 책으로 더 보강하시면 됩니다. 제가 그렇게 했거든요.
그 정도면 되면 수학과나 물리학과는 나오지 않았더라도, 폐를 끼치지 않을 정도의 실력은 되고, 무시당하지 않을 정도는 됩니다.
아참, 회사에 설명 잘하는 프로그래머를 스승으로 모시는 것도 중요합니다 ㅎㅎ 몇 안되지만, 그런 스승을 만나야 큰 도움이 되지요

저는 C 를 공부하려다 몇 번이나 포기하고 또 하고 하다가… 무작정 쉐이더부터 공부했습니다. 당근 왜 C를 배워야 하는지를 알게 되었죠. 이건 뭐 띄어쓰기를 언제 하면 되는지, 대괄호는 다음 칸에 써야 하는지 옆에 써도 되는지 , 어떤건 왜 ; 를 뒤에 안붙여도 되는지…

그걸 배우고 나니 혼자서는 공부에 한계가 있을 수 밖에 없다고 생각하고…. 대학원에서 C를 한 학기 배우고, DirectX를 한 학기 배웠습니다. 둘다 다행히 운좋게도 정말 좋은 교수님 만나서 재미있고 쉽게 배울 수 있었죠 :) 그동안 삽질하면서 공부해 둔것도 나름 쓸모가 있더군요. 실무에서 부딪히면서 배웠던 일들이 DirectX 를 배우면서 , 왜 그렇게 되었는지 이론을 알 수 있게 되었지요.

그렇게 졸업하고 나서 다시 처음부터 쉐이더를 공부한 것은 제 블로그에 잘 나와 있습니다. 맥스 쉐이더로 연습을 하고, 맥스 쉐이더가 한계가 있어서 렌더몽키로 툴을 교체했다가, 굉장히 재미가 없어서 다시 겜브리오로 바꾸었습니다. 지금은 유니티를 쓰고 있구요.
그동안 책으로 공부한 것들을 기반으로, 엔진 메뉴얼을 봐 가면서 제작하고 있구요. 아참, ShaderFX 같은 프로그램(노드 구조로 언리얼 메터리얼 에디터처럼 쉐이더를 비주얼로 짤 수 있게 해주는 플러그인. 무료입니다) 으로 출력한 쉐이더 코드들을 분석하는 것도 무척 도움이 됩니다.
겜브리오 때부터 실무 쉐이더를 보조로 짜기 시작했고, 유니티가 되면서 부터는 쉐이더를 전부 관리하고 제작하고 있습니다. 덕분에 그래픽과는 더 멀어진 … ㅋㅋ
뭐 이렇게 대충 배웠기 때문에, 사실 제대로 된 공식이나 복잡한 물리 공식을 만들어 내는데는 무리가 있을 수 밖에 없습니다 :) 그냥 근근히 폐나 끼치지 않게 살고 있는 거지요.

일단 간단하고 재미있게 하시려면, ShaderFX 같은 툴을 이용해서 가지고 노시면서 개념잡는게 재밌습니다.
하지만 직접 짜시려면 위에 설명한 것과 같이 꽤 긴 과정을 거쳐야 하지요.
그치만 또 모릅니다… 노드구조만으로도 사실 완벽하게 짤 수 있거든요. 일정 수준을 넘어가면 대단히 복잡해지고 관리하기 힘들어 지는게 문제지… ㅎㅎ

그러므로 본인이 목표하시는 수준을 잘 결정하시고, 그 수준에 맞는 방법을 선택하시면 되겠습니다.
독학도 가능하지만… 쉽지는 않더군요. 프로그래머 스승분을 친해 놓는게 제일 빠르리라고 생각합니다 ㅎㅎ

Hugo로 만듦
JimmyStack 테마 사용 중