계절이 도는 월드
2026.09 · 기술 노트 · 시간과 날씨
하루는 20분입니다. 정오에 시작해서 자정에 날짜가 바뀝니다.
계절은 4일, 1년은 16일입니다. 현실 시간으로 한 해가 5시간 20분쯤 됩니다. 짧다고 생각하실 수 있는데, 이렇게 안 하면 겨울을 한 번 보려고 며칠을 기다려야 합니다.
태양은 북위 38도에 있습니다
해가 뜨고 지는 시각을 계절마다 손으로 적지 않았습니다. 그냥 천문 계산을 넣었습니다.
위도 38도, 적위 최대 23.44도. 여기에 날짜를 넣으면 그날의 일출·일몰 시각과 태양 고도가 나옵니다. 여름에는 해가 길고 높이 뜨고, 겨울에는 짧고 낮게 뜹니다. 표를 만들 필요가 없습니다.
이게 실제로 문제를 하나 잡아 준 적이 있습니다. "저녁 19시 30분인데 왜 한밤중이냐"는 이야기가 나왔는데, 계산해 보니 그 계절의 일몰이 18시 24분이었습니다. 19시 30분은 이미 태양 고도 −14도, 진짜 한밤중이 맞았습니다.
그래서 조명 값도 전부 시각이 아니라 태양 고도로 정하게 바꿨습니다. 같은 19시라도 계절에 따라 해가 떠 있기도 하고 진 지 한참이기도 하니까요.

밤에 달이 반대편에 있습니다
밤 그림자는 달이 만듭니다. 달은 태양의 정반대에 있다고 두고 계산합니다.
이걸 처음 만들 때 해가 지평선을 넘는 순간 그림자 방향이 한 프레임에 145도 튀었습니다. 낮이면 태양, 밤이면 달, 하고 부호를 뒤집었거든요. 하필 지평선 근처에서 좌우 성분이 제일 크기 때문에 정확히 거기서 제일 크게 튀었습니다.
지금은 박명 구간에서 두 방향을 섞습니다. 그림자가 정아래를 지나며 천천히 돌아갑니다. 게임 시간 2초에 2.5도 정도요.
최근에는 달의 위상도 넣었습니다. 아이소메트릭이라 하늘이 안 보이니까 물에 비치게 했습니다. 삭망월은 8일로 잡았습니다. 실제 29.5일을 쓰면 1년이 16일인 이 게임에서 보름달을 반 번 봅니다.
날씨는 바이옴과 기온이 정합니다
맑음이 3~8분, 비나 눈이나 안개가 1~3.6분 정도 이어집니다. 바이옴마다 배수가 다릅니다.
비가 올지 눈이 올지는 따로 정하지 않습니다. 그냥 강수가 생기고, 그 시점 기온이 낮으면 눈이 됩니다. 같은 날씨가 초원에서는 비고 툰드라에서는 눈입니다.
비랑 눈은 화면에 보이는 만큼만 그립니다. 입자 버퍼 하나에 고정 개수를 두고, 바람 벡터를 아이소 화면으로 투영해서 낙하 방향에 씁니다. 바람이 세면 비가 눕습니다.
빗방울은 화면을 감아 도는 대신 실제로 땅에 떨어집니다. 화면 안 타일을 하나 골라서 그 타일의 층 높이까지 떨어지고, 거기에 작은 고리를 남기고 다시 위에서 태어납니다. 예전에는 감아 돌기만 해서 방울이 땅을 그냥 통과했습니다.

가을 바람에는 낙엽이 섞입니다. 지하나 실내에서는 강수를 숨기고요.
눈은 쌓이고 녹습니다
눈은 그냥 내리기만 하는 게 아니라 적설량이 쌓입니다. 기온이 오르면 녹고, 녹은 물은 토양 수분과 웅덩이로 들어갑니다. 눈이 사라지자마자 마른 땅이 되면 이상하니까요.
얼마 전에 이 속도를 크게 늦췄습니다. 눈발 몇 개 날린 지 38초 만에 온 땅이 설원이 되고 있었거든요.
원인이 좀 허무했습니다. 땅이 완전히 하얘 보이는 지점이 적설량 최대치의 4분의 1 지점이었습니다. 당시에는 나머지 4분의 3이 화면에서 거의 차이가 없었습니다. 그걸 모르고 "최대치까지 3분"으로 맞춰 놨으니 하얘지는 데는 38초였던 거죠.
지금은 하얘지는 데 3분 30초쯤 걸립니다. 긴 눈 한 번이 거의 다 덮는 정도요.
열원 주변에는 안 쌓입니다. 모닥불이나 제련소 옆은 맨땅으로 남습니다. 건물 지붕에도 쌓이는데, 이건 눈 덮인 그림을 33장 더 그린 게 아니라 스프라이트에서 머리 위가 비어 있는 픽셀을 찾는 방식입니다. 녹을 때는 처마에서 물이 떨어집니다.


