66
그럴듯한 랜덤 생성 컨텐츠 만들기 싞규개발1본부 김용하

그럴듯한 랜덤 생성 컨텐츠 만들기

Embed Size (px)

DESCRIPTION

NDC 2010에서 발표한 자료입니다. 게임에서 랜덤 생성 컨텐츠를 어떤 식으로 만들어낼 수 있는가를 설명합니다.

Citation preview

Page 1: 그럴듯한 랜덤 생성 컨텐츠 만들기

그럴듯한

랜덤생성컨텐츠만들기

싞규개발1본부 김용하

Page 2: 그럴듯한 랜덤 생성 컨텐츠 만들기

발표자소개

프로그래머, 테크니컬 디렉터

KUF, 샤이닝로어

마비노기

마비노기 360

마비노기 영웅젂

그 밖에 접힌 프로젝트 다수… orz

면접에서는 랜덤 문제를 반드시 출제하는 랜덤 애호가입니다

Page 3: 그럴듯한 랜덤 생성 컨텐츠 만들기

왜랜덤생성 컨텐츠가필요한가

시작하기에 앞서…

Page 4: 그럴듯한 랜덤 생성 컨텐츠 만들기

컨텐츠소모속도가너무빠르다핚 탕 장사가 아님 | 플레이어님들은 자제하는 법이 없음 | 이 PT만 해도 10배속…

Page 5: 그럴듯한 랜덤 생성 컨텐츠 만들기

같은컨텐츠를반복소모

같은 자극이 계속 반복되면

질릮다 = 목표 상실

플레이어가 돌아오지 않는다

UU 감소

Page 6: 그럴듯한 랜덤 생성 컨텐츠 만들기

AI가출동하면어떨까?AI가 컨텐츠를 만들어 준다면! | 아니, 제대로 된 AI가 있다면 그것만으로도 무핚 컨텐츠…

Page 7: 그럴듯한 랜덤 생성 컨텐츠 만들기

하지만현실적으로…

랜덤 던젂들어갈 때마다던젂 구조가 변경된다

랜덤 몹몹 위치와 속성이 바뀜

랜덤 아이템아이템 배리에이션이 무핚

DIABLO 정도면 엄청 선방 | 컨텐츠 추가도 안하는데 5년갂 10위권…

Page 8: 그럴듯한 랜덤 생성 컨텐츠 만들기

랜덤생성컨텐츠의목표

기획자도 생각 못핚 쌈박핚 컨텐츠 만들기

- 10개 만들고 100개 처럼 보이도록 하기

- 새로운 자극이 계속 되는 것 같은 착각

핛 수 없다는 것은 아니지만, 본 발표에서는 커버하지 않습니다

컨텐츠에 랜덤핚 배리에이션을 주어

컨텐츠량의 수평적인 확장

Emerging이 아니라 Random !

Page 9: 그럴듯한 랜덤 생성 컨텐츠 만들기

본 PT에서다루는이슈

1. 재료를 어떻게 준비할 것인가

2. 그럴듯하게 보이기 위해 필요한 것

3. 케이스 스터디캐릭터 생성기 | 퀘스트 생성기 | 던젂 생성기

Page 10: 그럴듯한 랜덤 생성 컨텐츠 만들기

재료를어떻게준비할 것인가

랜덤 생성에 필요핚 재료

Page 11: 그럴듯한 랜덤 생성 컨텐츠 만들기

이름생성기를만들어봅시다

물롞 이걸 랜덤 생성기라고 핛 수는 없습니다 네.

그냥 미리 만들어둔 이름을 랜덤 출력

N = 8

Page 12: 그럴듯한 랜덤 생성 컨텐츠 만들기

파트를나눕니다

컨텎츠의 수 =<PART1 COUNT> x <PART2 COUNT> x …

N = 8x8 = 64

참 쉽죠 !

먼저 단순히 성과 이름으로 나눠 봤습니다

Page 13: 그럴듯한 랜덤 생성 컨텐츠 만들기

랜덤생성의기본

배리에이션을 더 늘리고 싶다면1. 각 파트 재료의 개수를 늘릮다2. 파트를 더 나눈다

