무한 지형을위한 절차 적 강 또는 도로 생성


28

나는 중세와 같은 생각으로 도로가 아닌 경로를 말해야합니다. 또한 현실감을 찾지 않습니다. 내가 찾고있는 대답은 사실주의보다는 내가 묘사 한 틀에 들어가는 것입니다.

매력적인 방식으로 절차 도로 / 강을 생성하는 방법을 찾고 있지만 무한 지형 유형 시스템을 위해 그렇게하고 싶습니다. 펄린 노이즈가 블롭을 생성하는 방법과 마찬가지로 임의 길이의 선 세그먼트 (아마도 무한 길이)를 생성하고 싶습니다.

여기에 제안 된 답변과 같은 전략을 알고 있지만 지정된 시작 및 끝 지점을 사용하여 시작합니다. 지정된 시작 및 끝 지점이 없습니다. 임의의 좌표를 사용하여 단순히 함수를 호출하고 특정 좌표가 강 / 도로의 일부인지 여부를 반환하도록하고 싶습니다.

지형을 미리 생성하고 싶지 않습니다. 여기에는 강우 시뮬레이션에 사용되는 것과 같은 하이트 맵이 포함됩니다. 또한 시작 / 종료 지점이 필요하지 않습니다.

내가 설명하려는 것을 달성하기 위해 누군가가 알고있을 수있는 알고리즘이나 조정 알고리즘이 있습니까?

내가 지금까지 온 가장 가까운 것은 이름을 올바르게 사용하면 멀티 릿지 프랙탈입니다. 나는 값 노이즈의 절대 값을 취하고 (-1에서 +1로 스케일되었다고 가정) 임계 값을 설정합니다. 이것에 대한 나의 주요 문제는 선이 너무 자주 겹치고, 대부분 원형이며 때로는 간결하지만 바람직하지 않은 큰 호수를 형성하기 위해 수렴하며 종종 선의 두께가 너무 다양하다는 것입니다.

다음은 2D에서 지금까지 가지고 있지만 세부 사항을 보여주기 위해 매우 높은 빈도의 사진입니다.

여기에 이미지 설명을 입력하십시오


하천은 "흐르기"때문에 단순히 원점을 결정하기 위해 노이즈를 사용하여 하천을 쉽게 결정할 수 있습니다.
War

도로는 조금 더 어려울 수 있습니다. 사용에 따라 도로를 건설하는 것을 고려했습니다. 플레이어 / 모든 플레이어가 정기적으로 일부 지형을 걷는 경우 경로가됩니다.
War

1
@ user19142 알았어. 그러면 중복되지는 않아. 이 질문 / 응답에서도 사용할 수 있습니다. gamedev.stackexchange.com/questions/53400/… 그리고 이전 링크를 "관련" gamedev.stackexchange.com/questions/45403/… gamedev 로 다시 포함 하겠습니다. stackexchange.com/questions/29044/… gamedev.stackexchange.com/questions/31263/…
MichaelHouse

4
소음으로 인해 도로가 믿기지 않을 것이라고 생각합니다. 도로는 물리와 시간 대신 지능으로 만들어집니다. 그것들은 때때로 서로 닮을 수 있지만, 둘 다에 대해 동일한 알고리즘을 사용할 수 없을 정도로 충분히 다릅니다.
MichaelHouse

1
해당 프로젝트의 도로는 특정 높이를 따르는 등고선이므로 로컬에서 생성 할 수 있습니다. 그것은 효과가 있었지만 Perlin 노이즈로 높이 맵 생성 되지 않았습니다 .
amitp

답변:


11

(많은) 사전 계산없이 그리고 무한한 세상에 대한 가능성없이 원하는 것을 보관할 생각입니다.

알고리즘의 첫 번째 pice는 Voronoi-Diagramms 의 사용법입니다 . 세계를 그리드로 나누면 각 그리드에는 (xgrid, ygrid) 형식의 주소가 있습니다. 도로를 작성해야하는 각 셀에 대해 xgrid 및 ygrid 변수를 숫자 CellSeed 를 반환하는 해시 함수에 넣습니다 . Voronoi Diagramm에 대한 점의 좌표를 생성하는 난수 생성기의 시드로 CellSeed 를 사용 합니다.

이제 다이어그램의 모서리와 여러 모서리가 충돌하는 노드를 검색해야합니다. 더 쉽게 액세스 할 수 있도록 정보를 그래프에 저장할 수도 있습니다.

이 단계 후에 유효한 네트워크를 통해 경로를 검색 할 수 있습니다.

유효한 경로의 경우 이제 도로를 만들 수 있습니다 (가장자리가 뾰족합니다).

참고 : 또한 모든 Neightbor 셀에 대해 Voronio 다이어그램의 좌표를 생성해야 셀 가장자리에 테두리가 없습니다.

날카로운 모서리를 원하지 않으면 각 연결의 중간 점을 계산하고 그래프에서 두 모서리 사이의 베 지어 보간을위한 접선 방향을 사용할 수 있습니다.

Voronoi-Diagramms 사용법

도로 구조와 같은 도시를 보관하기 위해 의사 랜덤 함수의 점을 그리드에 정렬 할 수 있으므로 길은 사각형입니다.

