[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템강 민우
본 세션에서는 Protocol:hyperspace Diver의 개발 과정 전반에 대한 포스트 모템을 수행하며 기획적인 부분을 바탕으로 제기된 요구사항에 대응하기 위한 기술적인 이슈에 어떻게 대응하였는지를 살펴볼 예정입니다. 게임을 기획하며 게임에 어떤 기능들이 요구되었으며, 엔진 레벨에서부터 모바일 게임을 개발하는 과정에서 이런 요구사항들에 어떻게 대응하였는지를 살펴봅니다. 게임을 위한 전체적인 설계 및 문제 해결 전략과 각각의 문제 해결 과정에서 세부 내용에 대한 기술적 노하우를 공유합니다.
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템강 민우
본 세션에서는 Protocol:hyperspace Diver의 개발 과정 전반에 대한 포스트 모템을 수행하며 기획적인 부분을 바탕으로 제기된 요구사항에 대응하기 위한 기술적인 이슈에 어떻게 대응하였는지를 살펴볼 예정입니다. 게임을 기획하며 게임에 어떤 기능들이 요구되었으며, 엔진 레벨에서부터 모바일 게임을 개발하는 과정에서 이런 요구사항들에 어떻게 대응하였는지를 살펴봅니다. 게임을 위한 전체적인 설계 및 문제 해결 전략과 각각의 문제 해결 과정에서 세부 내용에 대한 기술적 노하우를 공유합니다.
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016Taehoon Kim
발표 영상 : https://goo.gl/jrKrvf
데모 영상 : https://youtu.be/exXD6wJLJ6s
Deep Q-Network, Double Q-learning, Dueling Network 등의 기술을 소개하며, hyperparameter, debugging, ensemble 등의 엔지니어링으로 성능을 끌어 올린 과정을 공유합니다.
멀티플레이어 게임을 서비스하는 데 필요한 게임 장르별 백엔드 아키텍처에 대한 설명해 드립니다. 기본적인 게임의 상태 동기화 개념과 서버 구성에 관한 이야기, 게임 클라이언트 엔진(Unity, Lumberyard, Unreal Engine 등)에서 제공하는 복제 프레임워크를 통하여 손쉽게 게임 서버를 만드는 방법에 대한 내용을 다룹니다. 또한, 이렇게 만들어진 게임 서버를 Amazon GameLift라는 클라우드 서비스를 통해 DevOps형태의 비용 효율적으로 서비스하는 방법에 대해 소개합니다.
이 자료는 2013년 11월 스마트 앱 개발자 포럼 세미나 발표자료 입니다.
애플사에서 iOS 7용 API로 추가한 Sprite Kit은 주로 게임 개발을 위하여 사용되는 스프라이트 API로 단순한 코딩으로 애니메이션을 쉽게 구현할 수 있습니다.
단 iOS에서 주로 사용되는 UIView 객체에는 적용할 수 없습니다. UIView 객체란 iOS의 UIImage, UIButton 등과 같은 기본 UI 객체입니다. Sprite Kit을 사용하게 되면 파티클 효과, 물리 효과, 스프라이트의 애니메이션 효과를 매우 쉽게 구현할 수 있습니다.
이 자료는 Sprite Kit의 특징과 간단한 샘플 코드를 통해 Sprite Kit을 이해할 수 있도록 하였습니다.
5. Scalable 비동기 서버 만들기
비동기 서버 : 웹 Http통신 으로
C# NancyFx 웹 프레임워크
Scalable한 서버 : AWS 활용
AWS Elastic Beanstalk
Scalable한 read/write를 위한 DB활용 : NoSQL 활용
Amazon DynamoDB
6. AI 만들기
하스스톤 플레이어 AI를 만들자
1. 선택과 상태의 그래프로 만들자
2. 게임의 상태를 수치화하자
3. AI를 최적화하자
7. 선택과 상태의 그래프로 만들자
하스스톤의 그래프 화
하스스톤은 결국 상황 판단과 선택으로 귀결된다.
현재 상태를 시작 정점으로
가능한 선택지를 간선으로
선택으로 만들어지는 가능 상태를 정점들로
8. 게임 상태를 수치화 하자
게임의 상태를 수치로 해석 할 수 있다.
플레이어에게 유리한 정도를 해석하여 숫자로 만들자.
기본적인 환산 기준은 하수인의 공체합
다른 속성들은 변환 가능한 공체 수치로 환산하여 계산한다.
상대와 나의 환산값을 비교하여 현재 상태를 평가한다.
9. AI를 최적화 하자
게임을 그래프화 시키고 각 정점의 가치를 평가할 수 있다.
이제 AI가 해야하는 일은 최적의 길을 찾는 것
시작 정점에서 도달할 수 있는 가장 가치가 높은 정점을 찾는 것
모든 가능한 정점들을 고려하는 것은 지나치게 방대하다.
길찾기를 최적화 하는 것이 필요하다.
10. 길찾기의 최적화
시작 정점으로 부터 고려하는 선택의 깊이(개수)를 제한한다.
상태에 대한 평가는 시뮬레이션을 거치기 때문에 비용이 크다.
선택의 깊이가 늘어날 수록 평가 개수가 지수에 비례하여 증가한다.
성능과 효과를 저울질 하여 적정선의 깊이로 제한한다.
통계적으로 현재 경로의 가능성을 판단하고 가지치기 한다.
11. Server 성능 테스트 결과
1개의 match 요청에 대해서 0.1 ~ 0.3 sec
1개 시뮬레이션 서버 인스턴스(EC2)로 100개 요청 약 60 sec (모두 완료까지)
4개 시뮬레이션 서버 인스턴스(EC2)로 100개 요청 약 5 ~ 7 sec
10개 시뮬레이션 서버 인스턴스(EC2)로 100개 요청 0.5 ~ 1 sec
19. BurnDissolve Shader
구현방식
1. 기본 텍스처와 타는 모양의 텍스처, 그리고 타는 색깔 텍스처를 사용
2. 기본 텍스처를 그릴 때 해당 위치의 타는 모양 텍스처의 색상값을 읽는다.
3. 타는 모양 색상값을 현재 타 들어가는 정도와 비교한다.
4. 비교 값에 따라서 기본 텍스처 대신 타는 색깔 텍스처의 색상을 적용한다.