개발 노트 B&S2 2018/11/14 00:41 by cagetu



-----------------------------------------------------------------------------------------------------------------------
공유합니다...


개발 노트 Reflection C++ 2018/10/22 05:09 by cagetu

Reflection - (Data-Driven...)에 대해서는 오래전에 한번 작성해봤었는데, 특별히 구현해볼 기회는 없었다. 예전에 엔진이라고 하면 무조건 렌더러만 생각했었는데, 요즘에는 언리얼 엔진을 기반으로 회사 작업을 하면서 개발 팀에서의 엔진이라는 관점은 역시 좋은 툴이고 좋은 툴을 만들기 위해서는 뭐가 필요한가? 라는 관심에 C++에서 Reflection을 어떻게 구현하는가?를 정리하고 있다.

Unity 처럼 mono나 .NET 기반으로 게임 프레임웍을 사용하도록 엔진을 구성하고, C#을 이용한다는 것도 굉장히 영리한 방법이다. 이를 통해서 C# 기반의 툴을 만들고, 게임을 만들면 너무 다양한 가능성이 있을 수 있다. (생각해보니까 장점이 너무 많은 듯 하구나..;;; 유니티는 멀티 플랫폼에서 하지?? C++로 컴파일하나??)

하지만, 순수하게 C++을 기반으로 엔진을 만든다면 결국 시스템을 구현해야 한다. 내가 언리얼 엔진에서 느꼈던 가장 좋은 점은 툴에 노출이 자동으로 되기 때문에 툴로 만들기 좋다는 점과 Serialize 될 것을 구분할 수 있다는 것이다. 내가 만들어보고 싶은 Reflection의 기능은 여기에 추가적으로 게임이 뜬 상태에서 객체의 값을 변경하면서 작업해보고 싶다는 것이다. 특히, 숫자 데이터를 바꿔가면서 게임에서 보고 싶을 때가 많은데, 이것을 매번 코드로 변경하면서 보기는 너무 어려우니 뭔가 외부에서 특정 변수의 값을 변경하면서 테스트할 수 있는 방법이 필요하다고 생각한다. 이게 Relfection이 꼭 필요하냐? 라고는 보기 어려울 수도 있지만, 나는 이 기반 시스템을 확장해서 Nebula3 처럼 웹 브라우져에서 통신할 수 있으면 너무 좋지 않을까? 라는 계획을 가지고 있다.

암튼... 크게 보면 Reflection을 C++에서 구현하는 방법은 세 가지 인 듯 하다. 

- 첫번째, 코드를 파싱하는 방법이다.
언리얼 엔진처럼 클래스에 Definition 정보를 같이 추가하여 작성해 놓으면, Custom Compiler가 먼저 Definition을 이용해서 Reflection 정보를 생성한 후 컴파일 및 코드 링크를 하는 방식이다. 매우 강력하고, 코드 사용이 쉬우나 외부 컴파일 툴이 필요하고, 컴파일 시간이 오래걸릴 수 있으며, 코드 사이즈가 커진다. 

- 두번째, 매크로를 사용하여 Definition을 직접 작성하는 방식이다. 
컴파일 시간이나 코드 사이즈나 불어날 염려는 없지만, 직접 작성해야 하기 때문에 번거럽고 복잡해질 수 있다.

- 세번째, 타입 정의 언어를 사용
별도의 class definition을 정의하는 방식이다. nebula device가 별도의 metadata를 위한 table을 가지도록 하였다.

(계속)

[참고자료]

개발 노트 힘들어버리자!! 2018/10/09 03:02 by cagetu

