핵심 정리
| 항목 | 역할 |
|---|---|
| Mipmap | 축소된 텍스처 단계 |
| LOD | 어떤 mip level을 읽을지 |
| Sampler state | filtering, wrapping, LOD 정책 |
| Anisotropic filtering | 비스듬한 표면의 선명도 개선 |
| Compression | texture memory와 bandwidth 절감 |
구조
mipmap은 원본 텍스처를 여러 크기로 미리 줄여 둔 계층입니다. 화면에서 텍스처가 작게 보일 때 원본을 그대로 샘플링하면 많은 texel 정보가 한 픽셀에 몰려 aliasing이 생깁니다.
1024x1024
-> 512x512
-> 256x256
-> ...GPU는 화면에서 texture coordinate가 얼마나 빠르게 변하는지 보고 적절한 mip level을 고릅니다. 이 선택이 LOD입니다. 가까운 표면은 높은 해상도 mip을, 먼 표면은 낮은 해상도 mip을 읽습니다.
sampler state는 텍스처를 읽는 정책입니다. min/mag filtering, mip filtering, wrapping, LOD bias, anisotropic level 같은 값이 여기 들어갑니다. texture data와 sampler policy를 분리하면 같은 이미지를 다른 방식으로 읽을 수 있습니다.
Compression
texture compression은 압축된 블록을 GPU가 직접 읽을 수 있게 하는 방식입니다. 메모리와 bandwidth를 줄이지만, normal map이나 mask texture에 맞지 않는 포맷을 쓰면 block artifact나 값 손상이 생길 수 있습니다.
선택 기준
| 상황 | 먼저 볼 설정 |
|---|---|
| 멀리서 반짝임 | mipmap, anisotropic filtering |
| 텍스처가 흐림 | LOD bias, mip generation 품질 |
| 비스듬한 바닥이 뭉개짐 | anisotropic filtering |
| 메모리 사용량이 큼 | compression, resolution, channel packing |
| normal map이 이상함 | normal용 압축 포맷, sRGB off |
텍스처 비용은 shader 계산보다 bandwidth와 cache miss에서 커질 수 있습니다. 큰 텍스처를 많이 읽는 material은 단순해 보여도 GPU에 무거울 수 있습니다.
주의할 점
mipmap은 무조건 켜면 좋은 옵션이 아닙니다. 데이터 lookup texture, ID texture, pixel art처럼 값이 섞이면 안 되는 텍스처는 mipmap과 linear filtering이 문제를 만들 수 있습니다.
compression도 텍스처 종류에 맞춰야 합니다. albedo와 normal, roughness, metallic, AO는 값의 의미가 다르므로 같은 포맷으로 처리하면 품질이나 물리적 반응이 틀어질 수 있습니다.