피드로 돌아가기
Dev.toFrontend
원문 읽기
Floating Origin과 Logarithmic Depth Buffer를 통한 1:1 스케일 태양계 구현
I built a 1:1 solar system with Fable 5 in the days before it was pulled offline
AI 요약
Context
Float32 기반 GPU 렌더링의 정밀도 한계로 인해 광대한 우주 공간과 미세한 지표면을 동시에 표현할 때 Vertex Quantization 및 Z-fighting 현상 발생. 특히 10¹³ km에 달하는 Oort Cloud부터 0.5m 단위의 지표면까지 단일 씬에서 처리해야 하는 기술적 제약 존재.
Technical Solution
- Float64 기반의 Heliocentric Ecliptic J2000 좌표계로 천체 위치를 계산하여 정밀도 확보
- Floating Origin 기법을 적용하여 카메라 위치를 원점으로 지속적으로 재설정함으로써 GPU 전달 값의 크기를 최소화하고 지표면 떨림 현상 제거
- Logarithmic Depth Buffer 도입을 통해 0.5m부터 10¹⁵ km까지의 광범위한 깊이 정밀도를 재분배하여 Z-fighting 방지
- Tile-local Coordinates 기반의 Terrain Noise 평가를 통해 행성 반지름 규모에서 발생하는 FP32 Banding 현상 해결
- Single Continuous Dist-to-surface Curve 설계를 통해 궤도 진입부터 수중 다이빙까지 별도 씬 전환 없는 Seamless Transition 구현
- Rayleigh 및 Mie 산란 모델 기반의 Ray-marching 기법을 적용한 행성별 대기 렌더링 구현
실천 포인트
1. 초거대 스케일 렌더링 시 Float32의 유효숫자 한계를 검토하고 Floating Origin 도입 고려
2. 광범위한 거리의 오브젝트가 공존하는 씬에서 Z-fighting 발생 시 Logarithmic Depth Buffer 적용 검토
3. 대규모 좌표계 기반의 노이즈 함수 사용 시 절대 좌표가 아닌 Local 좌표계 기반 샘플링 적용