Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
초보 개발자의엔진 개발 도전기      -1-         김준경   / aka ㅈㄱ
게임 개발의 시작• 횡 스크롤 슈팅 게임 제작  – 이게 2001년…이었나?• DirectX만 알면 쉽다는 말에 말에 속음  – 위 말의 의미는 DX가 어렵다는 의미였음  – 알고 보니 나만 빼고 다들 실력자• 어찌어찌...
게임 개발의 시작• 횡 스크롤 슈팅 게임 제작  – 이게 2001년…이었나?• DirectX만 알면 쉽다는 말에 말에 속음  – 위 말의 의미는 DX가 어렵다는 의미였음  – 알고 보니 나만 빼고 다들 실력자• 어찌어찌...
하지만,‘게임 개발이란 게 이런 거구나…’
하지만,재. 미. 있. 다.
2D 게임엔진 만들기• 반복적인 내용들을 정리한 수준의 엔진 – DX 초기화, 리소스 로딩, 메모리 관리 등등 – 그래도 만들어놓으니 가지고 놀긴 편해짐• 코드의 간결성에 대한 고찰 시작 – 남들도 이해할 수 있는 코드...
닥치고 실전!!• 무작정 3D 게임을 만들기 시작• 3D 계산은 대체 어떻게 하는가? – 책에 보니 행렬과 벡터는 사용 하더만… – 내가 아는 수식들은 고등학교 수준• 2D 시절 습관들의 악습 – 도트 찍기만 알면 그림...
실패 원인• 내가 계산할 수 있는 영역 안에서 솔루션이 정해짐 – 계산이 안 되는 걸 어쩌라고;;;• 남들은 어떻게 작업 하는지에 대한 관심이 부족 – 그랬더니 애니메이션 하나 만들어주는데 한 세월 – 다행히 애들도 원...
아…‘이거 무식하게 할 짓은 아닌가 보다.’
남들도 이렇게 만드나?• 돈 받고 게임 만들면 맨날 이짓거리? – 불법으로 받았던 게임을 만든 회사들한테 미안해짐• 뭔가 노하우가 있을 거라 추측 – 아무래도 경력이 있으면 좀 더 이쁘게 만들지 않을까? – 회사에서 만...
공개된 엔진 분석• 아는 게 없으니 공개된 소스라도 보자  – 그래서 시작된 오픈 소스에 대한 관심• 어려운 소스들 소스 탐독  – 이것들만 이해하면 나도 천재소리 들을 줄 알았음  – 그닥 좋은 예시들은 아닌듯  걍...
공개된 엔진 분석• 아는 게 없으니 공개된 소스라도 보자  – 그래서 시작된 오픈 소스에 대한 관심• 어려운 소스들 소스 탐독  – 이것들만 이해하면 나도 천재소리 들을 줄 알았음  – 그닥 좋은 예시들은 아닌듯  걍...
공개된 엔진 분석• 아는 게 없으니 공개된 소스라도 보자  – 그래서 시작된 오픈 소스에 대한 관심• 어려운 소스들 소스 탐독  – 이것들만 이해하면 나도 천재소리 들을 줄 알았음  – 그닥 좋은 예시들은 아닌듯  걍...
그럼 상용 엔진들은 어떤가?• 이제는 게임 개발보다 관심이 높아진 엔진 개발 – 결국은 엔진 개발사에서 일하게 됨 – 상용 엔진들을 접할 기회들이 조금은 생겨남• 좋은 코드란 일관성과 규칙성이 있는 코드? –   좋은 ...
일반적인 엔진들의 공통점• OS에 종속된 함수들은 제외 (아니면 OS별로 분리)  – 이건 아무래도 멀티플랫폼을 위한 어쩔 수 없는 특징  – 디버깅의 편의성을 위한 많은 준비  – 물론 어디나 예외는 있게 마련…• 자...
일반적인 엔진들의 공통점• OS에 종속된 함수들은 제외 (아니면 OS별로 분리)  – 이건 아무래도 멀티플랫폼을 위한 어쩔 수 없는 특징  – 디버깅의 편의성을 위한 많은 준비  – 물론 어디나 예외는 있게 마련…• 자...
탄탄한 기반이 필요• 코어 라이브러리 자체 제작  – 만들어두면 많이 써먹긴 하겠지…하는 생각으로 시작  – 이렇게 쌓인 경험들은 회사에서도 유용하게 재활용• STL에 대한 괴담도 많이 돌았었음  – “STL은 게임에선...
코어 라이브러리• 게임에서 쓸만한 STL 같은 라이브러리  – C++ 표준 및 Boost, 그리고 Java에서 기본 개념들을 차용  – 꼭 필요한 내용만 구현하고 부족한 내용은 STL과 병행• SIMD와 병렬처리의 적극...
코어 라이브러리
좀 특이한 내용• 삼각함수 테이블  – 0~90도 사이의 값을 미리 만들어서 사용• String 객체 내 Hashcode 포함  – Hashcode의 재활용을 위한 목적  – 값 비교시 Hashcode를 사용하면 좋다던...
직접 구현한 코어의 장단점• 장점 – 불만 있으면 직접 수정 – 보다 깊은 곳까지 공부하게 됨 – 오히려 표준에 대한 이해도가 높아짐• 단점 – 손 가는 곳이 엄청나게 많음 – 원 목적이었던 엔진은 뒷전으로 밀린 모양새...
구현 예
그럼 실제 엔진부는?• 기본적인 API들은 바꿔 끼울 수 있도록 준비   – 새로운 내용들에 대한 거침없는 도입이 목표   – 인터페이스 통일을 위해 각 모듈별 인터페이스 객체 구성• 각 Subsystem들의 업데이트 ...
전체 구조 예상도Game                   ToolEngine               Engine Ex         Core, API            OS
아직도 진행형…• 엔진 제작은 아직 진행 중 – 일이라기 보다는 취미생활 – 회사에서 못해볼 작업을 집에서 경험• 향후 기회가 되면 다시 발표 예정 – 어느 정도 결과물이 나와준다는 가정이 필요
다음 이 시간에…
Upcoming SlideShare
Loading in …5
×

