30
취취취 취취 취취취 취취취 취취 취취 취취취 2011.06.12

취미로 엔진 만들기

Embed Size (px)

DESCRIPTION

취미로 엔진을 만들기.

Citation preview

Page 1: 취미로 엔진 만들기

취미로 엔진 만들기

최지호카사 공개 세미나

2011.06.12

Page 2: 취미로 엔진 만들기

카사 공개 세미나 2

최지호

• 현 SK C&C 재직• 엔씨소프트 미국 오스틴 지사 : 엔진팀• 엔씨소프트 : 알터라이프 (MMO),

L3(MMO) 참여• 트리거소프트 : 로즈온라인 (MMORPG)

엔진 개발

Page 3: 취미로 엔진 만들기

카사 공개 세미나 3

게임 엔진이란 ?

• 여러 게임 개발에 공통적으로 사용할 수 있는 소스 코드 , 툴 , 문서

• 게임에 중요한 역할–게임의 성능–게임의 퀄리티–개발 생산성

Page 4: 취미로 엔진 만들기

카사 공개 세미나 4

“ 취미로”의 의미 ?

• 남이 시켜서가 아닌 자발적으로• 생산적이든 아니든 간에• 여가 시간에• 꾸준히• 즐긴다

Page 5: 취미로 엔진 만들기

카사 공개 세미나 5

웬 엔진 개발 ?

• 좋고 싼 상용 / 공개 엔진 많은데 ?• 하고 싶은 걸 하려면 뜯어 고칠 게 많음– 뜯어 고치다 보면 시간이 많이 소요– 그 시간에 차라리 만들걸…

• 내 맘대로 쉽게 이것 저것 해보고 싶다• 이직할 때마다 엔진 새로 배우기 싫다• 엔진 공부 상용엔진을 쓰더라도 도움됨• 쉽지 않아 도전의식 생김• COOL 해 보임 !

Page 6: 취미로 엔진 만들기

카사 공개 세미나 6

왜 하필 취미로 엔진 개발 ?

• 원래 목적은 게임 개발이었음• 엔진부터 시작하다가• 엔진 개발 자체가 즐거움–도전할 거리가 많고–다양한 경험을 할 수 있고–남들 다 하는 건 아니고

• 별다른 취미가 따로 없어서

Page 7: 취미로 엔진 만들기

카사 공개 세미나 7

목표

• 가볍고 , 쉽고 , 빠른 경량급 엔진–직관적인 설계–쉬운 인터페이스–꼭 필요한 기능만

• 구체적이고 정량적인 목표–언제까지 완성 ?–팔게 된다면 목표 매출액 ?–성능목표 ? 퀄리티 목표 ? 주요 장르는 ?

–미정 !!!

Page 8: 취미로 엔진 만들기

카사 공개 세미나 8

참여 인원

• 아직까지는 1 인 개발–단 , 리소스는 지인들의 도움

• 다른 사람의 간섭이 없음• 마음대로 엎을 수 있음• 나중에는 함께 개발할 예정

Page 9: 취미로 엔진 만들기

카사 공개 세미나 9

개발 시간

• 매일 꾸준히 ( 희망사항 )–출근 전 1 시간–퇴근 후 2 시간 ( 칼퇴근하면 3~4 시간 )–밤중 개발 ( 애 깨면 재운 뒤 )

• 주말 시간 활용–토요일 / 일요일 오전 4 시간• ( 늦잠 자던 시간 활용 )

–낮잠 주의 !

Page 10: 취미로 엔진 만들기

카사 공개 세미나 10

개발 장소

• 회사 내에서는 작업금지 !–취미가 아닌 게 되어 버림–눈치 보임–회사에 뺏길 수 있음–회사에서는 회사일에만 충실 !

Page 11: 취미로 엔진 만들기

카사 공개 세미나 11

개발 장소 .

• 집에서–혼자 사는 경우• 주위의 방해가 거의 없음• 대신 , 잠도 잘 옴

–신혼 / 애기 있는 경우• 매우 힘듦 . 모두 잠든 밤에나 가능• 배우자의 허락을 득해도 눈치 보임

–집에서는 화목하고 편안한 가정생활에 충실하고 , 집 밖에서 개발 권장 !

Page 12: 취미로 엔진 만들기

카사 공개 세미나 12

개발 장소 ..

• 모임 전문 공간– 토즈 (www.toz.co.kr) 추천– 1 인 두 시간에 5 천원– 인터넷 , 음료수 공짜– 단 , 모든 지역에 있는 건 아님

• 커피숍– 매우 시끄러움 ( 헤드폰 필참 )– 화장실 갈 땐 , 노트북 주의– 전원 콘센트 없는 곳 많음 ( 항시 충전 100%)

• 그 외– 도서관 , 독서실 : 키보드 타이핑 어려움– PC 방 : 담배연기

Page 13: 취미로 엔진 만들기

카사 공개 세미나 13

도구

• 개발 장비– 노트북 : 자가용 출근 아니라면 , 가볍고 성능 좋은 걸로

( 단 , 비쌈 )

• 개발 도구– 소스 컨트롤

• 혼자서라지만 백업 / 히스토리 유지• Perforce : 2 인까지 공짜• SVN, Mercurial 등 오픈소스툴• Bitbucket.org 등 공짜 /비공개 서버 활용

– 비주얼 스튜디오 익스프레스• 공짜 , 상용 어플 개발 가능• 플러그인 /MFC 빼면 그닥 불편한 거 없음

Page 14: 취미로 엔진 만들기

카사 공개 세미나 14

엔진의 구성• CoreEngine

– Core : 기본 모듈– Engine : 그래픽 및 씬그래프– Gui : GUI

