처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.06.19 31

맵 끝까지 가면 캐릭터가 덜덜 떨리는 이유 — Unity와 부동소수점의 숙명

Hacker News 원문 보기
맵 끝까지 가면 캐릭터가 덜덜 떨리는 이유 — Unity와 부동소수점의 숙명

게임이 멀리 가면 왜 떨릴까 — Unity와 부동소수점

오픈월드 게임에서 맵 끝자락까지 달려가 봤더니 캐릭터나 카메라가 미세하게 덜덜 떨리는(지터링) 거 보신 적 있으세요? 이게 버그가 아니라 부동소수점(floating point)의 숙명이에요. 그래픽스 엔지니어 Aras Pranckevičius가 Unity와 부동소수점 이야기를 정리했는데, 게임 개발자뿐 아니라 수치 계산을 다루는 모든 개발자가 알아두면 좋은 내용이라 쉽게 풀어볼게요.

float가 뭐냐면

컴퓨터는 소수를 float(보통 32비트)로 저장해요. 그런데 이게 '정확한 값'이 아니라 '근삿값'이라는 게 핵심이에요. 게다가 정밀도가 숫자 크기에 따라 달라져요. 0 근처에선 값들이 아주 촘촘하게 표현되지만, 숫자가 커질수록 표현할 수 있는 값들 사이 간격이 쩍쩍 벌어지거든요. float는 유효숫자가 7자리 정도라서, 좌표가 100만쯤 되면 소수점 정밀도가 cm 단위로 뚝 떨어져요. 그래서 원점(0,0,0)에서 멀리 떨어진 물체일수록 위치가 들쭉날쭉 떨리는 거예요.

해결책 — 떠다니는 원점

게임에선 이걸 '플로팅 오리진(floating origin)'으로 풀어요. 플레이어를 계속 좌표 0 근처로 끌어다 놓고, 대신 세계 전체를 반대 방향으로 슬쩍 옮기는 거죠. 플레이어 입장에선 저 멀리 온 것 같지만, 실제 계산은 늘 0 근처에서 벌어지니까 정밀도가 유지돼요. 또 하나 조심할 게 NaN(Not a Number, 0 나누기 0 같은 계산에서 튀어나오는 '숫자 아님' 값이에요)인데, 한번 생기면 더하든 곱하든 계속 NaN으로 번져서 화면 전체를 새카맣게 날려버려요.

업계 맥락 — 결정론과 멀티플레이

더 골치 아픈 건 결정론(determinism)이에요. 분명 같은 입력인데 CPU나 컴파일러 최적화 옵션(특히 fast-math)에 따라 float 계산 결과가 아주 미세하게 달라질 수 있거든요. 그럼 멀티플레이에서 두 클라이언트의 시뮬레이션이 조금씩 어긋나다가 결국 게임이 갈라져요. 그래서 격투 게임이나 RTS는 일부러 고정소수점이나 결정론적 수학 라이브러리를 쓰기도 해요. Unity의 Burst 컴파일러도 이 부분을 꽤 신경 써서 다루죠.

한국 개발자에게

게임 안 만들어도 의미 있어요. 금융 계산에서 float로 돈을 더하면 0.1 + 0.2가 0.30000000000000004가 되는 그 악명 높은 문제, 정확히 같은 뿌리거든요. 그래서 돈은 정수(센트·원 단위)나 decimal 타입으로 다뤄야 하고, 큰 좌표나 과학 계산을 할 땐 정밀도 한계를 늘 의식하고 있어야 해요. '왜 결과가 조금씩 안 맞지?' 싶을 때 제일 먼저 의심할 후보예요.

마무리

핵심 한 줄: float는 '대충 맞는 근삿값'이라는 사실을 잊는 순간 버그가 시작된다는 거예요. 여러분도 부동소수점 때문에 밤새 디버깅하다 머리 싸맨 경험, 한 번쯤 있으시죠?


🔗 출처: Hacker News

이 뉴스가 유용했나요?

TTJ 코딩클래스 정규반

월급 외 수입,
코딩으로 만들 수 있습니다

17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.

144+실전 강의
17개수익 모델
4.9수강생 평점
정규반 자세히 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.