초보 개발자의 엔진 개발 도전기 1

5,187 views

Published on

급하게 만들어서 헛점이 좀 많습니다.
조만간 개정된 내용을 다시 올릴 수 있도록 하겠습니다.

Published in: Technology
  • Be the first to comment

초보 개발자의 엔진 개발 도전기 1

  1. 1. 초보 개발자의엔진 개발 도전기 -1- 김준경 / aka ㅈㄱ
  2. 2. 게임 개발의 시작• 횡 스크롤 슈팅 게임 제작 – 이게 2001년…이었나?• DirectX만 알면 쉽다는 말에 말에 속음 – 위 말의 의미는 DX가 어렵다는 의미였음 – 알고 보니 나만 빼고 다들 실력자• 어찌어찌 결과는 나왔는데… – 결국 나만 하는 게임
  3. 3. 게임 개발의 시작• 횡 스크롤 슈팅 게임 제작 – 이게 2001년…이었나?• DirectX만 알면 쉽다는 말에 말에 속음 – 위 말의 의미는 DX가 어렵다는 의미였음 – 알고 보니 나만 빼고 다들 실력자• 어찌어찌 결과는 나왔는데… – 결국 나만 하는 게임
  4. 4. 하지만,‘게임 개발이란 게 이런 거구나…’
  5. 5. 하지만,재. 미. 있. 다.
  6. 6. 2D 게임엔진 만들기• 반복적인 내용들을 정리한 수준의 엔진 – DX 초기화, 리소스 로딩, 메모리 관리 등등 – 그래도 만들어놓으니 가지고 놀긴 편해짐• 코드의 간결성에 대한 고찰 시작 – 남들도 이해할 수 있는 코드가 무언지 고민 – 사실 남들한테 물어보려면 코드가 쉬워야 했음• 이러는 동안 세상은 이미 3D로 넘어가고…
  7. 7. 닥치고 실전!!• 무작정 3D 게임을 만들기 시작• 3D 계산은 대체 어떻게 하는가? – 책에 보니 행렬과 벡터는 사용 하더만… – 내가 아는 수식들은 고등학교 수준• 2D 시절 습관들의 악습 – 도트 찍기만 알면 그림이 그려지는 게 아님 – 괜히 소프트웨어 렌더러에 욕심 부리다가 포기
  8. 8. 실패 원인• 내가 계산할 수 있는 영역 안에서 솔루션이 정해짐 – 계산이 안 되는 걸 어쩌라고;;;• 남들은 어떻게 작업 하는지에 대한 관심이 부족 – 그랬더니 애니메이션 하나 만들어주는데 한 세월 – 다행히 애들도 원래 어려운 줄 알고 있었음• 2D는 포멧만 맞춰주면 끝나는 거였는데… – 3D에선 요구해야 할 사항들이 상당히 많음
  9. 9. 아…‘이거 무식하게 할 짓은 아닌가 보다.’
  10. 10. 남들도 이렇게 만드나?• 돈 받고 게임 만들면 맨날 이짓거리? – 불법으로 받았던 게임을 만든 회사들한테 미안해짐• 뭔가 노하우가 있을 거라 추측 – 아무래도 경력이 있으면 좀 더 이쁘게 만들지 않을까? – 회사에서 만드는 엔진은 뭔가 있을 줄 알았음• 그래서 게임 개발자 사이트들 섭렵 – GPGStudy, KGDA 게시판 등등…
  11. 11. 공개된 엔진 분석• 아는 게 없으니 공개된 소스라도 보자 – 그래서 시작된 오픈 소스에 대한 관심• 어려운 소스들 소스 탐독 – 이것들만 이해하면 나도 천재소리 들을 줄 알았음 – 그닥 좋은 예시들은 아닌듯  걍 논문을 보자• 어려운 소스가 항상 옳은 방향은 아닌듯 – 소스 분석하는 능력 발달엔 도움 – 카더라 남발 종자로 거듭
  12. 12. 공개된 엔진 분석• 아는 게 없으니 공개된 소스라도 보자 – 그래서 시작된 오픈 소스에 대한 관심• 어려운 소스들 소스 탐독 – 이것들만 이해하면 나도 천재소리 들을 줄 알았음 – 그닥 좋은 예시들은 아닌듯  걍 논문을 보자• 어려운 소스가 항상 옳은 방향은 아닌듯 – 소스 분석하는 능력 발달엔 도움 – 카더라 남발 종자로 거듭
  13. 13. 공개된 엔진 분석• 아는 게 없으니 공개된 소스라도 보자 – 그래서 시작된 오픈 소스에 대한 관심• 어려운 소스들 소스 탐독 – 이것들만 이해하면 나도 천재소리 들을 줄 알았음 – 그닥 좋은 예시들은 아닌듯  걍 논문을 보자• 어려운 소스가 항상 옳은 방향은 아닌듯 – 소스 분석하는 능력 발달엔 도움 – 카더라 남발 종자로 거듭
  14. 14. 그럼 상용 엔진들은 어떤가?• 이제는 게임 개발보다 관심이 높아진 엔진 개발 – 결국은 엔진 개발사에서 일하게 됨 – 상용 엔진들을 접할 기회들이 조금은 생겨남• 좋은 코드란 일관성과 규칙성이 있는 코드? – 좋은 엔진(혹은 코드)은 유연해야 함 – 유연한 코드는 사용자가 많이 이해할 수 있어야 함 – 일관성과 규칙성은 사용자의 이해력을 높여줌 – 물론 순전히 개인적인 생각
  15. 15. 일반적인 엔진들의 공통점• OS에 종속된 함수들은 제외 (아니면 OS별로 분리) – 이건 아무래도 멀티플랫폼을 위한 어쩔 수 없는 특징 – 디버깅의 편의성을 위한 많은 준비 – 물론 어디나 예외는 있게 마련…• 자체적으로 제작하는 내용들이 비슷 – 수학 연산, 메모리 할당자, String 객체 – 컨테이너 객체들은 스타일에 맞춰서…• 렌더러는 더러움
  16. 16. 일반적인 엔진들의 공통점• OS에 종속된 함수들은 제외 (아니면 OS별로 분리) – 이건 아무래도 멀티플랫폼을 위한 어쩔 수 없는 특징 – 디버깅의 편의성을 위한 많은 준비 – 물론 어디나 예외는 있게 마련…• 자체적으로 제작하는 내용들이 비슷 – 수학 연산, 메모리 할당자, String 객체 – 컨테이너 객체들은 스타일에 맞춰서…• 렌더러는 더러움
  17. 17. 탄탄한 기반이 필요• 코어 라이브러리 자체 제작 – 만들어두면 많이 써먹긴 하겠지…하는 생각으로 시작 – 이렇게 쌓인 경험들은 회사에서도 유용하게 재활용• STL에 대한 괴담도 많이 돌았었음 – “STL은 게임에선 쓸게 못 된다.” – 물론 현재는 EASTL이 롤 모델 C++ 표준과 Boost의 아이디어만 가져와 구현하는 형태로 제작• DLL Export 하는데 STL은 문제가…
  18. 18. 코어 라이브러리• 게임에서 쓸만한 STL 같은 라이브러리 – C++ 표준 및 Boost, 그리고 Java에서 기본 개념들을 차용 – 꼭 필요한 내용만 구현하고 부족한 내용은 STL과 병행• SIMD와 병렬처리의 적극적인 활용 – 어설픈 어셈질은 안 하느니만 못함  하드웨어 공부는 필수• Unit Test는 의외로 많은 도움 – 만들어진 내용을 엔진에서 굴리면서 확인하기는 힘듦 – 수정 중에 발생한 문제도 사전에 막을 수 있음
  19. 19. 코어 라이브러리
  20. 20. 좀 특이한 내용• 삼각함수 테이블 – 0~90도 사이의 값을 미리 만들어서 사용• String 객체 내 Hashcode 포함 – Hashcode의 재활용을 위한 목적 – 값 비교시 Hashcode를 사용하면 좋다던데…• 배열기반 컨테이너 – Cache Index를 이용한
  21. 21. 직접 구현한 코어의 장단점• 장점 – 불만 있으면 직접 수정 – 보다 깊은 곳까지 공부하게 됨 – 오히려 표준에 대한 이해도가 높아짐• 단점 – 손 가는 곳이 엄청나게 많음 – 원 목적이었던 엔진은 뒷전으로 밀린 모양새 – 최적화가 말처럼 쉽게 되지를 않음
  22. 22. 구현 예
  23. 23. 그럼 실제 엔진부는?• 기본적인 API들은 바꿔 끼울 수 있도록 준비 – 새로운 내용들에 대한 거침없는 도입이 목표 – 인터페이스 통일을 위해 각 모듈별 인터페이스 객체 구성• 각 Subsystem들의 업데이트 과정은 병렬처리 – Component 기반 객체들의 유행 이라는데… – 각 Subsystem들에 대한 접근과 업데이트를 분리• 현재 SceneGraph, Entity, Renderer 등 정리 중 – 기존 엔진들에서도 공통점을 찾기가 애매
  24. 24. 전체 구조 예상도Game ToolEngine Engine Ex Core, API OS
  25. 25. 아직도 진행형…• 엔진 제작은 아직 진행 중 – 일이라기 보다는 취미생활 – 회사에서 못해볼 작업을 집에서 경험• 향후 기회가 되면 다시 발표 예정 – 어느 정도 결과물이 나와준다는 가정이 필요
  26. 26. 다음 이 시간에…

×