라벨이 개발도구인 게시물 표시

Behavior Tree 작업을 하며 느낀 점..

최근에 회사에서 AI 작업을 하는데 비헤이비어 트리(Behavior Tree)를 작성해보며 느낀 점을 간략히 적어봅니다. 장점이야 익히 알려져 있다시피 기존에 주로 쓰이던 FSM/HFSM과 달리 중복 코드가 없어지고 더 깨끗하게 모듈화가 된다는 점이구요. 여기서는 단점을 좀 적어볼게요. 비헤이비어 트리(이하 BT)는 기법 이름이 나타내듯 AI가 하나의 트리로 구성이 되는데, 이게 코드/스크립트로 수정하기에는 직관성이 아주 떨어집니다. 기존의 FSM/HFSM은 기본적으로 스크립트를 읽으면 AI의 동작이 그대로 읽혀서 머릿속으로 시뮬레이션이 편하게 되는데, BT는 스크립트로 트리를 구성하므로 사람이 읽기가 나빠요. 동작 하나를 수정하려 해도 트리를 수정하려면 코드를 수정하는것과 감각이 아주 달라서 프로그래머 입장에서 편하게 작업할 수 있는 환경이 아닙니다. 이걸 편하게 하려면 결국 시각적인 편집 도구를 따로 제공하는 수 밖에 없어요. 근데 쓸만한 시각적인 편집도구를 지원하는게 쉬운 일은 아니잖아요? 참고 삼아 써보니 UnrealEngine4의 경우에는 블루프린트 기반의 BT 편집도구를 제공하는데, 이것도 BT의 특성을 고스란히 반영하는 물건은 아니고, 블루프린트를 BT에 끼워 맞춘듯한 도구더군요. 적당히 편집이 되고 어느정도 디버깅이 된다 정도지 BT를 편하게 편집하는 도구라는 인상은 받을 수가 없어요. 물론 BT를 손으로 직접 편집하는 것에 비하면 훨씬 편한 도구임은 분명하죠. 어찌됐든 BT는 편집도구가 가장 큰 문제가 되더군요. 앞서 이야기한 편집 문제를 겪으며 개인적으로 얻은 결론인데, BT는 편집도구까지 개발해서 기획팀이 AI를 수정하는 작업 방식일 때 쓰는게 가장 좋을 듯해요. 기획팀이 수정하지 않더라도 AI 개발이 많아서 시각적인 개발 및 디버깅 도구를 지원할 필요가 있을때 채용하면 효과가 좋을 것 같습니다. AI 개발을 많이 할 게 아니면 그냥 FSM/HFSM으로 개발하는게 개발 효율면에서 나을 것 같습니다. 중복 코드가 좀 나오더라도 편집의 어려움을...

안드로이드 SDK 품질이 아쉽네요..

안드로이드로 뭔가 개발해보려고 SDK를 깔고 샘플을 몇 개 빌드 해 봤는데요. 가볍게 뭔가 만들어 보려고 하니 오랜만에 이클립스를 쓰는 것부터 귀찮네요.(한 6~7년 만에 써보는 것 같은데..) 회사에서는 비쥬얼 스튜디오 2008을 쓰는데, 그걸 쓰다가 간만에 써보는 이클립스는 좀 귀찮은 게 많아요. 게다가 안드로이드는 에뮬레이터가 매우 느리죠.. CHM을 제공해 주면 좋았겠지만 아쉬운 데로 도움말이 로컬 하드디스크에 HTML 형식으로 깔려있기는 한데, 어떤 이유에선지 웹브라우저로 로컬 브라우징을 하려고 하면 브라우징이 안되고.. 한마디로 말해서 하나부터 열까지 윈도우 사용자를 위한 배려가 부족하다 보니 조금씩 불편한 게 쌓여서 꽤나 거슬립니다. 뭐 안드로이드 앱이 수익성이 없는 건 누구나 다 아는 사실이니 별 상관 없는데, 무료로 뿌리기 위해 가볍게 뭔가를 만들고자 하는데 사람을 귀찮게 하니 의욕이 떨어지는 거죠. 내가 무료로 뭔가를 만들어 제공하려고 했는데 이렇게까지 귀찮은걸 신경 써서 세팅 하는데 시간을 들여야 하나 하는 생각이 드는 거죠. 결국 하나하나 해결하면서 진행해서 만들기는 하겠지만, 좀 더 설치 과정이나 환경 설정 등을 다듬고 에뮬레이터 품질도 개선해야 하지 않을까 싶네요.

Visual Studio 2010 기대됩니다..

회사에서 사용하는 컴파일러는 Visual Studio 2005입니다. 이전 회사에서는 2008을 썼는데, 작년 말에 옮긴 회사는 2005를 쓰고 있어서 역변태-_-를 하게 됐습니다. 그래서 2010이 어느덧 출시를 목전에 둔 RC(Release Candidate)버전까지 나왔다는 소식은 웹 상에서 들었지만 별 관심을 갖지 못하고 있었는데, 오전에 잠시 짬이 난 틈에 2010의 C++ 컴파일러에 어떤 변화가 있는지 찾아보게 되었습니다. 와우. 완전히 새로운 IDE에 컴파일러와 직접 통합된 IntelliSense, 새로운 C++ 표준 지원까지. 정말 좋아진 것 같습니다. IntelliSense의 데이터베이스로 SQL Express를 사용한다니 개발 PC의 요구사항이 꽤 높아질 것 같아서 약간 우려되지만, 기능면에서는 그야말로 막강해질 듯 하네요. 이번에도 Express 버전이 나오겠죠? 회사에서는 못 써볼 것 같으니 출시되면 집에서 Express라도 써봐야겠네요.

