답변:
먼저 주요 질문에 간단히 대답하기 위해 절차 적으로 생성 된 게임 세계 의 주요 장점 은 다음과 같습니다.
세계는 될 수 엄청난 가능성이있을 수있는 수동으로 디자인 된 게임 세계보다 훨씬 크다.
플레이어는 항상 새로운 것을 발견 할 것이기 때문에 각 게임에 대해 세계 (또는 적어도 일부)를 재생성하여 재생 가치를 높일 수 있습니다.
반대로 절차 적 생성 의 주요 단점 은 다음과 같습니다.
사용 된 생성 방법에 따라, 월드가 항상 플레이 가능한지 확인하는 것이 어려울 수 있습니다. 즉, 플레이어는 월드 생성에 운이 없어서 계속 진행할 방법이 없습니다.
완전히 재생할 수없는 세계를 생성하지 않아도 무작위 세계 생성은 매우 다양한 난이도로 이어질 수 있습니다. 때로는 플레이어가 필요한 모든 것을 편리하게 정렬하여 복용 할 수 있으며 때로는 유용한 것을 찾지 않고 오랜 시간을 보낼 수도 있습니다 .
오랜 기간 동안, 그러한 임의의 변동은 평균적인 경향이 있지만, 게임 난이도가 예를 들어 전면적으로로드 된 경우 (일반적인 생존 게임의 경우), 나쁜 시작은 게임을 망칠 수 있지만 매우 운 좋은 시작은 모든 도전에서 벗어날 수 있습니다.
불완전하게 절차 적 생성은 세상이 단조롭고 지루하게 만들 수 있습니다. 무작위로 생성 된 12 개의 미로를 본 후에는 세부 사항이 다르더라도 모두 동일하게 보이기 시작합니다.
또한 게임 세계가 각 게임에 대해 완전히 재생성되는 경우 플레이어가 이전 게임에서 인식 할 수있는 고정 된 위치 나 기능이 없습니다. 이러한 친숙 함의 부족으로 인해 플레이어가 감정 수준에서 게임에 참여하거나 다른 플레이어와 경험을 공유하기가 어려울 수 있습니다.
각 목록마다 세계가 무작위로 재생성되는 게임에서는 "워크 스루"안내서와 같은 것은 없습니다. 모든 플레이 쓰루가 다를 수 있기 때문입니다.
(이 반복 불가능 성은 테스트 및 디버깅에도 문제가 될 수 있지만 적어도 디버그 모드에서 RNG 시드를 지정하고 /하거나 사용할 수있는 "cheat"명령을 제공하여 RNG 시드를 적어도 부분적으로 피할 수는 있습니다. 다른 단계로 빠르게 진행합니다.)
그러나 단점 목록을 보면 대부분 순수한 절차 적 생성 의 단점을 설명합니다 . 수동적이고 절차 적으로 생성 된 내용 을 혼합 하여 많은 것을 피할 수 있습니다 .
예를 들어, 플레이어는 항상 고정 된, 수동으로 설계된 도시에서 시작할 수 있습니다. 아마도 더 넓거나 덜 고정 된 고향 지역으로 둘러싸여있을 수도 있지만, 도시에서 멀리 떨어진 장소는 무작위로 생성되어 플레이어가 탐험 할 수있는 낯선 영역을 항상 제공 할 수 있습니다.
플레이어가 마을을 찾아야하지만, 일단 그곳에 도착하면 무엇을 기대해야하는지 알 수 있도록 세계에 무작위로 배치 된 다른 수동으로 디자인 된 도시 나 다른 장소가있을 수도 있습니다. 반대로, 산과 같은 눈에 띄는 지형지 물을 수동으로 배치 할 수 있지만 (적어도 고정 된 시작 위치 부근에) 지형의 세부 사항을 임의로 지정할 수 있습니다.
교착 상태 및 난이도 변동을 유발하는 임의 배치는 절차 세계 생성 알고리즘 위에 다양한 일관성 및 균형 검사를 구현하여 해결할 수 있습니다. 예를 들어, 플레이어가 물을 가로 지르기 위해 특정 항목을 필요로하는 경우 플레이어가 물을 가로 지르지 않고 도달 할 수 있도록 이러한 항목을 하나 이상 배치하는 코드를 포함 할 수 있습니다.
마찬가지로, 플레이어가 레벨 x에 도달하기 전에 균형 잡힌 굉장한 지팡이 가 배치 되지 않도록하고 아이템 배치 규칙을 조정하여 플레이어가 도달 할 수있는 고정 된 위치 에 하나 이상 배치되도록 할 수도 있습니다 생존하기 위해 필요한 무대에 오기 전에
그런데 절차 적 및 수동으로 생성 된 컨텐츠 메쉬를 다소 매끄럽게 만드는 일반적인 방법은 절차 적 세계 생성기를 사용하여 수동 생성 프로세스를 시작하는 것입니다 (예 : 원하는 곳에 마을 또는 산을 생성하는 등 적절하게 조정될 수 있음) )를 사용하여 디자인하려는 지역을 초기화 한 다음 수동으로 조정하여 원하는 세부 정보를 추가하고 조정하십시오. (또한 수동 변경 사항과 생성기 시드 및 사용 된 매개 변수 만 저장하여 매우 컴팩트 한 수준의 저장이 가능합니다.)
수동 컨텐츠와 절차 컨텐츠를 결합하는 다른 방법으로는 수동으로 디자인 된 레벨에 빈 자리를 남기고 무작위 컨텐츠로 채울 수 있습니다 (예 : 캐슬에는 던전에서 무작위로 생성 된 미로, 외곽선과 출구 만 고정됨). 수동 설계는 레벨의 일부 부분 (예 : 도시에 주택 배치)의 광범위한 개요 만 지정하고 세부 사항 (예 : 각 주택의 정확한 모양)을 임의로 선택하도록 남겨 둘 수 있습니다.
사실, 게임 세계를 완전히 고정시킨 많은 게임조차도 레벨 생성 과정의 일부로 특정 형태의 절차 생성을 사용 합니다. 왜냐하면 세계 생성의 일부 측면이 있기 때문입니다. 손으로하기가 어렵고 지루하지만 자동화하기가 상대적으로 쉽습니다.
반대로, 대부분의 절차 세계 발전기는 적어도 사용 일부 에서 세계를 구축하기 위해 수동으로 디자인 된 개체와 요소를. 예를 들어, 절차 적으로 생성 된 세계에는 수동으로 그려진 윤곽선이있는 절차 적으로 생성 된 나무로 둘러싸인 수동으로 생성 된 도시와 수동으로 디자인 된 나뭇잎이있는 절차 적으로 생성 된 나무가 포함될 수 있습니다.
또한 절차 적 컨텐츠 생성이 고정 된 월드와 호환되지 않을 수도 있습니다. 고정 된 RNG 시드를 선택하여이를 사용하여 월드를 생성 할 수 있습니다. 플레이어가 탐색 할 수있는 거대한 세상을 원하지만 모든 게임과 모든 플레이어에 대해 동일하게 유지하려는 경우 유용합니다.
이 작업을 수행하는 경우 (또는 그렇지 않은 경우에도) 여러 RNG 인스턴스를 사용하여 세계지도 생성기를 계층 적으로 설계하여 전체 맵 생성기가 단일 RNG 인스턴스를 유지하도록 설계해야합니다. 하위 지역을 생성하는 데 사용하고, 각 하위 지역에 지역 생성기가 지역을 생성하는 데 사용할 별도의 RNG 인스턴스를 시딩하는 데 사용할 다른 시드 값을 할당하는 등의 작업을 수행합니다. 이것은 맵의 가장 작은 부분의 아주 작은 디테일을 변경해도 RNG가 동기화되지 않고 세계의 다른 모든 것이 완전히 달라지게하는 "나비 효과"를 피하기위한 것입니다.
버터 플라이 효과를 피하는 또 다른 중요한 방법은, 특히 플레이어가 탐색하면서 월드를 "즉석에서"생성하는 경우 일반 RNG를 완전히 피하는 것입니다 (예 : 생성과 같이 플레이어의 관점에서 "즉시"발생하는 프로세스는 제외) 플레이어가 들어갈 때 새로운 레벨) 대신 내부 상태를 저장하지 않는 난수 생성 방법을 사용합니다. 예를 들어, 플레이어가 진입하려는 하위 지역에 대한 시드를 선택할 때 전체 월드 생성기는 하위 지역의 좌표 (및 자체 전체 시드)를 해시 함수 에 공급하여 하위 지역 시드를 생성 할 수 있습니다. 이렇게하면 플레이어가 입력 한 순서에 관계없이 각 지역이 항상 동일하게 보입니다.
추신. 이 모든 문제를 해결 한 후 절차 생성에 사용 된 실제 코드에 대한 최종 질문을 간단히 설명하겠습니다. 아아, 나는 그것이없이 의미있는 의미에서 정말 답할 생각하지 않습니다 많은 이들을 사용하여 게임이 있기 때문에 절차 적 세계 생성을 할 수있는 여러 가지 방법으로 문자가 있기 때문에, 사용자가 제공 한 것보다 더 많은 세부 사항.
예를 들어, 절차 적으로 생성 된 모든 탐사 게임의 위대한 할아버지는 아마도 Rogue 일 것입니다. 레벨 생성 알고리즘은 단순히 직사각형 방을 더 큰 직사각형 레벨에 무작위로 배치하고 그 방을 통로와 연결하는 것으로 구성되어 있습니다. 그들 중 하나의 다음 단계). Nethack 에서 Diablo 시리즈에 이르기까지 다양한 계승자 들이이 시스템을 여러 가지 방법으로 정교하게 만들었지 만 대부분 방, 던전 및 미로로 구성된 별개의 레벨에 대한 기본 개념을 그리드 맵에 무작위로 배치했습니다.
반대로 야외 설정이 가능한 게임의 경우 프랙탈 지형 생성 알고리즘 으로 시작하여 그 위에 다른 기능 (강, 숲, 도시 등)을 구축하는 것이 좋습니다. 또는 Minecraft 와 같은 작업을 수행하고 랜드 스케이프의 어느 부분이지면과 공기인지를 결정 하는 임의의 3D 절차 적 텍스처를 생성하고 (낮은 블록이지면에 닿을 가능성이 큰 스케일 및 바이어스) 물과 같은 기능을 오버레이 할 수 있습니다. 그 위에 토양, 암석, 식생 등.
물론 우주 탐사 게임을 작성하는 경우 위의 어느 것도 적용되지 않습니다 .이 경우 밀도 함수에 따라 무작위로 배치 된 별 시스템을 생성 한 다음 임의의 것을 생성해야합니다 그들 각각의 별과 행성의 집합입니다. 또는 플레이어가 유클리드 가 아닌 지형 을 탐험하도록 설정 하는 경우, 완전히 다른 도전에 직면하게 될 것입니다 (예 : 주어진 반경 내의 볼륨이 다항식이 아닌 기하 급수적으로 증가한다는 사실) 메모리에 큰 맵을 유지하기가 정말 어렵습니다).
절차 적 생성의 장점
손으로 만들 수있는 것보다 훨씬 큰지도 / 디자인을 실제로 큰 크기로 쉽게 확장 할 수 있습니다.
지형 덩어리가 즉시 생성되는 시스템을 만들면 영구 메모리에서 덩어리로로드하기 위해 코드 조각을 작성하지 않아도됩니다.
장기적으로는 수동 맵 편집보다 절차 적 디자인을 사용하여 더 실용적인 레벨을 발견 할 수 있습니다.
'탐색기'게임의 경우 플레이어가 지루하지 않도록 서로 다른 수십, 수백 또는 수천 개의 레벨을 생성 할 수 있습니다.
절차 적 생성의 단점
생성 된 지형이 '원하는 방식'으로 보이도록 많은 작업이 필요합니다.
'테스트 레벨'을 만드는 것은 번거 롭습니다.
위에서 언급했듯이 아이템과 다른 것들의 배치는 신중하게 수행해야하지만, 하향식 탐색기 게임의 경우 생각보다 문제가 적습니다.
광범위한 테스트를 수행하지 않으면 손으로 레벨을 만든 경우보다 특정 절차 레벨에서 게임 플레이가 완전히 중단되는 시나리오를 얻을 수 있습니다.
매우 복잡한 지형의 경우 버그 수정 및 디자인 작업에 더 많은 시간을 소비 할 수 있으며 기본 맵 디자인 도구 및 파일 로더를 만드는 데 소비했을 것입니다.
수동 설계의 장점
게임 디자이너는 게임 플레이가 각 레벨의 맥락 내에서 기능해야한다는 것을보다 확실하게 확신 할 수 있습니다.
절차 적 생성으로 '세부 정보'를보다 쉽게 생성하고 배치 할 수 있습니다.
산 아래로 흐르는 물과 같이 일부 지형 지형은 절차 상 생산하기가 매우 어렵습니다. 그렇게하려면 고도지도를 매우 철저히 평가해야하므로 설계하기 어려울 수 있습니다.
'선형 경로'를 따라 플레이어를 안내하는 것이 더 쉽지만 '탐색기'게임을 만들고 있다고 말하면 그렇게 관련성이 없을 수 있습니다.
수동 설계의 단점
절차 적 생성에서는 단지 몇 가지 값만 수정하면 완전히 다른 지형이 만들어 지지만 지형에 광범위한 변경 사항을 적용하는 데 시간이 오래 걸립니다.
각 맵을 메모리에 저장해야합니다.이 레벨은 작은 레벨에는 적합하지만 더 큰 레벨에서는 절차 생성이 유일한 옵션 일 수 있습니다. 게임의 영구 메모리 설치 요구 사항을 증가시킵니다.
지도 편집기 및 파일로드 시스템을 구성해야 할 수 있습니다.
절차 적 컨텐츠 생성에 대한 더 많은 단점을 나열했지만 결국 프로젝트가 전체적으로 절차 적이므로 함정을 알고 있기 때문일 수 있습니다. 탐험가 게임의 경우 각지도의 크기와 원하는지도 편집 도구를 만드는 것이 좋은지 고려해 보는 것이 좋습니다.