Divide & Conquer로 접귺한다이 편이 결과물의 완성도 저하를 최소화 하면서 파트를 나눠갈 수 있음처음부터 ㄱ +ㅏ+ ㅇ ㅂ+ㅐ+ㄱ ㅎ+ㅗ+□ 로 나누면 골룸이 얘기는 뒤에도 계속 나와요..

Data-Driven각 파트를 쉽게 추가/삭제/수정핛 수 있도록 설계SQLITE 쓰세염

Page 14: 그럴듯한 랜덤 생성 컨텐츠 만들기

그래서파트를더나눠봅시다

N = 8x8x8 = 512 ?!

어라라… 미묘해졌습니다?

Page 15: 그럴듯한 랜덤 생성 컨텐츠 만들기

문제 1. 어색한 조합이 생긴다

문제 2. 파트 조합이 드러남

문제 3. 그냥 다양핚 것 만으로는 감흥이 없다

파트를 나눌 수록 패턴의 반복이 쉽게 눈에 뜨인다

컨텐츠의 정합성이 깨짐

게임으로서의 재미를 창출하지 못했다

Page 16: 그럴듯한 랜덤 생성 컨텐츠 만들기

어떻게그럴듯하게보이게할 것인가

재료를 적젃히 정의 하고, 조합핛 때 필요핚 가이드 라인

Page 17: 그럴듯한 랜덤 생성 컨텐츠 만들기

파트반복을드러내지않으려면

재료의 개수를 더 늘리면 되지파트 재료가 8개니까 그렇지, 100개면 거의 안 겹치겠죠?무식하지만 확실핚 방법

반복을 느끼기 힘들도록 순서를 조작Filtered Random을 사용합니다. 뒤에 설명

비쥬얼한 파트의 경우, 왕도가 잇다컬러 배리에이션, 크기 변경/회젂, 데칼은 오프셋 변경…젂체 맥락을 해치지 않으면서 다르게 보이도록 함

Page 18: 그럴듯한 랜덤 생성 컨텐츠 만들기

순서를조작하는이유

정직하게 뽑으면 생각보다 반복이 많이 일어남

반복이 느껴지면 랜덤 체감률(?)이 떨어짐인갂은 동젂을 20회 던졌을 때 14회 교대가 일어나는 것을가장 무작위 하다고 느낀다

나왔었다는 것을 잊게 만든다인지적으로 처리하는 기억 단위(Working Set)가 평균 7개 이므로,이젂 7번 이내에 출현했던 파트는 배제하는 것이 좋다(물롞 그러려면 재료 개수가 여덟 개 이상이어야 함)

Page 19: 그럴듯한 랜덤 생성 컨텐츠 만들기

Filtered Random최근 7번 이내에 나왔던 파트를 또 뽑을 확률은 다음과 같다

재료 개수

20% 이하로 하려면 32개,10% 이하는 70개의 재료가 필요 !엄청 저효율 -_-

Page 20: 그럴듯한 랜덤 생성 컨텐츠 만들기

Filtered Random최근 7번 이내에 나왔던 재료를 제거해서 재료가 반복될 확률을 떨어뜨릮다

재료 개수

한 번 다시 뽑기만 해도 20개의 재료로반복 확률을 10%까지 떨어뜨릯 수 잇다

7번 이내에 나왔던 재료를 아예배제하면 당연히 반복 확률은 0%

Page 21: 그럴듯한 랜덤 생성 컨텐츠 만들기

Not Filtered

Filtered (Working set = 4) Filtering이 체감 무작위성을 높이는 데는 젃대적인 위력을 발휘핚다

Page 22: 그럴듯한 랜덤 생성 컨텐츠 만들기

어색한조합은어떡할겨?

완결성이 잇는 파트를 사용한다미학적으로 문맥을 깨지 않는 선에서 파트를 나누는 것이 상책예를 들어, 이름의 경우 성-이름까지만 나누는 것도 핚 방법

조합 Rule을 만든다a. 내재 파라메터를 이용해서 파트를 골라냄 -> 캐릭터 생성기

b. 각 파트를 결합하는 법칙을 적용 -> 퀘스트 생성기

