Quick Flow
scene traversal -> visible render items
opaque queue -> pass/state/material 우선 + front-to-back 검토
transparent -> blend group + back-to-front 또는 전용 OIT 정책
submit -> state cache 비교 후 필요한 binding만 변경정렬 key는 renderer 목표에 따라 달라집니다. State 변경을 줄이기 위한 material 정렬과 overdraw를 줄이는 depth 정렬 사이의 우선순위를 profiler로 결정합니다.
책임 분리
Scene object는 transform과 component를 소유하고 render item은 이번 frame에 그릴 mesh range, material, world matrix와 bounds를 담습니다. Renderer는 item을 queue에 넣고 정렬하며 실제 Direct3D binding과 draw를 수행합니다.
State cache는 현재 context에 무엇이 binding됐는지 정확히 추적해야 합니다. 외부 코드가 context를 직접 변경하면 cache와 실제 state가 어긋나므로 context 접근 경계를 하나로 모읍니다.
Flip-model swap chain에서 성공한 Present 뒤에는 back buffer 0이 pipeline에서 unbind될 수 있습니다. 다음 frame은 RTV를 다시 bind하고 state cache의 output binding을 무효화하거나 실제 context 상태와 동기화합니다.
자주 틀리는 점
- Transparent geometry를 opaque와 같은 front-to-back 규칙으로 정렬하지 않습니다.
- Sort key collision이 실제 material equality를 대신한다고 가정하지 않습니다.
- 작은 state 절약을 위해 queue 구축 비용을 과도하게 키우지 않습니다.
- Deferred command list 실행 뒤 state 복원 계약을 확인합니다.
참고 링크
1 sources