절차 적 세계를 어떻게 구할 수 있습니까?


17

최근에 절차 세계를 만드는 방법에 대해 읽었지만 어떻게 저장합니까?

Terraria 또는 Minecraft와 같은 게임에서 사용자는 풍경을 자유롭게 수정할 수 있지만 시작 시드에서 해당 세계를 다시 만들 수는 없습니다. 절차 적이지만 수정 가능한 세계를 구하기 위해 어떤 기술이 사용됩니까?

답변:


21

월드 생성에 사용한 시드와 수정 사항을 원자 "명령"또는 그 결과로 저장하십시오.

그런 다음 저장된 게임을로드 할 때 다음을 수행하십시오.

  1. 현재 방문중인 세계의 일부를 절차 적으로 생성합니다.
  2. 저장된 명령을 적용하거나 생성 된 요소를 저장된 요소로 덮어 씁니다.

업데이트 : 물론 리소스가 사용 가능한 경우 (마인 크래프트에서 볼 수있는 경우) 생성 된 세계를 일반 세계와 마찬가지로 저장할 수 있습니다. 이 경우, 이미 방문한 (세계에서 절차 적 생성은 거의 의미가 없을 것입니다) 타일별로 저장해야합니다. 이것은 더 많은 HDD 및 / 또는 데이터베이스 리소스를 소비하지만 게임을로드 할 때 CPU 전력이 덜 필요합니다.


2
수정뿐만 아니라, 그는 아마도 저장해야하는 종자 절차 세상을 ;-) 구축하는 데 사용되었다
bummzack

@bummzack 예, 물론 언급하는 것을 잊어 버렸습니다. 왜냐하면 :-) 대답을 편집하겠습니다.
Marton

10
나는 씨앗에서 세상을 재생시키는 것이 최선의 아이디어라고 전적으로 확신하지 않습니다. 세계 생성에는 일반적으로 복잡한 알고리즘이 수반되므로 시간이 걸립니다. 일반적으로 공간을 절약하지 않고 임의성으로부터 혜택을 얻는 임의의 세계를 생성합니다. 따라서 전 세계를 이진 형식으로 저장하는 것이 더 효율적이라고 생각합니다.
Jonathan Connell

2
절차 적으로 생성 된 세계를 저장하고 생성 한 다음 저장 하시겠습니까? 이것은 완전한 답변이 아닙니다.
MichaelHouse

2
@ Random832 Minecraft 세계를 시드에서 재생성하고 수정 내용을 재생하는 대신 이진 형식으로 저장합니다. 전 세계를 구하는 문제를 해결하기 위해 Minecraft는 지금까지 생성 된 청크 만 저장합니다. 세계를 더 탐험할수록 세이브 게임이 커집니다.
Joseph Mansfield

8

절차 적으로 생성 된 세계를 저장하는 것은 타일 맵 데이터를 저장하는 것과 같습니다.

세계가 다른 유형의 타일로 구성되어 있다고 가정하면 세계를 이진 형식으로 저장하려고 할 것입니다.

  1. 서로 다른 타일 유형의 총 수를 결정하십시오. (따라서 각 타일을 나타내려면 더 많거나 적은 비트가 필요합니다)
  2. 방문한 (수정 된) 세계의 너비와 높이를 정의하십시오.
  3. 맨 위 왼쪽 타일 (하늘 포함)에서 맨 아래 오른쪽 타일까지 타일별로 월드 타일을 나타냅니다.
  4. 공간을 절약하려면 DEFLATE 또는 유사한 알고리즘을 사용하여이 2 차원 배열 (1 차원으로 표시)을 압축하십시오. http://en.wikipedia.org/wiki/DEFLATE
  5. API에 적절한 파일 I / O를 사용하여 데이터를 디스크에 저장하십시오.

같은 방법으로 복셀 기반 맵도 저장할 수 있습니다.

정점 기반 맵 모델을 저장하는 것이 더 복잡합니다.

그 주제에 대해 자세히 설명해 주시겠습니까?


원하는 경우 각 타일을 색상으로 코딩하여 png 파일로 저장할 수 있습니다. 이를 통해 전문화 된 뷰어를 사용하지 않고도 결과를 신속하게 개관 할 수 있습니다 .
wolfdawn


3

월드에 메모리에 저장하기 위해 사용하는 데이터 구조는 디스크에서 쓰고 읽을 수있는 템플릿으로 사용될 수 있습니다. 디스크에서 사용할 수있는 데이터가없는 경우 게임의 절차 부분에서 이러한 데이터 구조를 처음 채 웁니다. 그런 다음 메모리에서 영역을 언로드 할 준비가되면 생성 또는 수정 된대로 디스크에 기록하십시오.

새 영역을 메모리에로드 할 준비가되면 먼저 생성되어 디스크에 저장되어 있는지 확인하십시오. 있는 경우 절차 생성 알고리즘 대신 디스크에서로드하십시오.

일반적으로 이것은 지형 덩어리로 수행됩니다. 각 청크를 자체 파일에 저장하거나 조회 테이블이있는 단일 파일의 데이터를 포함하는 더 복잡한 디스크 구조를 만들 수 있습니다. 데이터를 디스크에 저장하는 좋은 방법에 대한 다른 질문 이 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.