월드 좌표 · FLOATING ORIGIN

멀리 갈수록 사라지는 작은 이동

큰 위치를 저장하는 시점과 카메라 좌표를 빼는 순서를 바꿔 작은 이동이 어디서 사라지는지 확인하세요.

요청 / 상태 이동량계산 중
화면 상대 위치계산 중
충돌체까지 실제 간격계산 중

원인과 해결

문제와 원인

단정밀도는 원점에서 멀어질수록 표현 가능한 값 사이가 벌어집니다. 2²⁰에서는 바로 위 값까지 0.125m입니다. 저장된 상태에 매번 0.03m를 더하면 같은 값으로 반올림되어 계속 멈출 수 있습니다.

해결은 서로 다른 단계에 적용됩니다

카메라 상대 렌더링은 큰 값의 차이를 보존한 채 먼저 빼야 합니다. 게임 상태를 이미 단정밀도로 저장했다면 화면 처리만 바꿔도 잃은 이동은 돌아오지 않습니다. 고정밀도 상태와 이른 카메라 빼기를 조합하거나, 작은 로컬 상태에서 계산하도록 원점을 옮깁니다.

W = O + L에서 원점에 Δ를 더하고 모든 로컬 좌표에서 Δ를 빼면 전역 위치와 물체 사이 거리가 유지됩니다. 충돌체 보정을 의도적으로 누락해 좌표계가 섞이는 결과를 확인할 수 있습니다.

비용과 범위

원점 이동은 카메라·충돌체·이전 위치·네트워크의 기준을 일치시켜야 합니다. 고정밀도 상태도 GPU에 큰 단정밀도 좌표로 다시 넘기면 화면 정밀도를 잃습니다. 이 실험은 Math.fround로 명시한 저장 지점의 1차원 위치 모델이며 GPU 명령이나 물리 엔진 전체를 재현하지 않습니다.

Godot 큰 월드 좌표 · Unity 카메라 상대 렌더링 · ECMAScript fround