64박스 필터 샘플링
반응형
이전의 16박스, 9콘 필터 샘플링은 픽셀셰이더 1_1 버전의 한계인 한번의 렌더링에서
읽어들일 수 있는 텍스쳐가 4개라는 것을 염두에 둔 방식이다.
하지만 ps 2_0에서는 16개의 멀티텍스쳐 수를 지원하므로
16개의 샘플링 점을 읽어 64 텍셀을 한번에 읽는 방법을 사용할 수 있다.
그림 1 : 16개의 샘플링 점들.
위의 그림을 보면 16개의 샘플링 점들이 구성된 모습을 볼 수 있다.
ps에서는 텍스쳐를 16텍셀을 읽어 합계를 평균할 수 있지만 vs에서는 ps로 넘길 수 있는
텍스쳐 좌표의 수가 8개 까지므로 8개를 넘겨주고 나머지 8개는 좌표이동을 통해 구한다.
그림 2 : 텍셀을 왼쪽으로 이동.
위의 그림처럼 vs로 부터 오른쪽 8개의 텍셀 좌표를 입력받아 -4.0을 연산해 왼쪽 8개의 텍셀 위치를 알아낸다.
vs에서 ps로 넘기는 텍스쳐 좌표를 8개 넘겨야 하므로
struct VS_OUTPUT_H
{
float4 Pos : POSITION;
float2 Tex0 : TEXCOORD0;
float2 Tex1 : TEXCOORD1;
float2 Tex2 : TEXCOORD2;
float2 Tex3 : TEXCOORD3;
float2 Tex4 : TEXCOORD4;
float2 Tex5 : TEXCOORD5;
float2 Tex6 : TEXCOORD6;
float2 Tex7 : TEXCOORD7;
};
vs에서 우선 오른쪽 여덟개 텍스쳐 좌표 설정.
Out.Tex0 = Tex + float2( 3.0f/WIDTH, -3.0f/HEIGHT);
Out.Tex1 = Tex + float2( 3.0f/WIDTH, -1.0f/HEIGHT);
Out.Tex2 = Tex + float2( 3.0f/WIDTH, 1.0f/HEIGHT);
Out.Tex3 = Tex + float2( 3.0f/WIDTH, 3.0f/HEIGHT);
Out.Tex4 = Tex + float2( 1.0f/WIDTH, -3.0f/HEIGHT);
Out.Tex5 = Tex + float2( 1.0f/WIDTH, -1.0f/HEIGHT);
Out.Tex6 = Tex + float2( 1.0f/WIDTH, 1.0f/HEIGHT);
Out.Tex7 = Tex + float2( 1.0f/WIDTH, 3.0f/HEIGHT);
ps에서 넘겨받은 8개의 텍스쳐 좌표로부터 왼쪽으로 네칸 떨어진 왼쪽 8개점 설정.
float2 offSet = float2(-4.0f/WIDTH, 0);
float4 t0 = tex2D(SrcSamp, i.Tex0);
float4 t1 = tex2D(SrcSamp, i.Tex1);
float4 t2 = tex2D(SrcSamp, i.Tex2);
float4 t3 = tex2D(SrcSamp, i.Tex3);
float4 t4 = tex2D(SrcSamp, i.Tex4);
float4 t5 = tex2D(SrcSamp, i.Tex5);
float4 t6 = tex2D(SrcSamp, i.Tex6);
float4 t7 = tex2D(SrcSamp, i.Tex7);
float4 t8 = tex2D(SrcSamp, i.Tex0 + offSet);
float4 t9 = tex2D(SrcSamp, i.Tex1 + offSet);
float4 t10 = tex2D(SrcSamp, i.Tex2 + offSet);
float4 t11 = tex2D(SrcSamp, i.Tex3 + offSet);
float4 t12 = tex2D(SrcSamp, i.Tex4 + offSet);
float4 t13 = tex2D(SrcSamp, i.Tex5 + offSet);
float4 t14 = tex2D(SrcSamp, i.Tex6 + offSet);
float4 t15 = tex2D(SrcSamp, i.Tex7 + offSet);
마지막 결과값은 평균으로 설정.
o.vColor.rgb = (t0+t1+t2+t3 + t4+t5+t6+t7 + t8+t9+t10+t11 + t12+t13+t14+t15)/16;
대충 이런식임.
'Study > Graphics ' 카테고리의 다른 글
DXT 압축 (0) | 2013.03.15 |
---|---|
BRDF (Bidrectional Reflectance Distributing Function) (0) | 2012.12.06 |
9콘 필터 샘플링 (0) | 2012.01.26 |
Ambient Aperture Lighting (0) | 2011.07.14 |
빛의 감쇠 계산 (0) | 2011.06.22 |
TAGS.