지형 생성에서 수식 하나로 지역 경계를 다루기

좌표에서 지형으로 이어지는 수식
2023년 12월 22일의 Factorio 개발 기록 #390은 노이즈 표현식으로 지형을 만드는 과정을 설명합니다. 지도 생성기는 좌표를 받아 어떤 타일과 자원, 장식물을 놓을지 결정합니다. 원점에서의 거리를 이용해 시작 섬을 만들고, 위치를 이동하거나 서로 다른 크기의 노이즈를 더하면 자연스러운 경계에 가까워집니다.
여기서 노이즈는 매번 아무 숫자나 뽑는다는 뜻만은 아닙니다. 인접한 좌표가 비슷한 값을 갖는 연속적인 노이즈를 사용하면 지형이 부드럽게 변합니다. 자원 배치에는 중심부가 풍부한 점 형태의 분포와 경계를 흐트러뜨리는 노이즈를 조합하는 사례가 나옵니다.
편집 형식과 실행 구조를 나눕니다
원문은 수식 표현뿐 아니라 이를 처리하는 내부 구조의 개선도 공개합니다. 동일한 표현식을 중복 생성하지 않도록 공유하고, 상수로 계산할 수 있는 부분을 정리하며, 지도 생성용 계산을 타일·절벽·개체와 장식물의 세 프로그램으로 나누는 변화입니다. 발표에 나온 성능 수치는 당시 특정 표현식과 환경의 결과이므로 다른 프로젝트의 보장 수치로 옮기지 않았습니다.
사람이 읽는 수식은 토큰화, 연산자 우선순위 처리, 표현식 트리 구성으로 이어집니다. 수식을 짧게 쓰는 편의와 실행 때 같은 계산을 반복하지 않는 최적화는 서로 연결되지만 별도 단계라는 점을 볼 수 있습니다.
현재 문서로 확인하는 변수의 의미
공식 Noise Expressions 문서는 표현식이 타일마다 실행되며 x, y와 지도 시드를 사용할 수 있다고 설명합니다. 배치 확률과 자원 풍부함도 서로 다른 진입점입니다. 따라서 지형이 나타나는 범위와 그 안에 있는 자원량을 한 값으로 혼동하지 않는 것이 중요합니다.
이름에 하이픈이 들어간 표현식을 직접 적으면 뺄셈으로 해석될 수 있어 var()를 이용한다는 문서상 주의점도 있습니다. 시각적으로는 단순한 이름 변경이 파서 입장에서는 다른 식이 될 수 있다는 사례입니다. 이 설명은 현재 공개 문서의 계약이며 전체 엔진 소스를 검토했다는 뜻은 아닙니다.
같은 시드로 비교해 볼 항목
직접 해볼 실험은 먼저 원형 섬과 한 종류의 자원만 생성하는 작은 설정을 만드는 것입니다. 같은 시드와 범위를 고정하고 노이즈 크기, 세기, 경계 기준을 하나씩 바꾸면 어떤 값이 어느 모양에 영향을 주는지 비교하기 쉽습니다. 아직 이 실험을 실행한 결과는 없습니다.
변경 전후 이미지 외에 시작 지점의 접근 가능성, 자원까지의 거리, 끊긴 섬의 수를 함께 기록할 수 있습니다. 여러 시드에서도 최소한의 진행 조건이 유지되는지 확인해야 보기 좋은 한 지도에만 맞춘 수식을 피할 수 있습니다. 성능은 초기 표현식 준비 시간과 실제 구역 생성 시간을 나누어 측정하는 편이 좋습니다. 간단해 보이는 수식이 매 타일에서 실행될 때의 비용까지 살펴보는 것이 이 사례의 실용적인 교훈입니다.
미로


댓글
이 글에 대한 생각을 남겨 주세요.