40
Creating 3D Game Client Program With Project Anarchy - Part 3. 움직여라 움직여 - NHN NEXT 1기 실전프로젝트 산출물 실습 업체 블루홀 스튜디오 프로젝트 팀명 그랜드부다페스트(문진상/신동찬) 작성자 신동찬 Created Date 2015-01-05

Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Embed Size (px)

Citation preview

Page 1: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Creating 3D Game Client Program

With Project Anarchy

- Part 3. 움직여라 움직여 -

분 류 NHN NEXT 1기 실전프로젝트 산출물

실습 업체 블루홀 스튜디오

프로젝트 팀명 그랜드부다페스트(문진상/신동찬)

작성자 신동찬

Created Date 2015-01-05

Page 2: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

다시 한 번 말씀 드리지만

Anarchy Project에서 추천하는 방법은 아닙니다

단,

1. C++로 엔진 활용 기법을 학습하고 싶다(우리 같이)2. C++은 알고 있는데 파이프 라인 등을 몰라 게임을 못 만든다3. 과거 Vision 엔진 대비 요즘에 어떻게 바뀌었나 대략적으로 보고 싶다

등의 이유를 가지고 계신 분은 vForge 없이 개발하는 방법에 참여하세요

Page 3: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

자료를 읽기에 앞서 알아야 할 것

이번 강의에서 당신이 자료에서 참고하거나 배울 수 있는 것

기대했을 수 있지만 자료에 없는 내용

