절차 적으로 생성 된 지형에서 강우 + 하천 생성 알고리즘


52

나는 최근에 절차적인 지형으로 할 수있는 것들에 매료되어 세계 건축을 조금 실험하기 시작했습니다. 다양한지도를 합쳐서 만든 생물 군계로 드워프 요새와 같은 세계를 만들 수 있기를 바랍니다.

첫 단계가 완료되었습니다. 다이아몬드 사각형 알고리즘을 사용하여 멋진 hieghtmap을 만들었습니다. 다음 단계는 물 특징을 추가하고 강우로 다소 현실적으로 생성하고 싶습니다. 나는지도의 높은 지점에서 시작하여 가장 낮은 이웃 지점으로 내려 가면서 해수면까지 내려 가면서 풀링 / 침식과 같은 몇 가지 접근 방식에 대해 읽었습니다.

이것에 대해 문서화 된 알고리즘이 있습니까? 아니면 팔목에서 벗어난 것입니까?

조언이나 생각을 좋아할 것입니다.


이 백서 에서 설명하는 알고리즘에서 비트와 조각을 구현했습니다 .
chaosTechnician

답변:


39

이 사이트의 사용자 인 Amit Patel은 당신에게 확실히 사용될 무작위 세계 생성에 관한 훌륭한 정보 자원 을 만들었습니다 .

또한이 사이트에는 절차 생성에 관한 몇 가지 훌륭한 질문 / 답변이 있습니다.

2D 그리드 맵에서 도로 / 강 생성

게임 플레이 기능에 중점을 둔 절차 적 세계 생성

게임에서 임의의 호수와 강을 어떻게 생성 할 수 있습니까?

랜덤 맵 생성


35

이 유형의 물건 (1990 년대 후반)을 실험 할 때 물 흐름에 대해 배울 수있는 몇 가지 논문과 책을 읽었지만, 내가 본 것을 기록한 기록은 유지하지 못했습니다. 나는 침식을 다루고 싶었 기 때문에 내 자신의 일을 끝내었다. 강이 협곡과 범람원을 생산하기를 원했습니다. 댐 저수지가 퇴적물로 채워지기를 원했습니다. 나는 강이 꼬불 꼬불 한 호수와 옥스 보우 호수 같은 효과를 내기를 원했습니다. 관개 및 물 전환을위한 운하를 원했습니다. 범람원의 농장과 주택에 피해를 입히기 위해 홍수를 원했습니다.

이 페이지 의 지리 섹션에 메모 (링크)를 보관했습니다 . 필독서 인 Jos Stam 논문이 있습니다. 불행히도 나는 메모를 구성하지 않았습니다. 또한 불행히도 게임은 OS / 2 용이므로 실행 가능한 실행 파일을 쉽게 제공 할 수 없습니다. 또한 불행히도 내 코드는 끔찍하지만 살펴 보려면 소스 코드 (zip) 에서 water.cpp를 참조하십시오 .

시뮬레이션에서 내가 한 것들 (모두 현실적인 것은 아님) :

  • 강 근처에는 습한 토양이 있습니다. 강에서 멀리 떨어진 지역에는 마른 토양이 있습니다. 수분이 식생에 영향을 미쳤다. 식생은 물의 흐름을 느리게합니다.
  • 비는 때때로 모든 곳에서 물을 만듭니다. 그런 다음 내리막으로 흐릅니다. 그런 다음 증발하고 땅에 흡수됩니다. 비는 강 수로를 깎습니다.
  • 샘물은 항상 물을 생성하지만 몇 곳에서만 생성됩니다. 스프링은 강 수로를 채 웁니다. 나는 암석층이나 지하수 흐름을 시뮬레이션하지 않았습니다. 방금 산에 샘을 무작위로 놓았습니다.
  • 흐르는 물에는 운동량이 있습니다. 내가 올바르게 기억한다면, 이것은 강을 꼬불 꼬불하게 만드는 데 중요했습니다.
  • 빠르게 움직이는 물은 퇴적물을 흡수합니다. 천천히 움직이는 물이 침전물보다 먼저 침전물을 침전시킵니다. 이것은 강 계곡을 조각합니다.
  • 초기지도 작성 과정에서 물의 흐름과 침식을 가속화했습니다. 게임 플레이 중에는 정상적인 속도로 실행되었습니다.

전반적으로, 나의 경험은이 모든 것이 놀기에는 재미 있었다는 것이 었지만, 그것이 작동하도록 많은 휴리스틱과 조정이 필요했습니다. 나는 강을 만들지 않고 자연스럽고 피할 수없는 느낌이 들었다고 말할 수 없었습니다. 너무나 재미있어서 (프로그래머와 플레이어 모두) 몇 년을 보냈지 만 게임의 나머지 부분을 끝내지 못했습니다. :)


12
간단히 그의 이름을 말하면 도착할 것입니다.
MichaelHouse

3
@ Byte56 그는 stackexcha의 촛대와 같습니다 ....
DampeS8N

2
육각형 격자 기사를 기반으로 구현을 작성하도록 영감을 주었으며 이제 다시 영감을 얻었습니다!
Adam Arold

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