어떻게 쉐이더를 공부했냐고요? by 김윤정

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


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

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


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

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

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

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

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





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

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

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

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

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

덧글

  • 11호 2011/07/30 00:54 #

    아아. 셰이더... 감잡는데 정말 오래 걸렸어요 ㅠㅠ (사실 지금도 감잡는중이지만요;;ㅋ)
  • 김윤정 2011/07/30 10:06 #

    흐흐흐 금방 잘 하시게 될거예요. 저는 삽질만 오래 해서... 오늘 강연 잘 하시길! 저도 가고 싶었는데 몸이 요새 개판이라...
  • 11호 2011/07/30 23:06 #

    흐흑,, 제가 트위터를 잘 안하다 보니... 오늘 발표하는데 깜놀.. 립서비스 너무 감동이예요 ㅠㅠ 흑

    발표하는데 너무 허접해서, 초대도 못했는데, 이왕 알게 되실거 차라리 따로 초대를 드릴걸 그랬네요 ^^ ㅎ
    (대신) 오늘 오신 다른 엔도어즈TA분과 즐겁게 얘기놔눴습니다. 다음에 언제 또 놀러가고 싶네요 ㅎㅎ

    요즘 바쁘시다는데, 힘내세요! 화이팅입니다~!! ^ㅡ ^
  • 김윤정 2011/07/31 00:15 #

    ㅎㅎ 이번엔 진짜 상태가 안좋아서 부사수만 갔구요. 담에 또 하시면 꼭 갈께요 !!! 부사수좀 많이 가르쳐 주세요 굽신굽신 ㅎㅎ
  • 2011/07/30 02:14 # 비공개

    비공개 덧글입니다.
  • 김윤정 2011/07/30 10:07 #

    감사함니다 :)
  • 자무 2011/07/31 14:30 #

    흐...저는 환생해도 할 수 없는 분야인 것 같아요;;
    몇년동안 꾸준히 연구하고 발전해가시는 모습이 정말 멋지고 부럽습니다!!
  • 김윤정 2011/07/31 16:17 #

    뭐.. 그냥 누구나 계속 하고싶어하면 언젠가는 하는 것 같아요
  • 마이즈 2011/08/01 10:06 #

    역시 스승이 중요하군요 ㅠ.ㅠ
  • 김윤정 2011/08/01 10:50 #

    근데 뭐 하다보면 스승님이 나타납니다. ㅎㅎㅎ 찾으면 나오리라..
  • 조상현 2011/08/02 00:32 #

    안녕하세요 저는 TA를 지망하고있는 학생입니다.
    자료를 검색하던중 우연히 들리게됬네요.
    앞으로 자주 와서 궁금한거는 물어볼수있을까요?
  • 조상현 2011/08/02 00:40 #

    아 그런데 제가 님 말씀대로 directx를 공부해볼려고 하는데 openGL이라는 것도 있던데 openGL은 안배워도 되나요?
  • 김윤정 2011/08/02 08:04 #

    물론입니다. 저도 뭐 아는거 없지만 언제든.... openGL도 공부하실 수 있으시면 좋지요... 하지만 일단 대부분의 pc게임엔진은 다이렉트x라서, 일단 다이렉트x를 완전히 이해하시고 openGL 공부하셔도 큰 무리 없습니다. 솔직히 openGL쪽 책도 마땅한 녀석이 별로 없구요 ㅎㅎ
  • 2011/08/02 17:33 # 비공개

    비공개 덧글입니다.
  • 김윤정 2011/08/02 17:35 #

    우선 영어 독해능력은 있으신가요? 있으시다면 msdn을 이용하시면 그냥 뭔지 아실 수 있는데요. 사실 쉐이더만 짜기에는 없어도 큰 문제 없습니다만, 아마도 조언주신분이 프로그래머신듯. 그냥 거대한 백과사전 같은 느낌..? ㅎㅎ
  • 김윤정 2011/08/02 17:47 #

    그리고 용책은 정통 프로그래머를 위한 책이라는걸 잊으시면 안됩니다. 프로그래밍 실력이 얼마나 되시는지는 잘 모르지만.. C 는 일단 떼셨나 보네요. 용책을 하신다는걸 보니.
  • 2011/08/02 21:35 # 비공개

    비공개 덧글입니다.
  • 김윤정 2011/08/02 23:03 #

    아! 역시 괜히 걱정했습니다. 죄송합니다. 그정도시라면 충분하시겠네요. 저보다 나으신데요 :)
  • 2011/08/10 08:21 # 비공개

    비공개 덧글입니다.
  • SiroTan。◕‿‿◕。 2011/08/11 13:15 #

    오홍홍~~
  • 김윤정 2011/08/11 13:27 #

    오홍홍홍홍홍홍홍홍홍홍홍홍
  • 2012/01/30 00:13 # 비공개

    비공개 덧글입니다.
  • 김윤정 2012/01/30 00:21 #

    초광속! 답변 서비스입니다 :) 저도 수학공식은 이해만 하고 넘어갔습니다. 다 알면 좋지만.. 배울땐 다 이해했는데 정작 쓰지 않으니 잊어버리는건 당연하더군요. 그리고 확산조명의 공식도 마찬가지입니다. 알면 좋지만.. 수학 공식으로 굳이 이해하거나 외우고 있을 필요는 없습니다. 중요한건 내가 이해하고 쓰고 있느냐라는 거지요.
    1. 맞습니다. 자료구조, 물론 배우면 좋습니다. 그렇지만 꼭 배워야 한다는건 아닙니다. 하지만 배워두면 훨씬 능력의 범위가 커지긴 하겠지요.
    2. 필요 없습니다. 그 정도는 필요할때 프로그래머에게 물어보세요. 우린 프로그래머가 아닙니다.
    3. 좋은 선택이십니다. 그리고 거기다 맥스 스크립트까지 하시면 강력해 지실 겁니다.

    일단 선택은 다 좋으십니다만...
    TA를 회사에서 선발할 때의 기준이나 원하는 TA의 스킬은 천차만별이라서, 따로 무엇이 좋다라고 말씀드리긴 불가능하겠습니다. 아시다시피 우리나라에서 TA는 아직 공식적으로 자리잡지 않은 직종이라서 따로 TA만 뽑는 회사가 극소수이기 때문이지요. 저희 회사 같은 경우는 예를 들어 외부에서 TA를 뽑지 않습니다. TA는 무조건 내부의 그래픽 디자이너중에서 뽑는게 원칙입니다.

    그 이유는, TA의 가장 큰 존재가치는 프로그래밍 기술이 아니라 '우리 회사의 아트를 얼마나 이해하고 우리 회사의 프로젝트 전체를 얼마나 아울러 이해하고 있느냐' 이며, 가장 중요하게 여기는 스킬은 '커뮤니케이션 스킬' 이기 때문입니다. 특히 제가 가장 중요하게 생각하고 있는것도 이것입니다. 그래서 외부에서 뽑지 않고 있지요.

    참고로 할 수 있는 좋은 글을 소개시켜 드리죠. 네임드 TA이시자 국내 최고의 테크니컬 애니메이터이신 핑속님의 글입니다. http://gamedevforever.com/74 꼭 좋은 TA가 되시길 바라겠습니다 :)
  • 2012/01/30 01:47 # 비공개

    비공개 덧글입니다.
  • 김윤정 2012/01/30 01:49 #

    네이트온을 켜 놨더니, 리플올리신게 실시간으로 알려주네요 ㅎㅎ
    훌륭하십니다. 저보다도 더 능력있으신 TA가 되실거예요!
  • 2012/09/13 11:03 # 비공개

    비공개 덧글입니다.
  • 2012/09/13 11:52 # 비공개

    비공개 답글입니다.
※ 로그인 사용자만 덧글을 남길 수 있습니다.


MyADD

<script> (adsbygoogle = window.adsbygoogle || []).push({}); </script>