- C++ 사용 방법- Lib, DLL 개념 및 사용 방법- Project Anarchy 설치 및 세팅( http://www.slideshare.net/ssusere4785c/project-anarchyvision-engine-part1 )- UDP 네트워크 통신- 렌더링 파이프라인

- Project Anarchy를 과거 Vision Engine 처럼 사용하는 법- 윈도우 프로세스로 프로그램 수행- 리소스 파일에 대한 정보- Picking- Character Move

- vForge를 활용한 게임 개발- Engine Plugin 및 Component 를 활용한 게임 개발- GUI 시스템

Page 4: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

본 자료에서 사용하는 파일 위치는 Default 설치 위치를 기반으로 함

기본 설치 위치C:\Havok\2014.1.0\AnarchySDK\

Project Anarchy 사용을 위해서는 vforge를 우선 실행해야 함

Project Anarchy는 무료로 사용 가능한 대신 몇 가지 제약 사항이 존재본 실습 과정은 vforge를 실행한 것을 기본으로 한다

< vForge 미실행시 발생하는 error >

Visual Studio 2010 기준으로 설명

Project Anarchy는 Visual Studio 2010 기준으로 실행 됨Visual Studio 2013에서 실행 하기 위해서는 2010이 설치 되어 있어야 함

Page 5: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Model File?

Page 6: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Model file?

Cube.Model을 만들면 텍스쳐까지 입혀져 있는 3D objec가 나타나는 것을 확인할 수 있음과연 *.Model은 뭐지?

# 기본 제공 모델# havoc 설치 폴더에서 더 찾으면 샘플 코드 등에서 많은 model이 나온다

Page 7: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Model file?

모델과 관련 된 텍스쳐, 애니메이션 정보를 통합해서 읽어들이는 Vision 엔진 파일 형식

텍스쳐 등은 xml 파일로 통합 관리되며,animation file은 별도 *.anim 파일로 관리

Page 8: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Model 만들기

Pass !

공부는 샘플로도 충분합니다

Page 9: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Place Entity

Page 10: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Place Entity Like Game

이렇게 배치하고맵 상에서 움직이면 그럴싸 하겠네!

Page 11: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Place Entity Like Game

앞서 배운 지식 총 동원하면 이해할 수 있는 코드

Page 12: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Place Entity Like Game

모델 포지션 설정 후 entity 생성에서 활용

Vision RTTI 활용 entity 생성

입력되는 entity에 대해“Walk” animation을표준속도(1.0f)로 Loop(무한 반복)함

사실은 땅이 아니라 큐브를 잡아 늘려 평평한 대지처럼 만든 것

Page 13: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Place Entity Like Game

다시 잘 보니 중앙에 원형으로 빛이 있는데?

Page 14: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Place Entity Like Game(Lighting)

Vision::Game 은 전체 entity control과 일반기능 함수를 포함Light도 entity와 유사한 방식으로 바로 생성 가능

Page 15: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Place Entity Like Game(Lighting)

Light 포지션 설정 후 Light 생성에서 활용두 번째 포지션은 참고 코드

Light 타입 설정(point 외에도 direction 등 enum으로 되어 있음)

Light 강도를 높여주는 계산(승수 증감)

Light 크기 결정

Page 16: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Place Entity Like Game

이번 SubPart에서 소개한 내용은어디에서 수행되어야 할 것인가?Part 2에 답이 있다!

AfterEngineInit()에서 수행되는 것

Page 17: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Picking

Page 18: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Rendering Pipeline

* NHN NEXT Computer Grapics 수업자료 인용(2013, 임석현 교수)

World 좌표 상의 3D 물체가 화면에 보여지는 과정4번의 Transformation 존재

그 중 Model Transformation은 무의미 하기에관련 있는 Transgormation 3번

Page 19: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Picking

최초 2차원 좌표였던 것을각 변환 행렬을 곱해 3차원 world 좌표로 만듦

자세한 설명은 생략

Page 20: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Picking

요즘 게임에서 Picking은 거의 기본적으로 사용됨(키보드 전용 게임 제외)따라서 Vision 엔진에서도 기본적으로 제공하고 있음TraceLine 함수가 그것

Page 21: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Picking

하지만 그것이 함정다음의 이유로 시간이 꽤 많이 소비

1. 유사 기능 함수가 하나 더 있었음2. Entity에 별도 설정이 필요함3. Entity와 mesh(삼각형 덩어리)를 구분해서 사용해야 함

Page 22: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Picking

결과적으로 우리 프로젝트에서는Entity Picking과 지형(static mesh) Picking이 모두 필요해둘 다 사용하는 중

TraceLineEntities()TraceLine()

Page 23: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Entity Setting

Entity의 충돌 검출은 TraceAccuracy 설정값에 영향을 받음

Entity는 충돌체가 아닌 것이 기본 설정(생성시 Trace 안되도록 설정되어 있음)

따라서 Picking이 되게 하기 위해서는 Entity에 해당하는 충돌 박스를 만들어 줘야 함Get,Set으로 확인 및 설정이 가능함

본 프로젝트에서는 AABB BOX로 진행

Page 24: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

TraceLineEntities()

Vision Engine에서는 생성된 Entity를 Collection으로 통합 관리 함해당 Entity Collection 중에서 현재 화면에 Visible 상태인 Entity를 별도로 가져와 목록화 가능

LineTrace를 수행하되 해당 목록에 충돌 되는지 확인

충돌이 일어나면 m_lastTraceInfo(VisTraceLineInfo_t struct)에 해당 충돌체 정보 값을 넣어 줌

그냥 LineTrace로는 백날 해도 안 됨

Page 25: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

TraceLine()

Height map 추가에는 Entity가 아니라 Static Mesh를 사용Static Mesh 충돌 검출에는 TraceLine을 사용하면 됨

Page 26: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Orbit Camera

Page 27: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Need solid view Point

예제로 사용되는 카메라는 너무 정신없다마우스 움직일때 움직이는 fps용 카메라

우리는 RPG를 위한 고정 카메라가 필요하고마우스 포인터를 이용해 해당 위치를 찍으면 이동했으면 했다

Page 28: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Need solid view Point

요런 스타일 있잖아요

* Anarchy Project 대표 샘플 “RPG”

Page 29: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Orbit Camera

특정 entity 를 기준으로 설치되며해당 entity 를 쫓아 다니는 카메라entity 없이는 호출이 안 되는 카메라

Page 30: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Orbit Camera

초기 카메라 위치, 각도 세팅

마우스 스크롤로 줌 가능

대상 entity 추적

카메라도 충돌체 설정(아니면 물체 뒤로 가는 경우...)

카메라와 entity 사이의 거리

Page 31: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Mouse Pointer

Page 32: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Where is Mouse Pointer?

C++ 세계에선 공짜가 없듯Vision 엔진도 전부 공짜로 뭐 해주는 건 없다

Mouse는 overlay로 화면에 그려내야 한다문제는 그리는 타이밍인데...

그 문제는 다음 시간에 다루도록 하며여기에서는 일단 어떻게 나오도록 하는지에 집중

Page 33: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Mouse Point

게임 엔진답게(?!) Vision Engine에서는 input 받는 것을 전부 통합 관리한다VInputManager를 통해 관리되는 것들을 받을 수 있음

GetMouse(): 마우스 내놔GetRawControlValue(): 인자를 받아 x, y 값을 선택적으로 내놔

m_MousePosition은 hkvVec2(2차원 벡터)

Page 34: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Mouse Pointer

앞서 받은 mousePointer 정보 값을 활용화면에 Texture를 그대로 overlayRendering 하면 됨

Page 35: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Mouse Pointer

사실 이 부분은 매 Tick마다 불러져야 화면에 계속 노출따라서 Vision Engine에서 제공하는 Callback 함수를 활용

OnRenderHook은 화면이 그려지는(Render)되는 매 Tick마다 불려짐

Page 36: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Mouse Pointer

Vision Engine에서는 RenderLoop에도 추가로 절차를 계속 줄 수 있음RenderHook callback으로 계속 Renderer를 붙여나가면 추가 렌더링 가능

이 함수는 가장 마지막에 추가해 항상 맨 위에 그려지도록 함(part4 참고)

Page 37: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Moving Entity

Page 38: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Moving Entity

Main Loop가 어디인지 알고Entity Position Setting 방법 알면사실 이미 끝났습니다

매 루프마다 조금씩 이동하도록 하면 되니까요

그래서 참고 코드로 대신하고자 합니다

Page 39: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

Moving Entity

이동의 핵심은 이전 Tick과 현재 Tick 사이의 시간을 측정해Entity가 움직이려는 방향으로 시간만큼 진행시키는데 있음

방향 설정에서 사용된 m_calcedPathList는길 찾기 알고리즘 결과 나온 결과 값

Page 40: Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여

- Part 4. Network / Memory Management -

The NEXT