1. Direct3D Texture
1.1 Filter
1.1.1 Magnification
- 모니터의 해상도가 1024 ✕ 1024, Texture의 해상도가 256 ✕ 256인 경우 Texture로 부터 확대가 일어남
- 적은 수의 텍셀들로 더 많은 수의 픽셀들을 채워야 함
- 각 픽셀에는 정점 Texture 좌표를 삼각형을 따라 보간해서 결정된 고유한 Texture 좌표가 부여
- 텍셀 점과 정호가히 일치하지 않는 Texture 좌표를 가진 픽셀들이 존재
- 따라서 픽셀 부근에 있는 텍셀들의 색들을 보간해야하는데 그것을 상수 보간 & 선형 보간이라 부름
1.1.2 Minification
- 너무 많은 텍셀들이 너무 적은 픽셀들에 사상되는 것
- 위의 예시와 반대로 설정되게 된다면 픽셀의 Texture 좌표가 Texture Map의 어떤 텍셀 점과도 일치X
- 상수 보간 필터링 & 선형 보간 필터링 적용
- 위 필터링 이외의 처리가 가능
- 256 ✕ 256 텍셀 크기의 맵을 평균 하향표본화를 통해 더 작은 맵으로 줄일 수 있음
- 축소를 효율적으로 하지만 메모리는 조금 더 사용하는 밉매핑 방식 사용 (렌더링 이전에 미리 수행)
1.1.3 Anisotropic
- 다각형의 법선 벡터와 카메라의 시선 벡터 사이의 각도가 클 때 발생하는 왜곡 현상이 완화
- 비용이 크지만 왜곡에 의한 결함을 제거함으로써 품질이 크게 향상
1.2 Mode
- 함수의 정의역 바깥의 좌표가 주어졌을 때의 처리방식 - 좌표 지정 모드(Address Mode)
- Wrap, Border Color, Clamp, Mirror 4가지 존재
1.2.1 Wrap
- 이미지가 정수 경계마다 반복
- Texture를 일정한 표면에 반복해서 깔 수 있음, 타일링이라는 기법 사용
- 추가적인 자료 없이 Texture의 해상도를 높이는 효과, Texture의 이음매가 없도록 하는 것
SamplerState samTriLinear { Filter = MIN_MAG_MIP_LINEAR; AddressU = WRAP; AddressV = WRAP; }
1.2.2 Border Color
- 바깥의 Texture 좌표가 입력되면 Texture 함수는 프로그래머가 지정한 색을 사용
SamplerState samTriLinear { Filter = MIN_MAG_MIP_LINEAR AddressU = BORDER; AddressV = BORDER; }
1.2.3 Clamp
- Texture 함수는 바깥의 좌표에 대해 색을 돌려줌
SamplerState samTriLinear { Filter = MIN_MAG_MIP_LINEAR AddressU = CLAMP; AddressV = CLAMP; }
1.2.4 Mirror
- 이미지가 각 정수 경계마다 반사, 즉 반대 방향으로 반복
SamplerState samTriLinear { Filter = MIN_MAG_MIP_LINEAR AddressU = MIRROR; AddressV = MIRROR; }
1.3 Sampler State
1.3.1 Fixel Shader
- 위에서 설명한 내용을 토대로 필터들을 적용하기 위해 사용
- 축소, 확대, 밉맵에 대해 선형 필터링 적용
SamplerState mySamplerO { Filter = MIN_MAG_MIP_LINEAR; }
- 축소에 대해 선형 필터링, 확대와 밉맵에 대해 점 필터링 사용
SamplerState mySamplerl { Filter = MIN_LINEAR_MAG_MIP_POINT; }
- 축소 및 밉맵에 대해 점 필터링, 확대에 대해 선형 필터링
SamplerState mySampler2 { Filter = MIN_POINT_MAG_LINEAR_MIP_POINT; }
- 축소, 확대, 밉맵에 대해 비등방 필터링 사용
SamplerState mySampler3 { Filter = ANISOTROPIC; MaxAnisotropy = 4; }
- 픽셀 셰이더에서 주어진 픽셀 Texture 좌표를 이용하여 Texture로 부터 하나의 표본을 추출
- 적절한 표본추출기 선언과 함수 호출이 필요
- 2차원 Texture를 추출할 때 Sample 함수를 사용
- 주어진 Sampler State 객체에 지정된 필터링 방법을 이용, Texture 맵의 점에서 추출, 보간한 색상 값을 돌려줌
float4 PS(VertexOut pin, uniform int gLightCount) : SV_Target
{ float4 texColor = gDiffuseMap.Sample(samAnisotropic, pin.Tex); }
- Texture를 재질과 조명 시스템과 통합할 경우 주변광과 분산광으로 변조하되 반영광으로 변조X
'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글
[Direct11] 19. Direct3D Blending (0) | 2023.06.17 |
---|---|
[Direct11] 18. EX App Program - Texture Box (0) | 2023.06.16 |
[Direct11] 16. Direct3D Texture (0) | 2023.06.16 |
[Direct11] 15. EX App Program - Light System (0) | 2023.06.15 |
[Direct11] 14. Lighting System - Directional & Point & Spot Light (0) | 2023.06.15 |