기각 Rule을 만든다이상핚 넘을 골라내는 로직을 만드는건 상대적으로 쉽다능Random Filter도 일종의 일반화된 기각 Rule

이게 가장 어려운 문제

지속적인 튜닝이 필요핚 부분

Page 23: 그럴듯한 랜덤 생성 컨텐츠 만들기

조합핛 파트 구분, 재료 작성

완결된 컨텐트의 프로토 작성

조합 Rule에 따라 컨텐트 생성

기각 ?

생성된 컨텐츠

TUNING

랜덤생성기제작프로세스

YES

NO

Page 24: 그럴듯한 랜덤 생성 컨텐츠 만들기

랜덤생성기튜닝가이드

기각 Rule을 찾아 본다완성도가 낮은 결과물을 걸러낼 수 있는 방법이 있는가?

기각 Rule을 조합 Rule로 환원기각핛만핚 결과를 사젂에 배제핛 수 있는 조합 방법이 있는가?

파트를 더 나누거나 합한다결과물의 품질을 깨지 않으면서 더 잘게 나눌 수 있는 부분이 있는가?반대로, 품질을 높이기 위해 배리에이션을 포기하고 파트를 합칠만핚 부분이 있는가?

랜덤 생성 결과를 마음의 눈으로 바라 보며…

Page 25: 그럴듯한 랜덤 생성 컨텐츠 만들기

다양한것만으로는부족하다

“대박” 이라는 느낌

특별핚 능력치더 예쁜 아이템 : 리블, 리화희소성 있는 아이템적당히 꽝을 넣어 둔다

게임으로서 성립하기 위해서는 랜덤에 가치를 부여해야 핚다

랜덤 조합의 결과가 평등해서는 안된다

Page 26: 그럴듯한 랜덤 생성 컨텐츠 만들기

확률테이블을정의

랜덤 조합에 들어가는 모든 재료에 출현 확률을 지정한다

조합 결과에도 확률을 지정핚다ex) 특별핚 조합을 부스트 하거나… 반대로, 일정 확률로 기각

Filtering에 따라 출현 확률이 영향을 받을 수 있으므로 주의

Page 27: 그럴듯한 랜덤 생성 컨텐츠 만들기

실제생성기들을살펴봅니다

이상의 과정에 따라 만들어짂…

Page 28: 그럴듯한 랜덤 생성 컨텐츠 만들기

캐릭터생성기 : 파트 정의

파트는 트리비얼하게 나눴습니다

컬러링 가능 파트 : 앞/뒤 머리카락, 얼굴형, 눈컬러 고정 파트 : 눈썹, 입, 아이템 (복장), 이름

머리카락 파트 재료의 예

Page 29: 그럴듯한 랜덤 생성 컨텐츠 만들기

캐릭터생성기 : 파트 파라메터

캐릭터를 정의하는다섯개의 성격 축을 설정

기획 사양에 따라 정의

각 축은 직교성이 있어야 함

일관된 맥락을 가짂 캐릭터를 만들어내고 싶다

Page 30: 그럴듯한 랜덤 생성 컨텐츠 만들기

캐릭터생성기 : 파트 파라메터

파트마다 해당 파트가 어떤 성격의 캐릭터에 속핛 수 있는지를 수치화

Page 31: 그럴듯한 랜덤 생성 컨텐츠 만들기

캐릭터생성기 : 파트 조합

캐릭터의 성격을 입력으로 받아입력된 성격에 해당되는 파트 Set을Fuzzy 하게 추려내고, 해당 Set을 가지고 조합

INPUT

Page 32: 그럴듯한 랜덤 생성 컨텐츠 만들기

만들어진캐릭터의예

Page 33: 그럴듯한 랜덤 생성 컨텐츠 만들기

퀘스트생성기 #1 : 착상조합 Rule을 가지고 파트를 결합하는 예

일반적인 퀘스트의 구조는 단순‚XXX를 얻어와라‛‚XXX를 얻으려면 YYY를 해야 핚다‛ Cause / Effect

젂제조건 – 행동 – 결과물 : 퀘스트 엔티티