눈이 깊으면 걸음도 달라집니다
2026년 9월 14일 개발 기록입니다. 눈이 많이 쌓여도 바닥 색만 하얘지면 겨울을 걷는 느낌이 부족했습니다. 이제 적설이 깊어지면 블록 높이의 절반 정도까지 다리가 눈에 가려집니다.
그 눈을 헤치고 걸으면 발 앞에서 눈가루가 튀고, 지나간 자리에는 푸른빛의 눌린 길이 남습니다. 깊은 눈에서 발자국이 생겼다고 곧바로 맨땅이 드러나지는 않습니다. 눈이 계속 내리면 자국도 서서히 메워집니다.

깊은 눈 위에서는 도보 이동속도가 20% 줄어듭니다. 실내나 지하, 눈이 녹은 열원 주변에는 적용하지 않습니다. 쌓인 눈보다 높이 점프한 동안에도 눈의 저항을 받지 않습니다.
평소 눈은 기존처럼 천천히 쌓입니다. 기온이 낮은 날 폭풍이 오면 폭설이 되어 같은 강도의 일반 눈보다 2.5배 빠르게 쌓이고, 따뜻해지면 다시 녹습니다. 겨울에 눈이 여러 번 내린 뒤와 갑자기 큰 눈을 만났을 때가 다르게 느껴졌으면 합니다.

개발 중인 기능과 검증용 기상 상태를 촬영했습니다. 현재 배포된 게임 버전에는 아직 포함되지 않을 수 있습니다.
겨울에는 땅이 얼고 발이 미끄러집니다
겨울에 밭에 물을 주면 얼마 뒤에 그 자리가 얼음이 됩니다. 기온이 0도 아래면 20초쯤 뒤에 얼고, 2.5도 위로 오르면 8초쯤 뒤에 풀립니다.
얼음이나 눈밭 위에서는 걸음을 멈춰도 조금 미끄러집니다. 밟은 자리가 미끄러운지 아닌지 판정하는 함수 하나가 얼음·언 땅·일정 깊이 이상의 눈을 다 담당합니다.
겨울에 농사를 못 짓게 만든 셈인데, 그게 계절이 있는 이유이기도 하고요.
나무도 계절을 탑니다
겨울이 되면 잎이 없는 서리 나무로 바뀝니다. 가을에는 틴트가 들어가고요.
솔직히 말하면 여기는 아직 덜 됐습니다. 나무는 계절을 타는데 땅은 사철 초록입니다. 툰드라처럼 원래 눈이 있는 바이옴이 아니면 겨울에도 풀색이 그대로입니다. 이건 알고 있고, 다음에 손볼 목록에 있습니다.
동물은 기다려 주지 않습니다
계절 이야기를 하는 김에 하나 더 적자면, 동물은 플레이어가 없는 동안에도 나이를 먹습니다.
플레이어가 청크를 벗어나면 그 지역 동물은 휴면 상태로 보관됩니다. AI는 멈추지만 시간은 갑니다. 나중에 돌아오면 절대 게임일을 기준으로 그동안의 성장·출산·수명을 한 번에 정산합니다.
그래서 오래 안 간 숲에 돌아가면 새끼가 자라 있습니다. 늙어 죽은 것도 있고요. 이미 생성한 청크는 기록해 두기 때문에 다시 가도 몬스터가 리스폰되지 않습니다.
구애하고, 임신하고, 새끼가 어미를 따라다니다가 성체가 되면 독립합니다. 배고픈 포식자는 탐색 반경을 넓히고요. 나무도 이웃이 한 그루 있어야 번식하고, 묘목이 자라는 데 5게임일이 걸립니다.
전부 같은 시계를 봅니다
마지막으로 이게 제일 중요한데, 위의 것들이 전부 하나의 시계를 봅니다.
태양 고도가 조명 색을 정하고, 조명 색이 지형·캐릭터·물·그림자에 동시에 들어갑니다. 같은 기온이 날씨 종류와 적설과 체온과 작물 성장에 동시에 쓰입니다. 같은 바람 벡터가 비의 방향과 잔디의 흔들림과 안개의 흐름에 동시에 들어갑니다.
따로 계산하기 시작하면 땅은 하얀데 지붕은 맨살이고, 시뮬은 눈이 녹는데 화면은 멀쩡한 상태가 납니다. 실제로 그런 걸 몇 번 만들었다가 고쳤습니다.