Quick Reference
mipmap은 축소 샘플의 aliasing을 줄이고 sampler state는 filter·wrapping·LOD 범위와 bias를 조정하며, 압축 포맷은 texture 종류의 데이터 의미에 맞춰 선택합니다.
| 항목 | 역할 |
|---|---|
| Mipmap | 축소된 텍스처 단계 |
| LOD | 어떤 mip level을 읽을지 |
| Sampler state | filtering, wrapping, LOD 정책 |
| Anisotropic filtering | 비스듬한 표면의 선명도 개선 |
| Compression | texture memory와 bandwidth 절감 |
| 대상 | mip / filter | 색 공간·압축 |
|---|---|---|
| albedo | 보통 full mip + linear / anisotropic | sRGB color compression |
| normal | 보통 full mip + renormalization 고려 | linear normal-aware compression |
| mask / ID / lookup | 값 의미에 따라 mip·linear 제한 | linear data, channel precision 우선 |
| pixel art | 보통 nearest, 명시적 mip 정책 | bleed와 혼합 방지 |
구조
mipmap은 원본 텍스처를 여러 크기로 미리 줄여 둔 계층입니다. 화면에서 텍스처가 작게 보일 때 원본을 그대로 샘플링하면 많은 texel 정보가 한 픽셀에 몰려 aliasing이 생깁니다.
1024x1024
-> 512x512
-> 256x256
-> ...GPU는 화면에서 texture coordinate가 얼마나 빠르게 변하는지 보고 적절한 mip level을 고릅니다. 이 선택이 LOD입니다. 가까운 표면은 높은 해상도 mip을, 먼 표면은 낮은 해상도 mip을 읽습니다.
일반 texture sampling의 implicit LOD는 screen-space UV derivative로 계산됩니다. fragment shader에서 UV가 불연속이거나 divergent control flow 안에서 derivative를 쓰면 LOD가 예상과 다를 수 있습니다. virtual texture, feedback, manual blur처럼 명시적 textureLod를 쓰는 경우에는 mip 선택 책임이 shader 쪽으로 넘어갑니다.
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나 값 손상이 생길 수 있습니다.
texture image와 sampler는 분리된 상태입니다. 같은 image라도 sampler가 repeat/clamp, nearest/linear, LOD bias, anisotropy를 다르게 줄 수 있습니다. image asset을 고쳤는데 화면 결과가 그대로면 sampler object 또는 material binding이 이전 state를 재사용하는지 확인합니다.
선택 기준
| 상황 | 먼저 볼 설정 |
|---|---|
| 멀리서 반짝임 | 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는 값의 의미가 다르므로 같은 포맷으로 처리하면 품질이나 물리적 반응이 틀어질 수 있습니다.
mip chain은 base level보다 약 33%의 추가 texel memory가 필요합니다. 메모리를 아끼려고 mip을 없애면 멀리서 aliasing과 texture cache 낭비가 커질 수 있으므로, streaming budget, target distance, texture 의미를 같이 비교합니다.