• Games– SandBox : 샘플 게임

• Tools– Batcher : 각종 커맨드라인 툴– Viewer : 모델 /씬 뷰어– Tester : 단위 테스팅– Exporter : Collada 파일 변환

• Documents– 각종 개발 관련 문서들

Page 15: 취미로 엔진 만들기

카사 공개 세미나 15

엔진의 구성 (Core)

• 기본 컨테이너 클래스 (Array, List, Stack, HashMap, Blob, Iterator등 )

• Math 라이브러리• Memory Pool 관련• String, Name, Guid 등• 파일 I/O, 패키징 시스템 , Serialization 등• 리소스 관리• OS 관련 (Thread, CriticalSection, Timer,

DateTime 등 )

Page 16: 취미로 엔진 만들기

카사 공개 세미나 16

STL 안 쓴 이유 ?

• 콘솔에서는 STL 이 완전치 않아서– 아직 직접 경험해 보지는 못했음– NDS 쪽에는 버그가 많다 ?

• 직접 만들면 더 빠르고 메모리 덜 쓸 것 같아서– 속도는 별 차이 없었음– 메모리 사용량은 차이가 좀 남

• 컴파일 타임 꽤 차이 남• 컨테이너를 내 맘대로 할 수 있어서 좋음– 컨테이너에 Serialization 등 추가 용이

• EA 도 만들어 쓰지 않던가 ? EASTL

Page 17: 취미로 엔진 만들기

카사 공개 세미나 17

GUID

• 모든 리소스들은 GUID를 가짐• 컴파일 옵션에 따라– 32bit 작은 GUID 사용 : 3F-25-04-E0– 16바이트 표준 GUID 사용• 3F2504E0-4F89-11D3-9A0C-0305E82C3301

• 리소스 Serialization 시에 포인터 대신 GUID 저장

Page 18: 취미로 엔진 만들기

카사 공개 세미나 18

Page 19: 취미로 엔진 만들기

카사 공개 세미나 19

엔진의 구성 (Engine)

• 카메라 /뷰• 애니메이션 / 스키닝• 메시 / 폰트 / 라인 / 구 /박스 등 렌더링• 애플리케이션 프레임웍• 메시 /머티리얼 / 모델• 셰이더 /셰이더이펙트 /셰이더파라미터• 버텍스 / 인덱스버퍼 /텍스쳐 등 리소스

Page 20: 취미로 엔진 만들기

카사 공개 세미나 20

Page 21: 취미로 엔진 만들기

카사 공개 세미나 21

Shader Effect 시스템

• DirectX 의 .FX 와 유사– 멀티 플랫폼 염두

• JSON 포맷 사용– XML 에 비해 사이즈 작음– 파싱 속도 빠름– 파싱 코드 단순

• .FX 나 .CGFX 에 비해 자체 속성 추가 용이– 덜 지저분함

Page 22: 취미로 엔진 만들기

카사 공개 세미나 22

Gui

• 텍스트 렌더링 (FreeType)• 버튼 , 이미지 , 레이블 , 윈도우• ( 설명할 만한 게 아직 별로 없음 )

Page 23: 취미로 엔진 만들기

카사 공개 세미나 23

Batcher

• 각종 커맨드 라인 프로그램들• 단일 프로그램 . 옵션에 따라 여러

다른 JOB 수행 • 예 )– 셰이더 컴파일– 패키징 파일 압축 / 해제– 기본 리소스 생성

Page 24: 취미로 엔진 만들기

카사 공개 세미나 24

Tester

• 빌드 후 자동으로 수행되는 테스트• Googletest 와 유사• 이미지 비교 테스트도 있음

– 픽셀 단위 비교– 렌더링된 이미지의 결과 확인용– 이미지 라이브러리는 사용 안함 .RAW– 눈으로 확인 시 ImageMagick 활용

• 혼자 개발할 때 자동 테스트는 필수– 아무도 버그를 알려 주지 않음

Page 25: 취미로 엔진 만들기

카사 공개 세미나 25

Exporter

• COLLADA 포맷 사용• 바이너리 포맷이 변경되어도 다시

원본으로부터 포맷 재변환 용이• 스키닝 및 재질 관련 속성 지원• DCC 툴 의존적이지 않음 ( 오픈포맷 )

• XML 파싱 자체 개발 비추 ( 버전 달라질 때 귀찮았음 )

• XML 이라 파일 크기가 큼

Page 26: 취미로 엔진 만들기

카사 공개 세미나 26

리소스 조달

• 프로그래머가 만든 아트리소스는 안 이쁨• 지인 활용–잘하는 아티스트와는 평소 인간관계를 돈독히

• 공개 리소스 활용–대부분 별로임…– Sketchup 3D Warehouse• 텍스쳐만 빼면 좋은 모델 더러 있음• http://sketchup.google.com/3dwarehouse/

Page 27: 취미로 엔진 만들기

카사 공개 세미나 27

리소스 조달 .

• 리소스 구입– http://www.daz3d.com/– http://turbosquid.com/– http://www.gamesource.co.kr– http://www.garagegames.com/products/

browse/artpacks

Page 28: 취미로 엔진 만들기

카사 공개 세미나 28

엔진 스샷

Page 29: 취미로 엔진 만들기

카사 공개 세미나 29

결론

• 회사 / 가정생활 충실하면서 여가 시간을 잘 활용하자

• 엔진 개발은 재미있다• 발표나 블로깅은 개발 촉진제

Page 30: 취미로 엔진 만들기

카사 공개 세미나 30

질문 /답변

• 연락처 :– [email protected]– http://zho.pe.kr