-
-
Notifications
You must be signed in to change notification settings - Fork 20
Open
Labels
devdevdev
Description
1. Overview
현재 렌더링 시스템은 **메인 카메라의 프러스텀(Main Camera Frustum)**을 기준으로 오브젝트를 컬링합니다. 그러나 **디렉셔널 섀도우(Directional Shadow)**의 경우, 카메라 시야 밖에 있는 물체라도 시야 안으로 그림자를 드리울 수 있습니다. 기존 방식(Main Camera Culling)을 유지할 경우 그림자가 비정상적으로 사라지거나 끊기는 현상이 발생하므로, 이를 해결하기 위해 라이트 공간(Light Space) 기준의 컬링 로직을 도입하고자 합니다.
2. 문제점 (Current Issues)
- Shadow Pop-off: 섀도우 캐스터(물체)가 메인 카메라 시야 밖으로 나가는 순간, 해당 물체가 드리우던 그림자가 화면 내에서 즉시 사라지는 현상.
- Performance Waste: 시야와 전혀 상관없는 영역의 물체까지 그림자 맵(Shadow Map)에 그려질 경우 불필요한 GPU 오버헤드 및 드로우콜(Draw Call) 발생.
3. 해결 방안 (Technical Details)
A. Light Space Orthographic Frustum Culling
- 디렉셔널 라이트의 섀도우 맵 생성을 위해 설정된 Orthographic Projection Matrix와 Light View Matrix를 결합하여 새로운 Shadow Frustum을 추출합니다.
- 그림자 패스(Shadow Pass) 렌더링 시, 메인 카메라 프러스텀 대신 이 Shadow Frustum을 기준으로 오브젝트를 컬링하여 그림자가 잘리는 문제를 방지합니다.
B. Shadow Caster Volume (Extended Frustum)
- 더 정밀한 최적화를 위해, 메인 카메라의 프러스텀 바운더리를 빛의 역방향(Light Direction)으로 확장한 Shadow Caster Volume을 계산합니다.
- 카메라 시야 안에 그림자를 드리울 가능성이 있는 물체(Potential Casters)만 선별하여 섀도우 맵 렌더링에 포함시킴으로써 렌더링 효율을 극대화합니다.
4. 작업 계획 (To-do List)
-
ShadowManager내부에 라이트 전용 프러스텀(Shadow Frustum) 계산 로직 추가. -
Renderer.ts및 렌더링 파이프라인에서renderShadowLayer호출 시 메인 카메라와 분리된 별도의 컬링 데이터 전달. - 거리에 따른 작은 물체 섀도우 드로우콜 제외(Shadow LOD) 로직 검토.