도로와 같은 카운티의 경우 포인트의 순서가 정렬되지 않아야합니다.

위키 백과의 diagramm

Voronoi-Diagramms에 대한 점의 위치를 ​​생성하는 Pseudo Random 함수

점의보다 균일 한 비 분산 분포를 위해 일반 랜덤 함수 또는 해머 슬리 세트 일 수 있습니다 .


해시 함수의 예가 있습니까? 나는 같은 목표 (도로에 voronoi를 사용하는 무한한 세계)를 얻었지만 어떻게 해야하는지에 대한 핸들을 얻을 수없는 것 같습니다. 내가 찾을 수있는 모든 voronoi lib는 경계 상자의 좌표를 기대하여 목적을 즉시 잃습니다.
BotskoNet

아니요, 해시 함수는 셀에 시작 시드를 지정하기위한 것입니다. x * prime1 + y * prime2 + z * prime3과 같이 사소한 것일 수 있습니다. 소수가 서로 같지 않고 이상적으로 큰 경우 64 비트 정수 / 부호없는 것으로 계산해야합니다. lib가 경계 상자를 사용하는 경우 문제가되지 않습니다. 각 셀마다 셀의 모든 점과 이웃 셀의 모든 점 (8 개의 이웃 셀)을 고려하면되기 때문입니다.
Quonux

lib가 단 정밀도를 사용하거나 단 정밀도를 사용하는 경우 단 정밀도로 정밀도 문제가 발생할 수 있습니다. lib가 단 정밀도를 사용하고 다음과 같이하지 않는 경우 문제를 무시하려면 다음과 같이하지 마십시오. 위치를 단 정밀도로 변환하기 전에 중심 셀의 전역 위치를 빼고 lib에 float로 넣은 다음 다시 결과.
Quonux

실제로이 알고리즘을 구현하지는 않았지만 해시 함수는 실제로 사소한 것일 수 있습니다.
Quonux

8

도로 (및 도시) 생성을 위해 내가 찾은 최고의 논문은 다음과 같습니다.

Y 교구와 P ül 러에 의한 도시의 절차 적 모델링

이것은 L-System을 사용하며 미국 및 EU 도로 패턴을 생성 할 수 있습니다. 도시 전체에 도로를 생성하지 않으려면 주요 도로를 생성하면됩니다. 입력에서 높이 맵, 워터 맵 및 인구 밀도 맵을 사용할 수 있습니다.


내가 종이를 좋아했기 때문에 +1. 지형을 동적으로 생성하는 동안 도로 / 경로 / 강을 생성하려는 방법에 실제로 맞지 않았습니다.
신화

6

http://vterrain.org/Culture/Roads/ 섹션 "3D 도로 생성"에는 도로 생성에 대한 정보가 있습니다 .

도로 의 문제점 은 랜드 마크연결 한다는 것입니다 ( A에서 B로 직진하는 대신 지형을 따라가는 경우가 많습니다 ).

개인적으로 지형을 생성 한 다음 강을 배치하고 (침식을 사용하거나 http://vterrain.org/Water/ 섹션 "수 문학"참조) 도시를 이해하기 쉬운 곳에 배치합니다 (예 : 강 또는 기타 지역) 수도원 또는 수도관 또는 수도 탑 및 파이프를 사용하여 물을 운송 할 수있는 장소) 및 도시 간 도로 생성.

절차 적 세계에서이를보다 쉽게 ​​사용하기 위해 해당 장소에서 도로가 생성 될 때 도로가 가장 많이 갈 수있는 지형에 중간 지점을 생성 한 다음 실제로 해당 위치에 도로가 생성 된 경우 중간 지점을 연결할 수 있습니다.


4

첫째, 강과 도로는 매우 다릅니다. 도로는 등각 선 (동일한 / 유사한 고도)을 따르는 경향이 있습니다. 그 이유는 많이 오르지 않거나 떨어지지 않는 도로를 여행하기가 훨씬 쉽기 때문입니다. 반면에 강은 등온선 / 등변선 (내리막)에 수직으로 이동합니다. 강은 유역 (모두 계곡으로 내려가는 산의 집합)에서 형성되며 나무와 같은 구조를 형성하는 경향이 있습니다. 또한, 논리적 다리를 형성하기 위해 도로는 종종 강에 수직으로 이동합니다. 가장 좋은 아이디어는 먼저 강을 생성 한 다음 논리적 도로 (예 : 도시 간 도로)를 만드는 것입니다. 불행히도 더 자세한 정보를 얻을 시간이 없지만 희망이 있으면 올바른 길로 갈 수 있습니다.

분명해 보이지만 다양한 유형의 지형과 도로에서 Google지도를 봅니다. 그들이 어떻게 보이는지 더 잘 이해할 것입니다.


1
알고리즘을 작동시키는 데 필요한만큼의 리얼리즘에 관심이 없다는 것을 이해하기 위해 질문을 다시 수정했습니다. 그럼에도 불구하고 나는 대부분의 용어에 대해 대답을 주셔서 감사합니다. 필요한 최소한의 데이터 (높이지도와 같은)로 생성 할 수있는 무한 랜덤 길이 구불 구불 한 것과 같은 내 욕구를 생각하십시오.
신화
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.