[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
펄어비스의 MMORPG, 검은사막에 적용되어있는 AI 네비게이션 기능은 VOXEL 기반으로 자체 개발한 엔진을 이용해 구현되어 있습니다. 기존의 대다수 상용 라이브러리들이 네비 메쉬라고 하는 이동가능한 평면을 표현하는 폴리곤 기반의 데이터를 이용해 길찾기를 수행해주는 것에 비해 근간이 다릅니다. 이 강연에서는 검은사막의 네비게이션 엔진을 구현하고, 서버 / 클라이언트에 적용하면서 얻게된 노하우와 적용된 결과물들을 소개합니다.
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
펄어비스의 MMORPG, 검은사막에 적용되어있는 AI 네비게이션 기능은 VOXEL 기반으로 자체 개발한 엔진을 이용해 구현되어 있습니다. 기존의 대다수 상용 라이브러리들이 네비 메쉬라고 하는 이동가능한 평면을 표현하는 폴리곤 기반의 데이터를 이용해 길찾기를 수행해주는 것에 비해 근간이 다릅니다. 이 강연에서는 검은사막의 네비게이션 엔진을 구현하고, 서버 / 클라이언트에 적용하면서 얻게된 노하우와 적용된 결과물들을 소개합니다.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
언리얼 엔진 프로그래밍을 시작하면, 편리하지만 한편으로는 골치아픈 UObject 시스템을 만나게 됩니다.
이 발표에서는 C++ 프로그래머를 대상으로 UObject 시스템과 그 핵심 기능인 리플렉션, 가비지 컬렉션을 소개하고 그 동작 원리를 함께 들여다봅니다.
목차
1. 일반적인 리플렉션의 개념
2. 언리얼엔진의 리플렉션
3. 일반적인 가비지컬렉션의 개념
4. 언리얼엔진의 가비지 컬렉션
대상
- C++ 개발자
- 언리얼 C++ 프로그래밍에 관심 있는 분
■관련 동영상: https://youtu.be/VpEe9DbcZIs
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
언리얼 엔진 프로그래밍을 시작하면, 편리하지만 한편으로는 골치아픈 UObject 시스템을 만나게 됩니다.
이 발표에서는 C++ 프로그래머를 대상으로 UObject 시스템과 그 핵심 기능인 리플렉션, 가비지 컬렉션을 소개하고 그 동작 원리를 함께 들여다봅니다.
목차
1. 일반적인 리플렉션의 개념
2. 언리얼엔진의 리플렉션
3. 일반적인 가비지컬렉션의 개념
4. 언리얼엔진의 가비지 컬렉션
대상
- C++ 개발자
- 언리얼 C++ 프로그래밍에 관심 있는 분
■관련 동영상: https://youtu.be/VpEe9DbcZIs
최근 IT업계에서는 딥러닝에 대한 큰 활약이 이슈화 되고 있습니다.
이와 같은 트렌드에 따라가고 싶지만 선형대수 등의 수학적 배경지식 습득부터 시작하여, 딥러닝의 원리와 주요 개념들을 이해 후에 실험을 시도하기에는 많은 시간과 노력이 필요합니다.
그러나 기존의 유용한 딥러닝 오픈소스를 활용한다면 어렵지 않게 딥러닝을 맛볼 수 있습니다.
본 발표는 수학적인 설명을 최대한 배제하고, 오픈소스 툴인 theano, pylearn2를 활용한 예제에 대해 설명하려고 합니다. 추가로 필요할 코드들도 소개하려고 합니다.
그리고 word2vec 를 활용하여, 자연어 처리에 딥러닝을 적용하는 사례를 다루려고 합니다.
주제가 학문적이고 이론적이기 때문에 발표가 부담되지만, 최대한 개념적으로 설명하여 실험을 쉽게 따라 할 수 있도록 돕고자 합니다.
오픈소스 툴들의 문서화가 잘 되어있지만, 저 또한 처음 접했을 때는 어려움이 있었기 때문에 딥러닝을 시작해보려는 분들에게 도움이 될 듯합니다.
컴퓨터가 딥러닝하는 동안 틈틈이 이론공부 하시면 좋겠네요.
48. 게임 오브젝트와 네트워크 통신
Server
NPC1 Player1 NPC2
Server Server
Server
Object Object
Object
Client Client Client Client Client Client
Object Object Object Object Object Object
NPC1 Player1 NPC2 NPC1 Player1 NPC2
Client Client
49. NPC1 Player1 NPC2
Server Server
Server
Object Object
Object
Server
Base
50. NPC1 Player1 NPC2
Server Server
Server
Object Object
Object
Server
Base
51. NPC1 Player1 NPC2
ID : 0 ID : 1 ID : 2
Server Server
Server
Object Object
Object
Server
Base
52. NPC1 Player1 NPC2
ID : 0 ID : 1 ID : 2
Server Server
Server
Object Object
Object
Server
Base
Client
Base
53. NPC1 Player1 NPC2
ID : 0 ID : 1 ID : 2
Server Server
Server
Object Object
Object
Server
Base
Client
Base
Client Client Client
Object Object Object
ID : 0 ID : 1 ID : 2
NPC1 Player1 NPC2
54. NPC1 Player1 NPC2
ID : 0 ID : 1 ID : 2
Server Server
Server
Object Object
Object
Server
Base
Client
Base
Client Client Client
Object Object Object
ID : 0 ID : 1 ID : 2
NPC1 Player1 NPC2
55. NPC1 Player1 NPC2
ID : 0 ID : 1 ID : 2
Server Server
Server
Object Object
Object
Server
Base
Client
Base
Client Client Client
Object Object Object
ID : 0 ID : 1 ID : 2
NPC1 Player1 NPC2
56. NPC1 Player1 NPC2
ID : 0 ID : 1 ID : 2
Server Server
Server
Object Object
Object
Server
Base
Client Client
Base Base
Client Client Client Client Client Client
Object Object Object Object Object Object
ID : 0 ID : 1 ID : 2 ID : 0 ID : 1 ID : 2
NPC1 Player1 NPC2 NPC1 Player1 NPC2
57. NPC1 Player1 NPC2
ID : 0 ID : 1 ID : 2
Server Server
Server
Object Object
Object
Server
Base
Client Client
Base Base
Client Client Client Client Client Client
Object Object Object Object Object Object
ID : 0 ID : 1 ID : 2 ID : 0 ID : 1 ID : 2
NPC1 Player1 NPC2 NPC1 Player1 NPC2
59. Action과 Message를 연결
Message가 ServerObject/ClientObject에 도착하면 연결된 Action 실행
Network
Action
Manager
생성
Server/ 함수
Client Action
Object
Network - OnRecv
60. 메시지ID + 데이터 타입
메시지에서 사용할 데이터 형식 메시지 타입
선언한 순서로
메시지ID 할당
버퍼에 데이터 넣기
버퍼에서 데이터 꺼내기
61. 액션 실행을 위한 네트워크로 받은
메시지를 받은 엔터티
함수포인터 메시지 버퍼
ServerObject와 연결 ClientObject와 연결
62.
63.
64. 액션과 네트워크 통신의 연결
메시지와 Action의 연결 선언
메시지와 Action의
데이터가 같아야만
컴파일이 된다
메시지와 Action의 연결 정의
77. Entity
Script Controller 정보
Controller
Manager lua_state에 입력
Entity별로
lua table과
lua thread 생성
Controller의 owner로 Controller Instance
EntityWrapper 생성 후 lua table 생성하여
Controller Instance Controller userdata와 연결
lua table에 “owner” Set
83. 어떻게?!
Game Animation Physics Rendering Audio
Loop
84. Set up
Thread1
Game Thread2
Thread0 Thread3
Loop
Process
Result
85. 현재 구조를 보면…
• Controller는 Owner가 가지고 있는 것만 접근
-> Owner의 Component / Controller
• 다른 Entity에는 DoAction으로 할 일 전달
• Entity별로 Controller들 업데이트
Entity별로 Action Queue 처리
Component별로 업데이트
86. 다시 정리해보면
• Entity는 다른 Entity에 직접 접근 X
• Component는 다른 Component에 직접 접근 X
• Entity별로 Controller들 업데이트
Entity별로 Action Queue 처리
Component별로 업데이트
88. Set up
Thread1 Thread2
Thread0 Thread3 Controller
Set up
Thread0 Thread2
Game Thread1 Thread3 Action
Loop
Set up
Thread1
Thread0 Thread2 Thread3 Component
Process
Result