• 북마크
  • 언리얼 엔진 4
  • 블렌더 
  • C++
    • C++ Primer -  C++ 추천 책. 방대한 컨텐츠
    • Learn C++ - SoloLearn의 C++ 학습 사이트/앱. 80편의 강좌
    • CodinGame - 게임 예제 퀴즈로 배우는 프로그래밍
    • Engineer4Free 강좌 - 47편 4.5시간 분량의 입문자용 강좌
    • Udemy Ben Tristem 튜토리얼 - C++ 가이드. 61편 7.5시간 분량, 완강되면 30시간 분량 예정
  • Game Design
    • Udemy 게임 기획 - 174편 39시간 분량의 Game Design 강좌
    • 유튜브 플레이리스트 - 324편, 기획자라면 볼만한 다양한 장르의 유튜브 영상들
    • 쩌는 게임기획서 이렇게 쓴다 - 기획서 작성 규칙, 조언, 프로세스 등 실무 경험자의 가이드
    • 게임 기획 튜토리얼 - 게임 기획이 무엇인지 기초부터 커버하는 가이드
    • 시선을 끄는 PPT - 직장에서 사용할 깔끔한 PPT 만드는 가이드
    • 라프 코스터의 재미이론 - 무엇이 게임을 재미있게 만드는지 연구한 책
    • 시나리오 라이팅 - 바라는대로 라이터가 쓰게 하는 가이드
    • UE4 레벨디자인 개요 - 25분 분량 에픽 게임즈의 실제 레벨디자인 과정 설명하는 가이드
    • 게임 데이터 모델링 - 게임 기획서를 게임으로 만드는 데이터 모델링과 ERD
    • 데이터 주도적 설계 - 짧은 분량의 게임 데이터 설계 팁
    • 테이블 사용한 게임 기획 - 기획서를 테이블로 작성해야 하는 이유
    • 게임 기획 입문 - 7분 분량 간단한 숫자야구 게임 기획
    • GDC - 게임 개발자 회의의 발표 영상
    • Game Maker's Toolkit - 상용 게임들의 게임 디자인을 분석하는 유튜브 채널
      • Secrets of Game Feel and Juice - 게임의 느낌: 마리오 게임에서 레벨 디자인과 배경을 제외하고 마리오만 조작해도 마찰력과 점프 등의 동작 덕분에 재미있다. 한마디로 조작감이 좋다. 게임을 다듬는 단계에서 조작감을 높이는 방법:
        • 화면 흔들기(즉각적인 피드백)
        • 액션 상황에서 화면 정지 (격투 게임, 젤다)
        • 어떤 방법이든 타격을 했을 때 타격을 했다는 피드백을 효과적으로 줘야 한다
        • 사운드 FX도 좋은 방법이다. 
        • 카메라 무빙 - 플레이어가 항상 중심에 있기 보다 액션을 보여주는 것이 더 좋다
        • 과장된 효과 - 과장된 총알, 과장된 폭발
        • 관련 영상
    • Thief vs AAA Gaming - 씨프의 레벨 디자인에 대한 분석, AAA 게임들에 대한 비판
      • 콘텐츠를 최대한 많이 채워넣으려는 AAA 게임과 달리 씨프는 콘텐츠의 제거를 메카닉으로 사용한다
      • 미니맵이 HUD에 뜨지 않고 현실적인 방법으로 지도를 손에 얻게 된다
      • 씨프는 퀘스트 마커를 사용하지 않고레벨 디자인으로 자연스럽게 길찾기가 가능하다.
      • AAA 게임은 레벨에 참신함을 주려고 드라마틱한 배경을 설정함. 그리고 중간중간에 탄약 상자를 제공하고 보스와 대결하기 전에는 항상 탄약 상자와 피 회복을 할 수 있는데 이것이 자연스럽지 않다. Too Gamey
      • 씨프는 현실적인 배경에 현실적인 아이템이 배치되어 있고 골드 등이 뜬금없이 배치되어 있는 것이 아니라 스토리와 연결되어있다.
      • 게임플레이와 스토리의 연결 - 어떤 남자가 준 지도를 통해 비밀 맨션에 들어감. 지도에 나와있지 않은 부분에 트랩이 배치되어 있는데 알고보니 맨션 주인이 개럿의 실력을 테스트 한 것. 지도에 나와있지 않은 부분을 탐험하면서 그 남자가 이상하고 무서운 사람이라는 느낌을 받게 된다. AAA 게임처럼 컷신이나 대화로 그가 무서운 사람임을 보여주지 않고 오직 게임과 플레이어의 대화만으로 스토리를 풀어나간다.
      • 2014 씨프와 오리지널 씨프 모두 로프 화살을 특정 문맥에서만 사용할 수 있다. 그러나 오리지널 씨프에서는 나무 천장에서만 로프 화살을 사용하게 하여 자연스럽게 하였다.
      • 오리지널 씨프는 바닥의 재질에 따라 소리를 다르게 하여 난이도를 조절하였다.
      • AAA 게임들은 최근 플레이어가 선택할 수 있는 요소를 늘리고 있는데, 씨프에서는 선택을 포기한 대신 더 자연스러운 스토리를 만들어 냄
      • AAA 게임은 플레이어에 더 많은 파워를 주려고 하고, 씨프의 주인공은 취약하다. 취약함이 서스펜스를 만든다.
      • 틀을 깨고 너의 디렉션에 맞는 일관적인 게임플레이, 그래픽, 사운드를 제작해라
    • 레벨 디자인의 기초 - 1시간 30분 7편 분량의 레벨 디자인 입문자 튜토리얼
  • Game Music
  • Problem Solving
    • 40개 개념 - 40개 중요한 알고리즘 개념을 설명한 글
    • 알고리즘 비쥬얼 - 알고리즘을 배우는 가장 직관적인 방법
    • 칸 아카데미 알고리즘 - 알고리즘의 기초를 배우는 가이드
    • 칸 아카데미 정보이론 - 알고리즘 공부에 도움이 될 수 있음
    • Cheat Sheet - 알고리즘 치트싯 모음
    • 프로그래밍 콘셉트 - 언어에 상관 없이 모든 프로그래머가 읽어야 할 책
    • 하버드 CS50x - CS 입문, 100+ 시간의 강좌
    • Clever Algorithms - 알고리즘 다루는 무료 책
    • r/dailyprogrammer - 난이도가 구분된 프로그래밍 퀴즈가 올라오는 서브레딧 
    • 97 Things Every Programer Should Know - 프로그래밍 입문자가 알아야할 것들
    • 프린스턴 알고리즘 1 2 - 100+시간
    • 스탠포드 알고리즘 1 2 - 100+시간
    • Programming Challenges - 문제 해결 능력을 훈련하는 책
    • 자료구조와 알고리즘은 프로그래머라면 필수로 알아둬야 함!
  • 게임 개발 관련 자료
  • 리소스
  • Content Creator 
    • 김포프 - EA에서 근무했든 김포프라는 사람의 Vlog. 게임 프로그래밍에 대한 동영상을 올린다
    • Game Maker's Toolkit - 상용 게임들의 게임 디자인을 분석하는 유튜브 채널
    • Extra Credits - 게임 개발에 대한 다양한 내용을 다루는 유튜브 채널
    • Peter Newton - AI 위주 언리얼 엔진 4 강좌를 올리는 유튜브 채널
    • zoombapup - AI를 주로 다루는 언리얼 엔진 4 강좌 유튜브 채널
    • Tom Looman - 에픽 게임즈의 프로그래머. 언리얼 엔진 관련 강좌를 올린다
    • Gleb Alexandrov - 블렌더 구루. 블렌더 위주 CG 관련 정보를 올린다
  • 게임 개발자 Career
  • 커뮤니티
  • 기타
    • Trello - 협업 도구. 개발의 진행 상황 파악할 때 유용한 웹앱
    • Roast My Game - 개발중인 게임 공유하고 피드백 받는 사이트
    • itch.io - 인디 게임 공유 사이트
    • GIT


  • 출처: http://202psj.tistory.com/879 [알레폰드의 IT 이모저모]



    비주얼 스튜디오에서 관리해야 되는 파일이 많아지면 많아 질 수록 원하는 파일을 찾는게 어려워진다.


    작업을 하다가 [F12] 정의로 이동으로 이동을 자주 하게 되는데 이럴때에 솔루션 탐색기가 해당 파일의 위치를 찾을 때 


    곤혹을 치를 때가 있는데 이럴때 도구 -> 옵션 -> 프로젝트 및 솔루션 -> 일반 )  


    솔루션 탐색기에서 활성 항목 추적  > 옵션을 키게 되면 내가 편집하는 파일을 솔루션 탐색기에서 


    자동으로 위치를 추적하게 되면서 작업의 효율성을 높이게 된다.

    한 사이트에서 개발한 프로그램이 가끔 이유없이 죽고 있었다.

    다른 사이트는 그런 일이 없는데 그 사이트에서만 발생하고 있는 일이었다.

    보통은 로그를 이용하여 원인을 파악하는데,

    그 사이트는 로그가 너무 많이 쌓여서 로그 유지 기간이 짧았고,

    반면 프로그램이 다운되는 일은 어쩌다 (한, 두 달에 한 번정도) 발생되는 일이라서 골치가 아팠는데

    이 기회에 Breakpad를 적용해서 해결해 보려고 마음 먹었다.

    1. Breakpad 소개

    Google breakpad home page : https://code.google.com/p/google-breakpad/

    Google Chrome처럼, 여러 플랫폼을 지원하는 프로그램을 위한 크래시 덤프를 다루기 위한 툴이다.

    Win32 개발자들이 접하는 minidump나, *nix 개발자들이 접하는 coredump를 breakpad 포맷(이라기보단 함수 맵)으로 변경하고, 이를 이용해서 플랫폼이 바뀌어도 같은 형태의 스택 트레이스(stack trace)를 볼 수 있게 해주는 툴이다.

    좀 더 세부적으로 보면 다음과 같은 부분으로 되어 있다.

    (개별 사용자 용) 크래시가 발생했을 때, 이를 breakpad 에서 사용하는 포맷으로 덤프를 남겨주는 부분: in-process 덤프만 있는 게 아니라, 다른 프로세스에서 dump를 남기는 방식(out-of-process dump)도 지원한다
    (Build-System 용) 디버그 정보를 읽어서 breakpad 내부 형식으로 바꾸는 부분 : Win32 pdb 나 –g 옵션을 넣고 빌드한 *nix 바이너리에서 심볼 데이터를 뽑아낸다
    (Crash Collector 용) 1에서 나온 정보를 가지고 2를 이용하여 스택 트레이스를 뽑아내는 부분

    사실 2, 3 부분은 Windows 환경에서만 프로그래밍 한다면 그다지 중요하지 않다. 어차피 breakpad 도 덤프 자체는 minidump를 쓰고 있고, breakpad 소개의 Build / User / CrashCollector system 다이어그램에 나온 과정도, 디버그 정보가 애초에 분리되어 빌드 되는 환경(/Z7 같은 걸 쓰면 모르겠지만)에선 그다지 더 편해질 건 없다.

    그렇지만 1에서 Windows named-pipe를 써서, 크래시가 발생한 프로세스가 아니라, 안전하게 동작 중인 프로세스에서 덤프를 남길 수 있다는 점(Out-of-process 덤프), 그리고 이 덤프 남기는 부분의 코드에서 제공하는 callback 지점들이 적당해서, 이걸 이용해서 간단하게(!) 실제 배치된 시스템의 덤프를 중앙의 서버로 모으는 작업을 간편하게 작성할 수 있었다.

    일단 out-of-process로 덤프를 남길 수 있기에, 크래시가 발생한 바이너리에서 할 수 없는 일들 – 메모리 신규 할당, heap 메모리 참조, 기타 등등 – 을 맘대로 해도 되기 때문에 웹 서버나 다른 서버로 덤프를 보내는 일이 쉬워진다.

    – rein’s world

    out-of-process

    breakpad 의 가장 큰 특징은 out-of-process 를 지원하는 것이다. 크래시를 처리하는 함수에서 앞에서 말한 다양한 기능을 추가한다면 제대로 동작하지 않을 수도 있다. 간단한 예로, 사용자에게 의견을 받는 윈도우를 띄운다고 할 때 메인 스레드의 메시지 루프가 깨지면 윈도우 자체를 볼 수 없게 된다.

    크래시가 발생한 프로세스 밖(out-of-process)에서 처리하면 이와 같은 문제를 줄일 수 있다. 그래서 크래시 발생을 처리하기 위해 보다 많은 것을 제공할 수 있다. 물론 in-process 도 지원하기 때문에 필요에 맞게 골라 쓰면 된다.

    크로스 플랫폼

    멀티플랫폼 지원을 고려한다면 breakpad 는 좋은 선택이 될 수 있다. breakpad 를 사용한다면 크로스 플랫폼에 대한 고민을 줄여줄 수 있다.

    – 야드버즈의 개발 로그

    breakpad를 현재 사용하고 있는 대표적인 프로그램은 Chrome Browser, Firefox Browser, Picasa, Google Earth 등이다.

    2. Breakpad 받기

    Breakpad는 SVN을 이용하여 내려 받을 수 있다.

    SVN은 서버까지 필요 없으므로 Windows용 tortoiseSVN을 설치하면 된다.

    tortoiseSVN을 설치했으면 다음과 같이 내려 받는다.

    1) Command 창을 열어 먼저 설치하고 싶은 폴더로 이동한뒤, 다음과 같이 실행한다.

    svn checkout http://google-breakpad.googlecode.com/svn/trunk/ google-breakpad-read-only

    그러면 google-breakpad-read-only 폴더가 생기면서 그 폴더로 checkout을 하고, 소스를 내려 받는다.

    2) 탐색기에서 설치하고 싶은 폴더를 만든 뒤, 마우스 오른쪽 버튼을 눌러 로 ‘SVN Checkout’을 선택한다.

    URL of Repository 항목에 ‘http://google-breakpad.googlecode.com/svn/trunk’ 를 넣고  OK를 누른다.

    그러면 그 폴더로 checkout을 하고, 소스를 내려 받는다.

    3. Breakpad build 하기

    1. 1. python 2.x버전 설치: breakpad는 gyp를 이용하여 빌드 시스템을 생성한다. gyp를 사용하기 위해서는 python 2.x버전이 필요하다. gyp가 아직 python 3.x버전과는 호환성 문제가 있는 것 같다. (gyp 자체 문제 + gyp 설정 파일문제가 복합적인듯 하다.)
    2. gyp 소스 가져오기: breakpad 소스 내에 gyp가 내장되어 있지만, 내장 gyp는 버전관리가 안되어 있는듯 하다. gyp 최신 버전이 적용이 안되어 있다. 현재 작성 시간 기준 gyp 최신 소스에는 Visual studio 2012까지 빌드 시스템을 생성할 수 있도록 되어있다. gyp 최신버전을 사용하기 위해서 gyp를 google 저장소에서 checkout하면 된다.
    3. gyp로 빌드 시스템 생성: src\client\windows 폴더에서 ..\..\tools\gyp\gyp.batbreakpad_client.gyp 를 실행하면 솔루션 파일과 프로젝트 파일이 생성되는 것을 볼 수 있다.
    4. Visual Studio로 빌드: 만들어진 솔루션 파일을 열어 그 안에 있는 build_all 프로젝트를 빌드하면 된다.

    4. Breakpad test

    테스트용 프로그램(crash_generation_app 프로젝트)이 솔루션에 포함돼 있으므로 따로 만들 필요는 없다. 이 테스트 프로그램을 이용하면 in-process 뿐만 아니라 out-of-process 미니덤프도 만들어 볼 수 있다. 여기에서는 out-of-process 미니덤프를 만드는 방법을 소개하겠다.

    프로그램을 실행하기에 앞서 C:\Dumps 폴더를 만들어야 한다. 이 폴더를 만들지 않으면 미니덤프를 저장하다가 실패한다.

    준비가 다 됐다면 프로그램을 실행해 보자. 제대로 된 out-of-process 를 테스트하기 위해서는 프로세스를 두 개 띄워야 한다. 두 번째 프로세스를 띄울 때 서버를 실행할 수 없다는 에러 메시지가 뜨지만 무시해도 좋다. 그런 다음 서버가 실행되지 않는 프로세스에서 Client -> Deref Zero 메뉴를 선택해 강제로 크래시를 발생시키면 C:\Dumps 폴더에 미니덤프 파일이 생성되는 것을 볼 수 있다.

    – 야드버즈의 개발 로그

    참고자료

    Breakpad 로 CrashReporter 만들기 – rein’s world

    원도우즈 환경에서 breakpad 사용하기 – 야드버즈의 개발 로그


    [추가]

    ../gyp/gyp.bat breakpad_client.gyp --no-circular-check

    위 옵션을 꼭 넣어야 솔루션파일이 만들어진다.


    출처

    https://arodream.wordpress.com/2015/04/17/google-breakpad%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-creash-dump-%EB%96%A8%EC%96%B4%EB%9C%A8%EB%A6%AC%EA%B8%B0/



    + Recent posts