2016년 4월 27일, NDC2016 발표자료입니다.
전통적인 콘텐츠 생산은 기획자, 개발자가 하나하나 컨트롤해야 하는 노동집약적 산업입니다. 저 또한 처음에 입사했을 때 출시를 위해 며칠 만에 이백여 개가 넘는 맵을 찍어야 했던 아픔이 있습니다. 그 뒤에도 플레이어들을 위한 콘텐츠 생산은 계속되었지만, 플레이어들의 콘텐츠 소비 속도는 생산 속도를 뛰어넘은 지 오래되었습니다. 대안은 로그라이크 같은 장르에서 널리 쓰이는 Procedural Contents Generation이라고 생각합니다. 외국 인디 씬에서는 이미 많이 사용되고 있는 이 방법에 최근 점점 더 많이 사용되고 있는 신경망을 활용해서 색다른 콘텐츠 생산 기법을 소개하려 합니다.
7. PCG
• 절차(알고리즘)으로 컨텐츠를 만드는 방법
http://www.gamasutra.com/blogs/AAdonaac/20150903/252889/Procedural_Dungeon_Generation_Algorithm.php
8. PCG
• 손으로 하나하나 튜닝하는 것에 대비됨
http://boingboing.net/2015/06/16/super-mario-maker-design.html
http://www.howtogeek.com/94977/infinite-mario-is-an-endless-super-mario-3-game-in-your-browser/
18. 신경망
• 전통적인 문제 해결법으로 풀 수 없는 문제들을 풀거나, 성능을 개선하기 위해 사
용됨
• 최근 급격한 발전으로 다양한 분야에서 엄청난 성능을 보임 (ex. 알파고)
http://www.33rdsquare.com/2013/06/stanford-researchers-and-google-create.html
23. 신경망의 구조
• 뉴런 (Neuron)
• 신경망의 기본 단위
• 생물체의 신경 세포인 뉴런을 모사
http://www.slideshare.net/jbhuang/lecture-29-convolutional-neural-networks-computer-vision-spring2015
24. 신경망의 구조
• 층 = 레이어 (Layer)
• 뉴런을 여러 개 모아놓은 것
• 입력/출력 구조
• 입력층과 출력층에 뉴런을 배치
• 입력층에서 받아온 정보를 가공해서 출력층에 전달, 출력
• 원하는 값이 나오도록 신경망을 학습시킴
39. Feature Extraction
전통적 알고리즘의 문제점
1. 전문적 지식 필요
2. 수행에 시간이 오래 걸림
3. 다른 도메인에 일반화하기 힘듦
http://www.slideshare.net/zukun/eccv2010-feature-learning-for-image-classification-part-0
44. SRPG
• 전략적인 면이 강조된 (턴제) RPG
• 영걸전, 디스가이아, 창세기전 등
• 맵 형태가 전략성의 핵심
http://www.urbandictionary.com/define.php?term=SRPG
45. SRPG 맵 생성/평가
• SRPG 맵 생성 : PCG (Flash)
• SRPG 맵 평가 : 딥러닝 (Python)
46. SRPG 맵 평가 - 전통적 알고리즘
• 움직일 수 있는 타일 판단 : DFS
• 병목(choke point) 판단
• 막다른 길(dead end) 판단
• 저격 위치(sniper location) 판단
47. SRPG 맵 평가
• 전통적 알고리즘으로 하기 힘든 것
승률 예측, 유닛 퍼포먼스 – K/D 예측 등
• 보통 수백~수천 번의 시뮬레이션을 돌려서 평균값을 내서 계산
• 시뮬레이션 없이도 평가가 가능할까?
48. 문제 공간
• 20 x 20 타일 맵 (2D)
• 지형은 Grass, Cliff, Water 의 3종
• 유닛은 타워, 보병, 궁병, 기병의 4종
• 1 : 1 PvP
• 상대편 타워의 HP를 먼저 0으로 만들면 승리
• 반대의 경우 패배
• 승패 없이 30턴이 지나면 무승부
49. 지형
Grass (+Rock) Cliff Water
이동 가능 이동 불가 이동 불가
- 큰 덩어리 얇게 퍼질 수도 있음
Image Resource from : http://opengameart.org/content/2d-lost-garden-zelda-style-tiles-resized-to-32x32-with-additions
http://opengameart.org/content/2d-lost-garden-tileset-transition-to-jetrels-wood-tileset
50. 유닛 제원 (Specifications)
보병 궁병 기병 타워
공격력 1 공격력 2 공격력 1 -
이동력 4 이동력 4 이동력 6 -
HP 6 HP 3 HP 4 HP 10
Image Resource from : http://units.wesnoth.org/1.10/mainline/en_US/mainline.html
http://forums.rpgmakerweb.com/index.php?/topic/49063-sythian-bards-world-map-tiles/
51. 유닛 제원 (Specifications)
보병 궁병 기병 타워
-
-
Icon Resource from : http://yanfly.moe/2015/10/23/freebies-mv-ready-ace-icons/
52. 유닛 제원 (Specifications)
보병 궁병 기병 타워
-
-
Icon Resource from : http://yanfly.moe/2015/10/23/freebies-mv-ready-ace-icons/
56. 경험적 유불리
• Blue 유리
• 경로 폭이 좁으면 유리
• 서로 대미지를 줄 확률이 높기 때문에 화력이 높으면 유리
• 경로가 짧으면 유리
57. 경험적 유불리
• Red 유리
• 경로 폭이 넓으면 유리
• 경로가 길면 유리
• 경로가 2개 이상이면 유리
58. 맵 생성 (PCG) 도구
• Actionscript 3.0 (FlashDevelop) 사용
• JSON 으로 데이터 저장
59. 맵 생성 절차 (Procedures)
1. Poisson Disc Sampling 으로 노드 추출
2. Minimal Spanning Tree 으로 노드 간 간선 추출
• 노드의 간선이 하나면 터미널 노드로 지정
3. 지형 배치
• 터미널 노드에 장애물(Cliff, Water) 생성
• 가까운 장애물은 Cellular Automata 로 서로 합침
4. 다시 Poisson Disc Sampling 으로 메인 경로 추출
5. 메인 노드 정하고 유닛 배치
77. 신경망 구성
• 5 x 20 x 20 Input Layer
• 32 x 18 x 18 Convolutional 2D Layer 1
• 32 x 9 x 9 Max Pooling Layer 1
• 64 x 8 x 8 Convolutional 2D Layer 2
• 64 x 4 x 4 Max Pooling Layer 2
• 256 Dense Layer 1
• 256 Drop Out Layer 1
• 256 Dense Layer 2
• 256 Drop Out Layer 2
• 1 Output Layer
Reference - http://danielnouri.org/notes/2014/12/17/using-convolutional-neural-nets-to-detect-facial-keypoints-tutorial/
http://blog.christianperone.com/2015/08/convolutional-neural-networks-and-feature-extraction-with-python/
Image
Conv/Pool
Conv/Pool
Dense
Drop out
Dense
Drop out
Regression
78. 신경망 구성
• Learning parameters = 338,177
Input
5x20x20
Conv
32x18x18
Pool
32x9x9
Conv
64x8x8
Pool
64x4x4
Dense
256, 256
Drop out
256, 256
Output
1
79. Input Layer
• 5 x 20 x 20 Input Layer
• 데이터를 discrete 하게 단순화
20 pixels
80. 지형 보병 궁병
기병 타워
Input Layer
지형과 유닛을 각각의 채널로 분리 (5 channels)
Reference - http://cs231n.stanford.edu/reports/ConvChess.pdf
81. Input Layer
• 지형 Input Data (0~15번 Map)
• Grass = 0.0 (Black)
Cliff = 1.0 (White)
Water = 0.8
• Cliff 와 Water 는 이동을 막는다는 유사성이 있어서
채널을 분리할 때보다 합칠 때 결과값이 좋았음
82. Input Layer
• 궁병 Input Data (0~15번 Map)
• Blue team = +1.0 (White)
Red team = -1.0 (Black)
Empty = 0.0
83. Convolutional 2D Layer
• 32 x 18 x 18 Convolutional 2D Layer 1
• 64 x 8 x 8 Convolutional 2D Layer 2
• 포토샵 등에 있는 이미지 필터
• 경계선 검출 등에 쓰임
http://www.cas.miamioh.edu/~meicenrd/anatomy/ch14_independentinvestigation/imagej/ij-
docs/ij-docs/docs/menus/process.html
90. Max Pooling Layer
• 32 x 18 x 18 Convolutional 2D Layer 1
• 32 x 9 x 9 Max Pooling Layer 1
• 64 x 8 x 8 Convolutional 2D Layer 2
• 64 x 4 x 4 Max Pooling Layer 2
• Subsampling 기법
• 인접한 셀은 비슷한 정보를 갖기 때문에 압축으로
효율을 높임
http://ufldl.stanford.edu/tutorial/supervised/Pooling/
91. Max Pooling Layer
• Pool1 : 18 x 18 → 9 x 9 (with 2x2 window)
• Pool2 : 8 x 8 → 4 x 4 (with 2x2 window)
Conv1 Pool1
92. Max Pooling Layer
• Pool1 : 18 x 18 → 9 x 9 (with 2x2 window)
• Pool2 : 8 x 8 → 4 x 4 (with 2x2 window)
Conv1 Pool1
94. Drop Out Layer
• 256 Dense Layer 1
• 256 Drop Out Layer 1
• 256 Dense Layer 2
• 256 Drop Out Layer 2
• Overfitting 을 방지하는 역할
• 일정 확률로 학습을 건너뜀
95. Drop Out Layer
• 256 Dense Layer 1
• 256 Drop Out Layer 1
• 256 Dense Layer 2
• 256 Drop Out Layer 2
• Overfitting 을 방지하는 역할
• 일정 확률로 학습을 건너뜀
https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf
96. Output Layer
• 1 Output Layer
• X (2D 타일 맵)에 대한
y (승률)을 0.0~1.0 범위로 출력
학습
예측
??? %
71.3%