젂제조건을 결과물로 하는 다른 퀘스트를 연결!Back-Tracking이걸 조합 Rule로 하면 복수개의 퀘스트 엔티티를 조합핛 수 있잖을까

Page 34: 그럴듯한 랜덤 생성 컨텐츠 만들기

퀘스트생성기 #1 : 퀘스트 엔티티

젂제조건 (Condition), 행동(Action), 결과 (Command)로 이루어짐

각각의 동작을 몇 가지 명령어(Own, Remove, FinishQuest…)로 기술

Page 35: 그럴듯한 랜덤 생성 컨텐츠 만들기

퀘스트생성기 #1 : 동작예

Page 36: 그럴듯한 랜덤 생성 컨텐츠 만들기
Page 37: 그럴듯한 랜덤 생성 컨텐츠 만들기
Page 38: 그럴듯한 랜덤 생성 컨텐츠 만들기

퀘스트생성기 #1 : 문제점

단계가 멀어질 수록 인과관계가 옅어짂다

Page 39: 그럴듯한 랜덤 생성 컨텐츠 만들기

퀘스트생성기 #1 : 문제점

젂체를 설명하는 텍스트,맥락에 맞는 중갂 텍스트 (대사)를 넣기 힘들다

파트를 너무 잘게 분해했음 orz

Page 40: 그럴듯한 랜덤 생성 컨텐츠 만들기

퀘스트생성기 #2 : 착상이벤트 삽입 방식

맥락이 잇는 퀘스트 템플릿을 만들고시작 조건, 종료 조건 및 주요 대사를 포함

이벤트가 들어갈 빈칸들을 배치해둔다

적젃한 템플릿을 고르고 빈칸에 이벤트 생성

Page 41: 그럴듯한 랜덤 생성 컨텐츠 만들기

퀘스트생성기 #2 : 구현

Page 42: 그럴듯한 랜덤 생성 컨텐츠 만들기
Page 43: 그럴듯한 랜덤 생성 컨텐츠 만들기

실용 수준의 퀘스트 구현이 가능했음시작 조건, 종료 조건, 중갂 정산 및 주요 대사를 포함

TODO : Nested 퀘스트이벤트를 넣을 빈칸에 다시 퀘스트를 생성해 넣으면좀 더 퀘스트 단계 수를 늘릯 수 있다

Page 44: 그럴듯한 랜덤 생성 컨텐츠 만들기

던전생성기 #1 : 방 + 길

방을 랜덤하게 뿌려 놓고

방들의 출입구를 길로 잆는다

각 방에 프랍, 몬스터를 배치

Key – Lock 구조의 퍼즐

길 부분이 너무 명시적으로 드러남

가장 흔핚 구조죠 네…

Page 45: 그럴듯한 랜덤 생성 컨텐츠 만들기

던전생성기 #2 : 착상

타일을 배치할 GRID에 Main Path를 설정

Main Path 기준으로 관문을 설정

관문 사이에 Sub Path를 설정하고 타일링

퍼즐 및 이벤트 배치

모양을 좀 더 다양하게 해보고 싶어서 일반화된 타일을 사용

Page 46: 그럴듯한 랜덤 생성 컨텐츠 만들기

GRAPH 생성 타일 배치 Key-Lock 배치 이벤트 배치

던전생성기 #2 : 생성 프로세스

Page 47: 그럴듯한 랜덤 생성 컨텐츠 만들기

GRAPH 생성 타일 배치 Key-Lock 배치 이벤트 배치

GRID 배열

Page 48: 그럴듯한 랜덤 생성 컨텐츠 만들기

타일 배치 Key-Lock 배치 이벤트 배치

Main Path 생성 (시작 / 끝)

난이도 조정 요소

Turning 횟수 : 4젂체 경로 : 16

GRAPH 생성

Page 49: 그럴듯한 랜덤 생성 컨텐츠 만들기

타일 배치 Key-Lock 배치 이벤트 배치

관문(Lock) 설정

GRAPH 생성

Page 50: 그럴듯한 랜덤 생성 컨텐츠 만들기

타일 배치 Key-Lock 배치 이벤트 배치

관문 사이 구갂(Section) 을 확장

GRAPH 생성

Page 51: 그럴듯한 랜덤 생성 컨텐츠 만들기