게임 개발 프로젝트의 문서화에 대한 단상..

모든 개발팀이 문서화 정책을 갖고 있겠죠. 팀마다의 상황이 다르고 개인차도 있겠지만, 이 글에서는 제가 지금까지 경험해 본 문서화에 대한 내용들을 좀 정리해 볼까 합니다. 우선, Doxygen(을 포함한 자동 문서 생성 도구)은 별로 쓸모가 없었습니다. 최근의 IDE들은 프로그래머들에게 다양한 정보를 제공해 줍니다. VC의 IntelliSense는 상당히 잘 동작하고, 그걸로는 부족하다고 생각하는 개발팀들의 경우엔 VisualAssist를 사용합니다. 이런 상황에서 Doxygen이 생성하는 클래스 및 함수 목록은 별반 도움이 안 됩니다. 다만 클래스 계통도를 뽑아두면 한 눈에 전체 구조를 볼 수 있다는 점 정도가 약간 쓸모가 있을 뿐인데, 주석이 없어도 되는 그 정도의 작업을 위해 소스 코드에 Doxygen 형식의 주석을 달아두는건 별로 좋은 방법이 아닌 것 같습니다. 코드가 지저분해 질 뿐이죠. 하지만 최신 IDE에서는 Doxygen 형식으로 함수나 클래스의 요약을 정리한 주석을 약간 달아두면 툴팁으로 확인할 수도 있으니(이것도 꼭 Doxygen 형식일 필요는 없지만;;) 약간 정도는 주석을 달아준다고 칩시다. 이런 경우에는 어디까지 주석을 달아야 할 지가 문제인데, 제가 보기에는 소스코드의 작성자가 필요하다고 생각되는 곳에 필요하다고 생각되는 내용만큼만 달면 됩니다. 다만 최소한의 원칙을 정한다면 brief 태그를 주로 사용하는 걸로 하고 author 태그를 금지해야 합니다. author 태그는 여러 프로그래머가 같이 작업하는 요즘의 게임 개발 프로젝트에서 거의 아무런 쓸모가 없고, 함수를 업데이트 하는 경우에 갱신하기도 애매해서 방치하다 보면 정보를 전혀 제공하지 않는 의미 없는 태그가 됩니다. 지금까지 해본 여러 가지 형식의 문서화 중에 가장 성공적인 경우는 Wiki를 사용했을 때입니다. 모듈 하나를 완성하면 그 모듈의 사용법에 대한 레퍼런스를 작성하는 방식으로 했을 때가 그나마-_- 가장 문서화가 잘 됐던 것 같아요. 문서화에 대...

소스코드 문서화 도구, Doxygen..

개인적으로 만들고 있는 프로그램이 있는데, 시간이 날때만 조금씩 띄엄띄엄 작업을 하다보니 가끔은 저 자신도 어디서부터 다시 손을 봐야 할지 감을 찾는데 시간이 오래 걸리는 경우가 있습니다. 소스에 주석을 달아놓기는 하지만 라이브러리의 전체적인 윤곽을 빨리 훑어보는데에는 주석만으로는 좀 부족하죠. 그래서 소스코드 문서화 도구를 이용해 보기로 마음을 먹었습니다. 아무래도 가장 많은 사람들이 사용하는 도구가 일반적인 용도로는 가장 유용할 가능성이 높다고 할 수 있죠. 가장 유명한 Doxygen을 써보기로 했습니다. (링크) Doxygen, Source code documentation generator tool 이 글을 작성하는 시점에서 최신 버전은 1.5.2입니다만, 설치해서 테스트해보니 한글로 작성한 주석을 제대로 처리하지 못합니다. 관련된 내용을 좀 찾아보니 1.5.2는 자체적으로 문자열 인코딩/디코딩 기능을 구현한듯 하고, 직전 버전인 1.5.1-p1은 OS의 인코딩을 따라가는듯 합니다. 자체 기능이 제대로 구현될 때까지는 OS를 따라가는 1.5.1-p1을 쓰는게 정신건강에 좋을듯. (링크) Doxygen 1.5.1-p1 설치해보니 한글 주석이 잘 처리됩니다. 문서 생성 설정을 찾아보니 클래스간의 관계를 그래프로 그려주는 기능이 있는데, 이걸 활용하려면 dot라는 도구가 필요하다고 합니다. dot는 Graphviz에 포함된 그래프 생성 도구라네요. (링크) Graphviz - Graph Visualization Software Windows용은 다음 링크에서 받을 수 있습니다. (링크) Graphviz Download (Windows) 필요한 도구를 모두 설치하고 옵션을 설정하여 문서를 생성해보니 클래스 및 멤버 목록과 관계도, 색인 등이 포함된 꽤 괜찮은 문서가 나오긴 하지만 정작 제가 작성해 놓은 주석은 포함되지 않는군요. C++의 경우에는 Doxygen이 인식할 수 있도록 주석 스타일을 바꿔서 달아줘야 생성된 문서에 주석이 포함된다고 하는...