본문 바로가기
SOOFT RogueForge
플레이 영상 Steam에서 찜하기
개발 일지

순환형 월드 생성과 청크 단위 지형 스트리밍

3D로 그릴 바탕이 생기자 다음은 땅이었습니다. 목표는 "끝까지 걸어가도 벽에 막히지 않는 세계"였습니다. 동쪽으로 계속 가면 서쪽에서 다시 나오는, 도넛 모양으로 말린 세계를 3D 지형으로 깔았습니다.

도넛 모양으로 말린 세계

세계의 오른쪽 끝과 왼쪽 끝, 위쪽 끝과 아래쪽 끝을 서로 이어 붙였습니다. 플레이어는 끝을 만나지 않고, 세계는 정해진 크기 안에서 계속 이어집니다.

문제는 땅 모양이었습니다. 보통의 지형 노이즈는 끝에서 끝으로 이어지지 않아 이음매에 절벽이 생깁니다. 그래서 노이즈를 한 차원 높은 공간의 원 위에서 뽑아, 한 바퀴 돌면 정확히 같은 값으로 돌아오게 했습니다. 이음매가 완전히 사라졌습니다.

언덕 위 캐릭터 너머로 숲과 강, 바다가 이어진 풍경
끝까지 걸어가도 벽에 막히지 않는 세계. 지평선 너머로도 땅이 이어집니다.

이음매에서만 틀리는 버그

이 세계에서 가장 오래 괴롭힌 버그는 "이음매에서만 틀리는" 계산이었습니다. 두 위치의 차이를 그냥 빼면 대부분의 땅에서는 맞지만, 이음매를 사이에 둔 두 점은 세계 한 바퀴만큼 떨어진 것으로 계산됩니다. 몬스터가 이음매 너머의 플레이어를 못 찾거나, 화살이 반대 방향으로 날아갔습니다.

위치 차이는 반드시 한 곳의 함수로만 구하도록 규칙을 정하고, 칸을 가리키는 열쇠도 하나로 묶었습니다. 평범한 땅에서는 테스트를 다 통과하는 종류의 버그라, 이음매 위에서만 도는 확인을 따로 만들어 잡았습니다.

청크로 불러오는 땅

땅은 일정한 크기의 청크로 나눠 플레이어 둘레만 만들고, 멀어지면 내려놓습니다. 지형은 물리 충돌체를 따로 만들지 않고 높이를 바로 계산해 밟게 했습니다. 땅이 바뀔 때마다 충돌체를 다시 굽지 않아도 되니 훨씬 가벼웠습니다.

바다의 비율도 손으로 맞추지 않고 여러 시드를 돌려 재 보면서 정했습니다. 감으로 고른 값은 시드에 따라 바다가 절반을 넘기도 했습니다.

바위 절벽 사이 비탈길을 걷는 캐릭터
청크 단위로 불러오는 지형. 땅은 높이를 바로 계산해 밟습니다.

다음 과제

걸어 다닐 땅은 생겼지만, 화면은 여전히 위에서 비스듬히 내려다보는 고정 시점이었습니다. 이 땅을 눈높이에서 보고 싶어지는 데까지 오래 걸리지 않았습니다.

디스코드에서 의견 남기기

다른 개발 일지

RogueForge 팔로우하기