타일 배치 Key-Lock 배치 이벤트 배치

관문 사이 구갂(Section) 에 Sub-Path 생성

GRAPH 생성

Page 52: 그럴듯한 랜덤 생성 컨텐츠 만들기

GRAPH 생성 타일 배치 Key-Lock 배치 이벤트 배치

Tile 배치

Page 53: 그럴듯한 랜덤 생성 컨텐츠 만들기

GRAPH 생성 Key-Lock 배치 이벤트 배치

Tile 배치 – 연결 적합도 판단

타일 배치

Page 54: 그럴듯한 랜덤 생성 컨텐츠 만들기

GRAPH 생성 Key-Lock 배치 이벤트 배치

Tile 배치 – 최적 타일을 배치

타일 배치

Page 55: 그럴듯한 랜덤 생성 컨텐츠 만들기

GRAPH 생성 타일 배치 Key-Lock 배치 이벤트 배치

Lock 포인트에 대해

Page 56: 그럴듯한 랜덤 생성 컨텐츠 만들기

GRAPH 생성 타일 배치 이벤트 배치

Key를 배치할 수 잇는 구갂을 탐색

Key-Lock 배치

Page 57: 그럴듯한 랜덤 생성 컨텐츠 만들기

GRAPH 생성 타일 배치 이벤트 배치

Leaf 노드에 Key 배치

Key-Lock 배치

Page 58: 그럴듯한 랜덤 생성 컨텐츠 만들기

GRAPH 생성 타일 배치 Key-Lock 배치 이벤트 배치

타일의 각 Cell에 이벤트 배치

Page 59: 그럴듯한 랜덤 생성 컨텐츠 만들기
Page 60: 그럴듯한 랜덤 생성 컨텐츠 만들기
Page 61: 그럴듯한 랜덤 생성 컨텐츠 만들기

던전생성기 #2 : 아쉬운점

손으로 만든 것 만큼 예쁘게 나오지는 않음타일을 여러 패턴 준비하기가 힘든 것도 난점 (102 패턴 사용)

파트를 너무 많이 쪼갰음결국 나온 것은 맥락 없고 모양만 다양핚 던젂

길찾기 게임으로서는 의미가 잇지만…플레이어에게 스트레스를 주기 위핚 맵이 되어선 곤띾

Page 62: 그럴듯한 랜덤 생성 컨텐츠 만들기

던전생성기 #3 Todo중요핚 것은 플레이어가 던젂에서 어떤 다양한 경험을 하도록 하는가임

던젂 템플릿을 만들고,큰 단위의 Tile을 한 두 세트 준비

던젂 Template에 이벤트를 랜덤하게 채워 넣음랜드마크, 아이템 상자, 스폰되는 맵,이쪽의 배리에이션을 정교하게 만드는 편이 만족도가 높을 것으로 생각됨

예) L4D의 AI 디렉터

Page 63: 그럴듯한 랜덤 생성 컨텐츠 만들기

결론

이상의 내용을 정리해 보겠습니다

Page 64: 그럴듯한 랜덤 생성 컨텐츠 만들기

지금까지설명한것

랜덤 생성에서의 일반적인 이슈와해결에 필요한 접귺 방법

구체적인 컨텎츠의 랜덤 생성 예캐릭터 생성기, 퀘스트 생성기, 던젂 생성기

Page 65: 그럴듯한 랜덤 생성 컨텐츠 만들기

교훈

1. 퀄리티는 핸드 크래프트한 컨텎츠가 최고 !만들기도 훨씬 쉽고…

2. 하지만, 랜덤 생성도 쓸만 합니다컨텐츠를 양적으로 부풀리는 데는 유효핚 방법R&D 코스트와 시행착오 과정을 감당핛 수 있다면 시도해 보세요

3. 처음에 파트를 너무 분해하면 망완성품에서부터 Divide & Conquer로 접근 하는 것이 안젂

4. 랜덤함에 가치를 부여해야 한다플레이어가 ‘대박이야’ 라고 느낄 수 있는 순갂을 제공해라

Page 66: 그럴듯한 랜덤 생성 컨텐츠 만들기

Q & A