오늘 우연히 김창옥 교수님의 동영상을 보는데, "아들이 군대에 가는데 어떻게 해요?" 라는 질문에 "어쩔 수 없이 한다면 힘들어버리겠다" 라는 생각으로 하면 된다는 말이 있었다. 결국 힘 안들이고, 시간 보내려는 것보다 "어차피 힘든 일이니 힘들여서 하자!" 라는 생각으로 진행해야 남는 것이 있다는 말이었다. (https://www.youtube.com/watch?v=qsLztXv2bEE&t=344s)

언젠가부터 동네에서 농구를 하면, (나보다 못하는 것 같으면) 설렁설렁 뛰는 버릇이 생겼었다. 마치 "나는 잘하는데, 힘 안 쓰는거야!" 라는 식으로... 그런데, 이게 어느 순간부터 진짜 내 실력을 보여주겠어! 라고 뛰려고 해도, 내가 생각하는 움직임이 할 수가 없었다. 평소에 대충하는 습관이 진짜 실력이 대충이게 되어 버린 것이다. 그 이후로 농구할 때에 실력에 상관없이 내가 할 수 있는 최선의 플레이를 하려고 마음을 바꾸었다. 

"대충 대충 하면 진짜로 힘을 쓸 때 실력이 나오지 않는다. 실전은 연습처럼 연습은 실전처럼!!!"

요즘 회사에서 개발하는 것을 보면 비슷한 것을 느낀다. 이전에 구현한 기능들에 대해서 내용을 보면서 분석해보면, 때로는 뭔가 되기는 하는데 부족한 느낌?! 같이 되어 있는 것을 보게 된다. 이런 것들을 보면 대충 이런 형태로 만들어 진 것 같은 느낌이 든다. - 새로운 기능을 구현하고 싶은데, 뭔가 공들여서 만들기는 싫으니, 현재 있는 기반에 보이는 것만 적당히 잘 붙여서 만들어보자!! 같은 느낌이다. (이건 프로그램팀 문제가 아니라, 그냥 전체가 그렇게 싸게 진행해보자! 라고 합의를 했을 가능성이 더 큰 듯 하다.)

이게 뭐가 문제가 될까??? 나도 모르겠다. 하지만, 지금 내가 느끼는 점은 "그래서 뭔가 적당한 모습이 되었다는 것이다" (적당해도 되는지 말지는 이 기능이 게임에 어느 정도의 중요도를 가지는지를 가지고 결정할 문제니 뭐....) 앞으로 개발하면서 이 기능을 만들어야 하는지 아닌지를 선택하기도 어렵고, 어느 정도까지 만들지의 선택도 어렵지만, 좋은 결과를 만들고 싶다면, 힘들이지 않으려고 꼼수부리지 말고, 원래 힘드는 일이니 힘들여서 하면 되는 것이다. 

잘 만들고 싶으면 (너무나 당연하지만) "힘들여서 하자!!" 

(라고 나에게 하는 말이다!!!)



개발 노트 Tool 2018/10/02 02:15 by cagetu

"피, 땀, 픽셀" 이라는 책에 보면 "사실 어느 정도 수준의 스튜디오라면 개발자의 실력이 크게 차이가 없어요. 툴이 얼마나 잘 되어 있어서, 이터레이션을 빠르고 여러 번 작업할 수 있는가가 중요합니다." (대충 기억 속에 내용은 이렇다.... 찾아보시길.... ㅡㅡ;)

사실 이 책에서 가장 인상적인 문장이었다. 

언리얼 엔진과 유니티 엔진의 가장 큰 장점은 바로 에셋을 제작할 수 있는 강력한 툴을 제공한다는 것이다. 하지만, 게임을 만들기 위해서는 장르에 맞는 특화된 더 많은 툴이 필요하다. 이 툴이 없다면, 아마 코드나 스크립트로 이 과정이 대체될 것이다. 규모와 복잡도가 크지 않을 때에는 상관이 없지만, 시간이 지날수록 "기획자 <-> 아티스트 <-> 프로그래머" 간의 의존성이 강해지면서 작업 효율 및 작업 비용이 상당히 커진다. 이 부분은 사실 상용엔진이 해결해줄 수 있는 것은 아니다. 어떤 툴이 필요하고, 그 툴을 준비해서 작업하는 과정이 어쩌면 진짜 노하우고 기술일 수 있다. 

가끔 다른 회사의 개발팀 이야기를 들어보거나 할 때, 툴이 미비하거나 없이 시작한 경우도 많고, (특히 모바일 초창기에...) 프로젝트가 흘러가다 보니 여러가지 업무도 있고, 지금처럼 하다보니 그냥 계속 그렇게 흘러간 경우가 꽤 있다. 

요즘 규모가 큰 프로젝트를 하면서 점점 더 "개발 툴"에 대해서 중요함을 더 많이 느끼게 되는 듯하고, 수 많은 다른 팀 작업자들이 언리얼 엔진의 각각 다른 툴을 이용해서 작업을 하고 다양한 결과물을 만들어내는 것을 보면서 한번 더 놀라기도 했다. 자체엔진을 만들어서 게임을 만들어보았다고는 하지만, 저 정도로 높은 수준의 툴을 제공하지도 만들어야 한다는 생각도 못했다는 것이 부끄럽기만 하다. 생각해보면 "엘브리사"를 작업할 때에도 좋은 기능을 가진 툴이 있었기에 정말 쉽게 게임 리소스를 제작할 수 있었다. 

MMORPG라면 다양한 컨텐츠를 제작할 때 도움을 줄 수 있는 게임에 맞는 툴들이 필요할 수 있을 것 같다. 특히, 퀘스트나 연출 등... 하지만, 이런 툴에 대해서는 많이 발전을 못 했거나 게임 특화적인 부분이라 교류가 많이 부족했다고 생각된다.

국내의 많은 개발 스튜디오들은 어떤 자체툴들을 만들어서 사용하고 있을까?? 궁금하다. 이런 내용을 공유하는 자리가 있으면 들어보고 싶다. 

집에서 간단하게 만든다고 하더라고 툴을 고려해서 기반 작업을 고민해봐야지~ (Reflection 같은 거창한 것은 좀 어렵지만...)

당분간 이 부분에 관심이 생겨서 조금 공부해볼 생각이다. Serialization과 Reflection이 가장 먼저 생각이 나서 이 부분을 찾아보면서 정리 중이다. 자료 좀 정리해서 관련해서는 코드도 좀 만들어보고 싶다. 특히, 언리얼처럼 Code Generation 방식으로 해보는 것도 해보지 않은 작업이라 재미있을 것 같다... 해보자...!!!

개발 노트 Open your eyes 2018/09/26 03:11 by cagetu

얼마 전 해외에서 근무하는 지인들의 이야기를 들었다. 이런 저런 이야기를 하다가 "한번 지원이라도 해보세요. 해외에서도 님 정도면 충분히 될거에요~" 라는 말을 해주셨다. 집에 와서 해외 취업에 대해서 곰곰히 생각해보았다. 현재 상태로 해외 취업이 될 수 있을까? 아니지 좀 더 정확하게.... 현재 상태로 이직을 할 수 있을까???

컨텐츠 프로그래머로는 네트워크나 온라인 게임에서 필요한 노하우가 많이 부족하다. 그래픽 프로그래머로는 수학적인 지식이나 깊이 있는 이론적인 지식이 많이 부족하다. 엔진/툴 프로그래머로는 알고리즘이나 공학적인 지식에 부족함을 느낀다. 렌더러를 좋아해서 오래 관심을 가지고 봤지만, 그것도 모바일로 넘어오면서 몇 년 전에 사용했던 렌더링 기술들을 만들어본 것이 이제는 전부이다. 지금은 언리얼 엔진을 보고, 이전에 힘든 일을 미리 해주신 덕분에 편하게 프로젝트를 진행하고 있는 정도가 현재의 내 모습이다.두려워졌다. 다른 회사에 면접을 보게 되면 통과를 할 수 있을까? 내가 다른 사람들과 경쟁할 수 있는 만큼의 실력이 되나? 내가 혼자서 엔진을 빌드업 할 수 있을까? 모든 것이 부족해보였다. 

그래서 내가 "렌더링 프로그래머"로 해외 취업을 한다면... 이라는 가정으로 뭐가 필요한지 생각해보았다. 준비를 좀 해보고 싶어졌다. 내가 어디로 간다는 것이 아니라 갈 수 있는 사람이 되고 싶어졌다. 무엇을 해야하는지는 아직 구체적이지는 않지만, 그 동안 미뤄두었던 렌더링 관련 글들을 찾아서 보면서 틈틈히 만들어봐야 할 것 같다. 알고리즘 책 정도는 한번 정도 다시 풀어봐야 할 것 같고, 기회가 될 때 작은 엔진이나 게임을 만들어서 모아두어야 할 것 같다. (이건 나중에 인디개발을 하고 싶은 욕망도 조금은 있다.)
  • 면접을 볼 수 있을 정도의 영어 능력 -> 해외 인터뷰를 도전해는 것이 1차 목표
  • 포트폴리오 - Git에 소스를 좀 만들어서 올려두어야 할 것 같다. (사실 집에서 뭘 만들어보면 동기부여가 안되는데, 이걸 목표로 하면 좀 동기부여가 될 것 같다.)
  • 기초 다지기 - 입사 테스트 정도를 통과할 수 있을 정도의 기본기를 준비해야 하지 않을까? (알고리즘 책 정도는 한번 풀어보면 어떨까?)

앞으로 내가 10년 정도는 더 회사를 다녀야 하고, 25년 정도는 게임 개발자로 살고 싶은데, 눈 앞에 하루 하루에 흔들리고 주변 사람에 말에 휩쓸리면 안될 것 같다. 지금이 좋고 편하다고 미래가 좋고 편하다는 것이 아니지 않나? 나는 조금 더 미래에는 조금 더 자유롭게 선택할 수 있는 사람이고 싶다.

Open your eyes 라는 영화가 생각난다. 

1 2 3 4 5 6 7 8 9 10 다음



메모장

내가 먼 훗날에 이 글들을 보았을 때, 좋은 추억이 될 수 있기를...

나를 위해... 나에게 쓰는...

msn: cagetu@hotmail.com
mail: cagetu79@gmail.com
twitter: twitter.com/cagetu
facebook: facebook.com/cagetu