505 Games 콘솔 포팅 엔지니어가 파헤친 텍스처 메모리 레이아웃의 해부
- 블로그 글쓴이는 505 Games에서 PC용 커스텀 엔진을 콘솔로 포팅하는 팀에 있고, 플랫폼 간 텍스처 변환 코드를 직접 작성하면서 블록 압축, 텍셀 정렬, 밉맵, 텍스처 타일 네 가지가 주소 계산을 얼마나 어렵게 만드는지 정리함
- 텍스처는 플랫폼마다 같은 계층 구조로 분해되지만 각 계층 요소가 메모리에 놓이는 순서가 플랫폼마다 달라서, 변환 작업은 요소별 기대 주소를 계산하는 문제로 바뀜(DirectX 12 기준)임
- BC7은 4x4 블록 단위 손실 압축으로 16바이트 블록이 16개 텍셀을 표현해 텍셀당 1바이트가 되고, RGBA 8비트 텍스처 대비 4배 압축됨
- 각 기법의 목적이 다름. 텍셀 정렬과 타일은 캐시 지역성, 블록 압축은 전송 데이터 크기 축소, 밉맵은 미리 다운샘플링해 렌더링 비용을 줄이는 것임
- 단순히 텍셀을 좌에서 우로 나열한다고 가정하면 이미지가 무지개 노이즈로 깨져 보이고, 실제 게임 텍스처는 이 계층 구조를 모두 따라 메모리에 배치됨
Hacker News opinions
LLM 티가 하나도 안 나는 글이라 끝까지 재밌게 읽었음.
내 통찰을 내 목소리로 설명하려고 공을 많이 들였음. 기계한테 문장을 맡겼으면 그 전제가 망가졌겠지.
505가 이렇게 알아볼 만한 게임을 많이 퍼블리싱한 회사인지 몰랐음. 위키 목록 보고 놀랐다.
게임 모딩하다가 밉맵, 타일, 블록, 텍셀 계층을 직접 봤어서 완전 공감됨. 정리 잘해줬다.
NTC나 VAE-VQ 같은 신경망 코덱으로 uint8 임베딩에 넣고 타깃 하드웨어에서 밉맵까지 펼쳐 쓰면 안 되는 건가?
블록 압축은 비트를 아끼려고 만든 거라 작은 블록에 국한되고 인코딩/디코딩 코드도 단순하며 AI 하드웨어가 필요 없음. NTC는 RTX 카드가 있어야 해서 Xbox One이나 PS4, PS5, 스위치에서는 못 씀.
그 질문은 왜 아폴로 13 구조에 셔틀을 안 보냈냐는 소리랑 비슷함.
블로그 글에 날짜 좀 넣어주면 좋겠음. '작년'이라고만 써 있어서 언제인지 헷갈렸다.
좋은 지적인데, 내일 붙여둘게.
유니티에서 녹슨 금속 텍스처 맞추느라 시간 엄청 날린 적 있음. PBR 파이프라인 만만한 게 아니다.